Kaynağa Gözat

增强判断逻辑及引入另外一种识别图像文字的方法

wutt 5 yıl önce
ebeveyn
işleme
648dcc5343
20 değiştirilmiş dosya ile 909 ekleme ve 46 silme
  1. BIN
      fhKeeper/formulahousekeeper/management-platform/chi_sim.traineddata
  2. 6 6
      fhKeeper/formulahousekeeper/management-platform/pom.xml
  3. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/constant/Parameter.java
  4. 0 19
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ImageProcessingController.java
  5. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Screenshot.java
  6. 35 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ScreenshotServiceImpl.java
  7. BIN
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/chi_sim.traineddata
  8. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/configs/api_config
  9. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/configs/digits
  10. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/configs/hocr
  11. BIN
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/eng.traineddata
  12. BIN
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/osd.traineddata
  13. BIN
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/pdf.ttf
  14. 793 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/pdf.ttx
  15. 12 11
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/test/TestApplicationTests.java
  16. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/ProcessUtil.java
  17. 37 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/Tess4jDemo.java
  18. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml
  19. 6 1
      fhKeeper/formulahousekeeper/pom.xml
  20. 9 4
      fhKeeper/formulahousekeeper/timesheet/package-lock.json

BIN
fhKeeper/formulahousekeeper/management-platform/chi_sim.traineddata


+ 6 - 6
fhKeeper/formulahousekeeper/management-platform/pom.xml

@@ -97,12 +97,12 @@
             <artifactId>aspectjweaver</artifactId>
         </dependency>
 
-        <!--        &lt;!&ndash; https://mvnrepository.com/artifact/at.bestsolution.efxclipse.eclipse/com.google.gson &ndash;&gt;-->
-        <!--        <dependency>-->
-        <!--            <groupId>at.bestsolution.efxclipse.eclipse</groupId>-->
-        <!--            <artifactId>com.google.gson</artifactId>-->
-        <!--            <version>2.2.4</version>-->
-        <!--        </dependency>-->
+        <!--     tess4j相关依赖   -->
+        <!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->
+        <dependency>
+            <groupId>net.sourceforge.tess4j</groupId>
+            <artifactId>tess4j</artifactId>
+        </dependency>
 
 
     </dependencies>

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/constant/Parameter.java

@@ -17,7 +17,8 @@ public enum Parameter {
 
     private Parameter(String code, String name) {
         this.code = code;
-        this.name = name();
+//        this.name = name();
+        this.name = name;
     }
 
     public String getCode() {

+ 0 - 19
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ImageProcessingController.java

@@ -1,30 +1,11 @@
 package com.management.platform.controller;
-import	java.lang.ref.Reference;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.management.platform.constant.Constant;
-import com.management.platform.entity.Screenshot;
 import com.management.platform.entity.vo.ScreenshotVO;
-import com.management.platform.mapper.ScreenshotMapper;
 import com.management.platform.service.ScreenshotService;
-import com.management.platform.util.AuthService;
-import com.management.platform.util.CheckPicUtil;
 import com.management.platform.util.HttpRespMsg;
-import com.management.platform.util.RedisUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-
 import javax.annotation.Resource;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 /**
  * Author: 吴涛涛

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Screenshot.java

@@ -6,9 +6,12 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
 
 /**
  * <p>
@@ -47,6 +50,7 @@ public class Screenshot extends Model<Screenshot> {
      * 截图时间
      */
     @TableField("indate")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime indate;
 
     /**

+ 35 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ScreenshotServiceImpl.java

@@ -8,6 +8,7 @@ import com.management.platform.constant.Parameter;
 import com.management.platform.entity.PicContentKeywords;
 import com.management.platform.entity.Screenshot;
 import com.management.platform.entity.vo.ScreenshotVO;
+import com.management.platform.mapper.PicContentKeywordsMapper;
 import com.management.platform.mapper.ScreenshotMapper;
 import com.management.platform.service.ScreenshotService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -23,6 +24,7 @@ import javax.annotation.Resource;
 import javax.annotation.Resources;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -50,6 +52,9 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
     @Resource
     private ScreenshotMapper screenshotMapper;
 
+    @Resource
+    private PicContentKeywordsMapper picContentKeywordsMapper;
+
     //获取所有人最新的截图
     @Override
     public HttpRespMsg getLatestScreenshotList() {
@@ -71,6 +76,7 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
         } else {
             Map<String, Object> map = AuthService.getAuth(Constant.API_KEY, Constant.SECRET_KEY);
             accessToken = (String) map.get(Parameter.ACCESS_TOKEN.getName());
+            System.out.println(accessToken);
             redisUtil.setKeyWithExpireTime(Parameter.ACCESS_TOKEN.getName(), accessToken, (Long) map.get(Parameter.EXPIRES_IN.getName()));
         }
         log.info("accessToken-->" + accessToken);
@@ -80,8 +86,21 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
         Map<String, Object> picResultMap = CheckPicUtil.generalPicTextContentMap(path + filePath.substring("/upload/".length()), accessToken);
         List<String> textContents = (List<String>) picResultMap.get("wordsList");
         screenshot.setPicContext((String) picResultMap.get("picContent"));
-        Set<Object> members = redisUtil.members(Constant.COMMON_SOFTWARE_KEYWORDS);
+        Set<Object> members = new HashSet<>();
+        if (redisUtil.existsKey(Constant.COMMON_SOFTWARE_KEYWORDS)) {
+            members = redisUtil.members(Constant.COMMON_SOFTWARE_KEYWORDS);
+        } else {
+            List<PicContentKeywords> picContentKeywords = picContentKeywordsMapper.selectList(null);
+            for (PicContentKeywords keyWord : picContentKeywords) {
+                redisUtil.sSetJsonString("keyWords", keyWord);
+            }
+            //由于存入数据库的对象被序列化成了json字符串,所以从redis里拿方便
+            members = redisUtil.members(Constant.COMMON_SOFTWARE_KEYWORDS);
+        }
         List<String> exeprocessList = ProcessUtil.getExeprocessListfromProcessStr(screenshotvo.getProcessList());
+        System.out.println("進程"+exeprocessList);
+        boolean derail = false;//判断是否匹配的开关
+        Integer lastType = null;
         for (String textContent : textContents) {
             for (Object member : members) {
                 //由于redis里存储的member是一个PicContentKeywords类型的json字符串,所以取出关键字内容比较
@@ -92,8 +111,21 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
                     //找到对应关键字,确定图片是哪个类型的图片
                     //结合进程判断
                     if (exeprocessList.contains(jsonMember.getString("processName").toLowerCase())) {
-                        log.info("图片中关键字对应的进程名--->" + jsonMember.getString("processName"));
-                        screenshot.setPicType(jsonMember.getInteger("type"));
+                        if (!derail) {
+                            //判断是否是第一次匹配
+                            log.info("图片中关键字对应的进程名--->" + jsonMember.getString("processName"));
+                            screenshot.setPicType(jsonMember.getInteger("type"));
+                            lastType = jsonMember.getInteger("type");
+                            derail = true;
+                        } else {
+                            if (0 == lastType) {
+                                //软件开发为主
+                                break;
+                            } else {
+                                screenshot.setPicType(jsonMember.getInteger("type"));
+                                lastType = jsonMember.getInteger("type");
+                            }
+                        }
                     }
                 }
             }

BIN
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/chi_sim.traineddata


+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/configs/api_config

@@ -0,0 +1 @@
+tessedit_zero_rejection T

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/configs/digits

@@ -0,0 +1 @@
+tessedit_char_whitelist 0123456789-.

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/configs/hocr

@@ -0,0 +1 @@
+tessedit_create_hocr 1

BIN
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/eng.traineddata


BIN
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/osd.traineddata


BIN
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/pdf.ttf


+ 793 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/tessdata/pdf.ttx

@@ -0,0 +1,793 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="2.4">
+
+  <GlyphOrder>
+    <!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
+    <GlyphID id="0" name=".notdef"/>
+    <GlyphID id="1" name="glyph00001"/>
+    <GlyphID id="2" name="glyph00002"/>
+    <GlyphID id="3" name="glyph00003"/>
+    <GlyphID id="4" name="glyph00004"/>
+    <GlyphID id="5" name="glyph00005"/>
+    <GlyphID id="6" name="glyph00006"/>
+    <GlyphID id="7" name="glyph00007"/>
+    <GlyphID id="8" name="glyph00008"/>
+    <GlyphID id="9" name="glyph00009"/>
+    <GlyphID id="10" name="glyph00010"/>
+    <GlyphID id="11" name="glyph00011"/>
+    <GlyphID id="12" name="glyph00012"/>
+    <GlyphID id="13" name="glyph00013"/>
+    <GlyphID id="14" name="glyph00014"/>
+    <GlyphID id="15" name="glyph00015"/>
+    <GlyphID id="16" name="glyph00016"/>
+    <GlyphID id="17" name="glyph00017"/>
+    <GlyphID id="18" name="glyph00018"/>
+    <GlyphID id="19" name="glyph00019"/>
+    <GlyphID id="20" name="glyph00020"/>
+    <GlyphID id="21" name="glyph00021"/>
+    <GlyphID id="22" name="glyph00022"/>
+    <GlyphID id="23" name="glyph00023"/>
+    <GlyphID id="24" name="glyph00024"/>
+    <GlyphID id="25" name="glyph00025"/>
+    <GlyphID id="26" name="glyph00026"/>
+    <GlyphID id="27" name="glyph00027"/>
+    <GlyphID id="28" name="glyph00028"/>
+    <GlyphID id="29" name="glyph00029"/>
+    <GlyphID id="30" name="glyph00030"/>
+    <GlyphID id="31" name="glyph00031"/>
+    <GlyphID id="32" name="glyph00032"/>
+    <GlyphID id="33" name="glyph00033"/>
+    <GlyphID id="34" name="glyph00034"/>
+    <GlyphID id="35" name="glyph00035"/>
+    <GlyphID id="36" name="glyph00036"/>
+    <GlyphID id="37" name="glyph00037"/>
+    <GlyphID id="38" name="glyph00038"/>
+    <GlyphID id="39" name="glyph00039"/>
+    <GlyphID id="40" name="glyph00040"/>
+    <GlyphID id="41" name="glyph00041"/>
+    <GlyphID id="42" name="glyph00042"/>
+    <GlyphID id="43" name="glyph00043"/>
+    <GlyphID id="44" name="glyph00044"/>
+    <GlyphID id="45" name="glyph00045"/>
+    <GlyphID id="46" name="glyph00046"/>
+    <GlyphID id="47" name="glyph00047"/>
+    <GlyphID id="48" name="glyph00048"/>
+    <GlyphID id="49" name="glyph00049"/>
+    <GlyphID id="50" name="glyph00050"/>
+    <GlyphID id="51" name="glyph00051"/>
+    <GlyphID id="52" name="glyph00052"/>
+    <GlyphID id="53" name="glyph00053"/>
+    <GlyphID id="54" name="glyph00054"/>
+    <GlyphID id="55" name="glyph00055"/>
+    <GlyphID id="56" name="glyph00056"/>
+    <GlyphID id="57" name="glyph00057"/>
+    <GlyphID id="58" name="glyph00058"/>
+    <GlyphID id="59" name="glyph00059"/>
+    <GlyphID id="60" name="glyph00060"/>
+    <GlyphID id="61" name="glyph00061"/>
+    <GlyphID id="62" name="glyph00062"/>
+    <GlyphID id="63" name="glyph00063"/>
+    <GlyphID id="64" name="glyph00064"/>
+    <GlyphID id="65" name="glyph00065"/>
+    <GlyphID id="66" name="glyph00066"/>
+    <GlyphID id="67" name="glyph00067"/>
+    <GlyphID id="68" name="glyph00068"/>
+    <GlyphID id="69" name="glyph00069"/>
+    <GlyphID id="70" name="glyph00070"/>
+    <GlyphID id="71" name="glyph00071"/>
+    <GlyphID id="72" name="glyph00072"/>
+    <GlyphID id="73" name="glyph00073"/>
+    <GlyphID id="74" name="glyph00074"/>
+    <GlyphID id="75" name="glyph00075"/>
+    <GlyphID id="76" name="glyph00076"/>
+    <GlyphID id="77" name="glyph00077"/>
+    <GlyphID id="78" name="glyph00078"/>
+    <GlyphID id="79" name="glyph00079"/>
+    <GlyphID id="80" name="glyph00080"/>
+    <GlyphID id="81" name="glyph00081"/>
+    <GlyphID id="82" name="glyph00082"/>
+    <GlyphID id="83" name="glyph00083"/>
+    <GlyphID id="84" name="glyph00084"/>
+    <GlyphID id="85" name="glyph00085"/>
+    <GlyphID id="86" name="glyph00086"/>
+    <GlyphID id="87" name="glyph00087"/>
+    <GlyphID id="88" name="glyph00088"/>
+    <GlyphID id="89" name="glyph00089"/>
+    <GlyphID id="90" name="glyph00090"/>
+    <GlyphID id="91" name="glyph00091"/>
+    <GlyphID id="92" name="glyph00092"/>
+    <GlyphID id="93" name="glyph00093"/>
+    <GlyphID id="94" name="glyph00094"/>
+    <GlyphID id="95" name="glyph00095"/>
+    <GlyphID id="96" name="glyph00096"/>
+    <GlyphID id="97" name="glyph00097"/>
+    <GlyphID id="98" name="glyph00098"/>
+    <GlyphID id="99" name="glyph00099"/>
+    <GlyphID id="100" name="glyph00100"/>
+    <GlyphID id="101" name="glyph00101"/>
+    <GlyphID id="102" name="glyph00102"/>
+    <GlyphID id="103" name="glyph00103"/>
+    <GlyphID id="104" name="glyph00104"/>
+    <GlyphID id="105" name="glyph00105"/>
+    <GlyphID id="106" name="glyph00106"/>
+    <GlyphID id="107" name="glyph00107"/>
+    <GlyphID id="108" name="glyph00108"/>
+    <GlyphID id="109" name="glyph00109"/>
+    <GlyphID id="110" name="glyph00110"/>
+    <GlyphID id="111" name="glyph00111"/>
+    <GlyphID id="112" name="glyph00112"/>
+    <GlyphID id="113" name="glyph00113"/>
+    <GlyphID id="114" name="glyph00114"/>
+    <GlyphID id="115" name="glyph00115"/>
+    <GlyphID id="116" name="glyph00116"/>
+  </GlyphOrder>
+
+  <head>
+    <!-- Most of this table will be recalculated by the compiler -->
+    <tableVersion value="1.0"/>
+    <fontRevision value="2.31999206543"/>
+    <checkSumAdjustment value="0xd4fdc458"/>
+    <magicNumber value="0x5f0f3cf5"/>
+    <flags value="00000000 00011111"/>
+    <unitsPerEm value="2048"/>
+    <created value="Fri Sep 10 06:45:17 2010"/>
+    <modified value="Fri Sep 10 06:45:17 2010"/>
+    <xMin value="0"/>
+    <yMin value="0"/>
+    <xMax value="1000"/>
+    <yMax value="1000"/>
+    <macStyle value="00000000 00000000"/>
+    <lowestRecPPEM value="8"/>
+    <fontDirectionHint value="0"/>
+    <indexToLocFormat value="1"/>
+    <glyphDataFormat value="0"/>
+  </head>
+
+  <hhea>
+    <tableVersion value="1.0"/>
+    <ascent value="1000"/>
+    <descent value="0"/>
+    <lineGap value="0"/>
+    <advanceWidthMax value="3554"/>
+    <minLeftSideBearing value="-2090"/>
+    <minRightSideBearing value="-1455"/>
+    <xMaxExtent value="3442"/>
+    <caretSlopeRise value="1"/>
+    <caretSlopeRun value="0"/>
+    <caretOffset value="0"/>
+    <reserved0 value="0"/>
+    <reserved1 value="0"/>
+    <reserved2 value="0"/>
+    <reserved3 value="0"/>
+    <metricDataFormat value="0"/>
+    <numberOfHMetrics value="117"/>
+  </hhea>
+
+  <maxp>
+    <!-- Most of this table will be recalculated by the compiler -->
+    <tableVersion value="0x10000"/>
+    <numGlyphs value="117"/>
+    <maxPoints value="852"/>
+    <maxContours value="43"/>
+    <maxCompositePoints value="104"/>
+    <maxCompositeContours value="12"/>
+    <maxZones value="2"/>
+    <maxTwilightPoints value="16"/>
+    <maxStorage value="153"/>
+    <maxFunctionDefs value="8"/>
+    <maxInstructionDefs value="0"/>
+    <maxStackElements value="1045"/>
+    <maxSizeOfInstructions value="534"/>
+    <maxComponentElements value="8"/>
+    <maxComponentDepth value="4"/>
+  </maxp>
+
+  <hmtx>
+    <mtx name=".notdef" width="1000" lsb="0"/>
+    <mtx name="glyph00001" width="1000" lsb="0"/>
+    <mtx name="glyph00002" width="1000" lsb="0"/>
+    <mtx name="glyph00003" width="1000" lsb="0"/>
+    <mtx name="glyph00004" width="1000" lsb="0"/>
+    <mtx name="glyph00005" width="1000" lsb="0"/>
+    <mtx name="glyph00006" width="1000" lsb="0"/>
+    <mtx name="glyph00007" width="1000" lsb="0"/>
+    <mtx name="glyph00008" width="1000" lsb="0"/>
+    <mtx name="glyph00009" width="1000" lsb="0"/>
+    <mtx name="glyph00010" width="1000" lsb="0"/>
+    <mtx name="glyph00011" width="1000" lsb="0"/>
+    <mtx name="glyph00012" width="1000" lsb="0"/>
+    <mtx name="glyph00013" width="1000" lsb="0"/>
+    <mtx name="glyph00014" width="1000" lsb="0"/>
+    <mtx name="glyph00015" width="1000" lsb="0"/>
+    <mtx name="glyph00016" width="1000" lsb="0"/>
+    <mtx name="glyph00017" width="1000" lsb="0"/>
+    <mtx name="glyph00018" width="1000" lsb="0"/>
+    <mtx name="glyph00019" width="1000" lsb="0"/>
+    <mtx name="glyph00020" width="1000" lsb="0"/>
+    <mtx name="glyph00021" width="1000" lsb="0"/>
+    <mtx name="glyph00022" width="1000" lsb="0"/>
+    <mtx name="glyph00023" width="1000" lsb="0"/>
+    <mtx name="glyph00024" width="1000" lsb="0"/>
+    <mtx name="glyph00025" width="1000" lsb="0"/>
+    <mtx name="glyph00026" width="1000" lsb="0"/>
+    <mtx name="glyph00027" width="1000" lsb="0"/>
+    <mtx name="glyph00028" width="1000" lsb="0"/>
+    <mtx name="glyph00029" width="1000" lsb="0"/>
+    <mtx name="glyph00030" width="1000" lsb="0"/>
+    <mtx name="glyph00031" width="1000" lsb="0"/>
+    <mtx name="glyph00032" width="1000" lsb="0"/>
+    <mtx name="glyph00033" width="1000" lsb="0"/>
+    <mtx name="glyph00034" width="1000" lsb="0"/>
+    <mtx name="glyph00035" width="1000" lsb="0"/>
+    <mtx name="glyph00036" width="1000" lsb="0"/>
+    <mtx name="glyph00037" width="1000" lsb="0"/>
+    <mtx name="glyph00038" width="1000" lsb="0"/>
+    <mtx name="glyph00039" width="1000" lsb="0"/>
+    <mtx name="glyph00040" width="1000" lsb="0"/>
+    <mtx name="glyph00041" width="1000" lsb="0"/>
+    <mtx name="glyph00042" width="1000" lsb="0"/>
+    <mtx name="glyph00043" width="1000" lsb="0"/>
+    <mtx name="glyph00044" width="1000" lsb="0"/>
+    <mtx name="glyph00045" width="1000" lsb="0"/>
+    <mtx name="glyph00046" width="1000" lsb="0"/>
+    <mtx name="glyph00047" width="1000" lsb="0"/>
+    <mtx name="glyph00048" width="1000" lsb="0"/>
+    <mtx name="glyph00049" width="1000" lsb="0"/>
+    <mtx name="glyph00050" width="1000" lsb="0"/>
+    <mtx name="glyph00051" width="1000" lsb="0"/>
+    <mtx name="glyph00052" width="1000" lsb="0"/>
+    <mtx name="glyph00053" width="1000" lsb="0"/>
+    <mtx name="glyph00054" width="1000" lsb="0"/>
+    <mtx name="glyph00055" width="1000" lsb="0"/>
+    <mtx name="glyph00056" width="1000" lsb="0"/>
+    <mtx name="glyph00057" width="1000" lsb="0"/>
+    <mtx name="glyph00058" width="1000" lsb="0"/>
+    <mtx name="glyph00059" width="1000" lsb="0"/>
+    <mtx name="glyph00060" width="1000" lsb="0"/>
+    <mtx name="glyph00061" width="1000" lsb="0"/>
+    <mtx name="glyph00062" width="1000" lsb="0"/>
+    <mtx name="glyph00063" width="1000" lsb="0"/>
+    <mtx name="glyph00064" width="1000" lsb="0"/>
+    <mtx name="glyph00065" width="1000" lsb="0"/>
+    <mtx name="glyph00066" width="1000" lsb="0"/>
+    <mtx name="glyph00067" width="1000" lsb="0"/>
+    <mtx name="glyph00068" width="1000" lsb="0"/>
+    <mtx name="glyph00069" width="1000" lsb="0"/>
+    <mtx name="glyph00070" width="1000" lsb="0"/>
+    <mtx name="glyph00071" width="1000" lsb="0"/>
+    <mtx name="glyph00072" width="1000" lsb="0"/>
+    <mtx name="glyph00073" width="1000" lsb="0"/>
+    <mtx name="glyph00074" width="1000" lsb="0"/>
+    <mtx name="glyph00075" width="1000" lsb="0"/>
+    <mtx name="glyph00076" width="1000" lsb="0"/>
+    <mtx name="glyph00077" width="1000" lsb="0"/>
+    <mtx name="glyph00078" width="1000" lsb="0"/>
+    <mtx name="glyph00079" width="1000" lsb="0"/>
+    <mtx name="glyph00080" width="1000" lsb="0"/>
+    <mtx name="glyph00081" width="1000" lsb="0"/>
+    <mtx name="glyph00082" width="1000" lsb="0"/>
+    <mtx name="glyph00083" width="1000" lsb="0"/>
+    <mtx name="glyph00084" width="1000" lsb="0"/>
+    <mtx name="glyph00085" width="1000" lsb="0"/>
+    <mtx name="glyph00086" width="1000" lsb="0"/>
+    <mtx name="glyph00087" width="1000" lsb="0"/>
+    <mtx name="glyph00088" width="1000" lsb="0"/>
+    <mtx name="glyph00089" width="1000" lsb="0"/>
+    <mtx name="glyph00090" width="1000" lsb="0"/>
+    <mtx name="glyph00091" width="1000" lsb="0"/>
+    <mtx name="glyph00092" width="1000" lsb="0"/>
+    <mtx name="glyph00093" width="1000" lsb="0"/>
+    <mtx name="glyph00094" width="1000" lsb="0"/>
+    <mtx name="glyph00095" width="1000" lsb="0"/>
+    <mtx name="glyph00096" width="1000" lsb="0"/>
+    <mtx name="glyph00097" width="1000" lsb="0"/>
+    <mtx name="glyph00098" width="1000" lsb="0"/>
+    <mtx name="glyph00099" width="1000" lsb="0"/>
+    <mtx name="glyph00100" width="1000" lsb="0"/>
+    <mtx name="glyph00101" width="1000" lsb="0"/>
+    <mtx name="glyph00102" width="1000" lsb="0"/>
+    <mtx name="glyph00103" width="1000" lsb="0"/>
+    <mtx name="glyph00104" width="1000" lsb="0"/>
+    <mtx name="glyph00105" width="1000" lsb="0"/>
+    <mtx name="glyph00106" width="1000" lsb="0"/>
+    <mtx name="glyph00107" width="1000" lsb="0"/>
+    <mtx name="glyph00108" width="1000" lsb="0"/>
+    <mtx name="glyph00109" width="1000" lsb="0"/>
+    <mtx name="glyph00110" width="1000" lsb="0"/>
+    <mtx name="glyph00111" width="1000" lsb="0"/>
+    <mtx name="glyph00112" width="1000" lsb="0"/>
+    <mtx name="glyph00113" width="1000" lsb="0"/>
+    <mtx name="glyph00114" width="1000" lsb="0"/>
+    <mtx name="glyph00115" width="1000" lsb="0"/>
+    <mtx name="glyph00116" width="1000" lsb="0"/>
+  </hmtx>
+
+  <cmap>
+    <tableVersion version="0"/>
+    <cmap_format_4 platformID="3" platEncID="0" language="0">
+      <map code="0xf000" name=".notdef"/>
+      <map code="0xf001" name="glyph00001"/>
+      <map code="0xf002" name="glyph00002"/>
+      <map code="0xf003" name="glyph00003"/>
+      <map code="0xf004" name="glyph00004"/>
+      <map code="0xf005" name="glyph00005"/>
+      <map code="0xf006" name="glyph00006"/>
+      <map code="0xf007" name="glyph00007"/>
+      <map code="0xf008" name="glyph00008"/>
+      <map code="0xf009" name="glyph00009"/>
+      <map code="0xf00a" name="glyph00010"/>
+      <map code="0xf00b" name="glyph00011"/>
+      <map code="0xf00c" name="glyph00012"/>
+      <map code="0xf00d" name="glyph00013"/>
+      <map code="0xf00e" name="glyph00014"/>
+      <map code="0xf00f" name="glyph00015"/>
+      <map code="0xf010" name="glyph00016"/>
+      <map code="0xf011" name="glyph00017"/>
+      <map code="0xf012" name="glyph00018"/>
+      <map code="0xf013" name="glyph00019"/>
+      <map code="0xf014" name="glyph00020"/>
+      <map code="0xf015" name="glyph00021"/>
+      <map code="0xf016" name="glyph00022"/>
+      <map code="0xf017" name="glyph00023"/>
+      <map code="0xf018" name="glyph00024"/>
+      <map code="0xf019" name="glyph00025"/>
+      <map code="0xf01a" name="glyph00026"/>
+      <map code="0xf01b" name="glyph00027"/>
+      <map code="0xf01c" name="glyph00028"/>
+      <map code="0xf01d" name="glyph00029"/>
+      <map code="0xf01e" name="glyph00030"/>
+      <map code="0xf01f" name="glyph00031"/>
+      <map code="0xf020" name="glyph00032"/>
+      <map code="0xf021" name="glyph00033"/>
+      <map code="0xf022" name="glyph00034"/>
+      <map code="0xf023" name="glyph00035"/>
+      <map code="0xf024" name="glyph00036"/>
+      <map code="0xf025" name="glyph00037"/>
+      <map code="0xf026" name="glyph00038"/>
+      <map code="0xf027" name="glyph00039"/>
+      <map code="0xf028" name="glyph00040"/>
+      <map code="0xf029" name="glyph00041"/>
+      <map code="0xf02a" name="glyph00042"/>
+      <map code="0xf02b" name="glyph00043"/>
+      <map code="0xf02c" name="glyph00044"/>
+      <map code="0xf02d" name="glyph00045"/>
+      <map code="0xf02e" name="glyph00046"/>
+      <map code="0xf02f" name="glyph00047"/>
+      <map code="0xf030" name="glyph00048"/>
+      <map code="0xf031" name="glyph00049"/>
+      <map code="0xf032" name="glyph00050"/>
+      <map code="0xf033" name="glyph00051"/>
+      <map code="0xf034" name="glyph00052"/>
+      <map code="0xf035" name="glyph00053"/>
+      <map code="0xf036" name="glyph00054"/>
+      <map code="0xf037" name="glyph00055"/>
+      <map code="0xf038" name="glyph00056"/>
+      <map code="0xf039" name="glyph00057"/>
+      <map code="0xf03a" name="glyph00058"/>
+      <map code="0xf03b" name="glyph00059"/>
+      <map code="0xf03c" name="glyph00060"/>
+      <map code="0xf03d" name="glyph00061"/>
+      <map code="0xf03e" name="glyph00062"/>
+      <map code="0xf03f" name="glyph00063"/>
+      <map code="0xf040" name="glyph00064"/>
+      <map code="0xf041" name="glyph00065"/>
+      <map code="0xf042" name="glyph00066"/>
+      <map code="0xf043" name="glyph00067"/>
+      <map code="0xf044" name="glyph00068"/>
+      <map code="0xf045" name="glyph00069"/>
+      <map code="0xf046" name="glyph00070"/>
+      <map code="0xf047" name="glyph00071"/>
+      <map code="0xf048" name="glyph00072"/>
+      <map code="0xf049" name="glyph00073"/>
+      <map code="0xf04a" name="glyph00074"/>
+      <map code="0xf04b" name="glyph00075"/>
+      <map code="0xf04c" name="glyph00076"/>
+      <map code="0xf04d" name="glyph00077"/>
+      <map code="0xf04e" name="glyph00078"/>
+      <map code="0xf04f" name="glyph00079"/>
+      <map code="0xf050" name="glyph00080"/>
+      <map code="0xf051" name="glyph00081"/>
+      <map code="0xf052" name="glyph00082"/>
+      <map code="0xf053" name="glyph00083"/>
+      <map code="0xf054" name="glyph00084"/>
+      <map code="0xf055" name="glyph00085"/>
+      <map code="0xf056" name="glyph00086"/>
+      <map code="0xf057" name="glyph00087"/>
+      <map code="0xf058" name="glyph00088"/>
+      <map code="0xf059" name="glyph00089"/>
+      <map code="0xf05a" name="glyph00090"/>
+      <map code="0xf05b" name="glyph00091"/>
+      <map code="0xf05c" name="glyph00092"/>
+      <map code="0xf05d" name="glyph00093"/>
+      <map code="0xf05e" name="glyph00094"/>
+      <map code="0xf05f" name="glyph00095"/>
+      <map code="0xf060" name="glyph00096"/>
+      <map code="0xf061" name="glyph00097"/>
+      <map code="0xf062" name="glyph00098"/>
+      <map code="0xf063" name="glyph00099"/>
+      <map code="0xf064" name="glyph00100"/>
+      <map code="0xf065" name="glyph00101"/>
+      <map code="0xf066" name="glyph00102"/>
+      <map code="0xf067" name="glyph00103"/>
+      <map code="0xf068" name="glyph00104"/>
+      <map code="0xf069" name="glyph00105"/>
+      <map code="0xf06a" name="glyph00106"/>
+      <map code="0xf06b" name="glyph00107"/>
+      <map code="0xf06c" name="glyph00108"/>
+      <map code="0xf06d" name="glyph00109"/>
+      <map code="0xf06e" name="glyph00110"/>
+      <map code="0xf06f" name="glyph00111"/>
+      <map code="0xf070" name="glyph00112"/>
+      <map code="0xf071" name="glyph00113"/>
+      <map code="0xf072" name="glyph00114"/>
+      <map code="0xf073" name="glyph00115"/>
+      <map code="0xf074" name="glyph00116"/>
+    </cmap_format_4>
+    <cmap_format_6 platformID="1" platEncID="0" language="0">
+      <map code="0x0" name=".notdef"/>
+      <map code="0x1" name="glyph00001"/>
+      <map code="0x2" name="glyph00002"/>
+      <map code="0x3" name="glyph00003"/>
+      <map code="0x4" name="glyph00004"/>
+      <map code="0x5" name="glyph00005"/>
+      <map code="0x6" name="glyph00006"/>
+      <map code="0x7" name="glyph00007"/>
+      <map code="0x8" name="glyph00008"/>
+      <map code="0x9" name="glyph00009"/>
+      <map code="0xa" name="glyph00010"/>
+      <map code="0xb" name="glyph00011"/>
+      <map code="0xc" name="glyph00012"/>
+      <map code="0xd" name="glyph00013"/>
+      <map code="0xe" name="glyph00014"/>
+      <map code="0xf" name="glyph00015"/>
+      <map code="0x10" name="glyph00016"/>
+      <map code="0x11" name="glyph00017"/>
+      <map code="0x12" name="glyph00018"/>
+      <map code="0x13" name="glyph00019"/>
+      <map code="0x14" name="glyph00020"/>
+      <map code="0x15" name="glyph00021"/>
+      <map code="0x16" name="glyph00022"/>
+      <map code="0x17" name="glyph00023"/>
+      <map code="0x18" name="glyph00024"/>
+      <map code="0x19" name="glyph00025"/>
+      <map code="0x1a" name="glyph00026"/>
+      <map code="0x1b" name="glyph00027"/>
+      <map code="0x1c" name="glyph00028"/>
+      <map code="0x1d" name="glyph00029"/>
+      <map code="0x1e" name="glyph00030"/>
+      <map code="0x1f" name="glyph00031"/>
+      <map code="0x20" name="glyph00032"/>
+      <map code="0x21" name="glyph00033"/>
+      <map code="0x22" name="glyph00034"/>
+      <map code="0x23" name="glyph00035"/>
+      <map code="0x24" name="glyph00036"/>
+      <map code="0x25" name="glyph00037"/>
+      <map code="0x26" name="glyph00038"/>
+      <map code="0x27" name="glyph00039"/>
+      <map code="0x28" name="glyph00040"/>
+      <map code="0x29" name="glyph00041"/>
+      <map code="0x2a" name="glyph00042"/>
+      <map code="0x2b" name="glyph00043"/>
+      <map code="0x2c" name="glyph00044"/>
+      <map code="0x2d" name="glyph00045"/>
+      <map code="0x2e" name="glyph00046"/>
+      <map code="0x2f" name="glyph00047"/>
+      <map code="0x30" name="glyph00048"/>
+      <map code="0x31" name="glyph00049"/>
+      <map code="0x32" name="glyph00050"/>
+      <map code="0x33" name="glyph00051"/>
+      <map code="0x34" name="glyph00052"/>
+      <map code="0x35" name="glyph00053"/>
+      <map code="0x36" name="glyph00054"/>
+      <map code="0x37" name="glyph00055"/>
+      <map code="0x38" name="glyph00056"/>
+      <map code="0x39" name="glyph00057"/>
+      <map code="0x3a" name="glyph00058"/>
+      <map code="0x3b" name="glyph00059"/>
+      <map code="0x3c" name="glyph00060"/>
+      <map code="0x3d" name="glyph00061"/>
+      <map code="0x3e" name="glyph00062"/>
+      <map code="0x3f" name="glyph00063"/>
+      <map code="0x40" name="glyph00064"/>
+      <map code="0x41" name="glyph00065"/>
+      <map code="0x42" name="glyph00066"/>
+      <map code="0x43" name="glyph00067"/>
+      <map code="0x44" name="glyph00068"/>
+      <map code="0x45" name="glyph00069"/>
+      <map code="0x46" name="glyph00070"/>
+      <map code="0x47" name="glyph00071"/>
+      <map code="0x48" name="glyph00072"/>
+      <map code="0x49" name="glyph00073"/>
+      <map code="0x4a" name="glyph00074"/>
+      <map code="0x4b" name="glyph00075"/>
+      <map code="0x4c" name="glyph00076"/>
+      <map code="0x4d" name="glyph00077"/>
+      <map code="0x4e" name="glyph00078"/>
+      <map code="0x4f" name="glyph00079"/>
+      <map code="0x50" name="glyph00080"/>
+      <map code="0x51" name="glyph00081"/>
+      <map code="0x52" name="glyph00082"/>
+      <map code="0x53" name="glyph00083"/>
+      <map code="0x54" name="glyph00084"/>
+      <map code="0x55" name="glyph00085"/>
+      <map code="0x56" name="glyph00086"/>
+      <map code="0x57" name="glyph00087"/>
+      <map code="0x58" name="glyph00088"/>
+      <map code="0x59" name="glyph00089"/>
+      <map code="0x5a" name="glyph00090"/>
+      <map code="0x5b" name="glyph00091"/>
+      <map code="0x5c" name="glyph00092"/>
+      <map code="0x5d" name="glyph00093"/>
+      <map code="0x5e" name="glyph00094"/>
+      <map code="0x5f" name="glyph00095"/>
+      <map code="0x60" name="glyph00096"/>
+      <map code="0x61" name="glyph00097"/>
+      <map code="0x62" name="glyph00098"/>
+      <map code="0x63" name="glyph00099"/>
+      <map code="0x64" name="glyph00100"/>
+      <map code="0x65" name="glyph00101"/>
+      <map code="0x66" name="glyph00102"/>
+      <map code="0x67" name="glyph00103"/>
+      <map code="0x68" name="glyph00104"/>
+      <map code="0x69" name="glyph00105"/>
+      <map code="0x6a" name="glyph00106"/>
+      <map code="0x6b" name="glyph00107"/>
+      <map code="0x6c" name="glyph00108"/>
+      <map code="0x6d" name="glyph00109"/>
+      <map code="0x6e" name="glyph00110"/>
+      <map code="0x6f" name="glyph00111"/>
+      <map code="0x70" name="glyph00112"/>
+      <map code="0x71" name="glyph00113"/>
+      <map code="0x72" name="glyph00114"/>
+      <map code="0x73" name="glyph00115"/>
+      <map code="0x74" name="glyph00116"/>
+    </cmap_format_6>
+  </cmap>
+
+  <loca>
+    <!-- The 'loca' table will be calculated by the compiler -->
+  </loca>
+
+  <glyf>
+    <!-- The xMin, yMin, xMax and yMax values
+         will be recalculated by the compiler. -->
+    <TTGlyph name=".notdef" xMin="0" yMin="0" xMax="1000" yMax="1000">
+      <contour>
+      </contour>
+      <instructions><assembly>
+        </assembly></instructions>
+    </TTGlyph>
+    <TTGlyph name="glyph00001" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00002" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00003" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00004" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00005" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00006" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00007" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00008" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00009" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00010" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00011" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00012" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00013" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00014" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00015" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00016" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00017" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00018" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00019" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00020" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00021" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00022" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00023" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00024" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00025" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00026" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00027" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00028" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00029" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00030" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00031" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00032" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00033" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00034" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00035" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00036" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00037" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00038" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00039" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00040" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00041" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00042" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00043" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00044" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00045" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00046" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00047" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00048" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00049" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00050" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00051" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00052" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00053" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00054" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00055" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00056" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00057" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00058" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00059" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00060" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00061" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00062" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00063" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00064" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00065" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00066" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00067" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00068" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00069" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00070" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00071" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00072" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00073" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00074" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00075" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00076" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00077" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00078" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00079" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00080" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00081" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00082" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00083" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00084" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00085" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00086" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00087" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00088" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00089" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00090" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00091" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00092" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00093" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00094" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00095" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00096" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00097" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00098" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00099" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00100" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00101" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00102" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00103" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00104" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00105" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00106" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00107" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00108" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00109" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00110" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00111" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00112" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00113" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00114" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00115" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+    <TTGlyph name="glyph00116" xMin="0" yMin="0" xMax="1000" yMax="1000">
+    </TTGlyph>
+  </glyf>
+</ttFont>

+ 12 - 11
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/test/TestApplicationTests.java

@@ -3,6 +3,7 @@ package com.management.platform.test;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.management.platform.constant.Constant;
+import com.management.platform.constant.Parameter;
 import com.management.platform.entity.PicContentKeywords;
 import com.management.platform.mapper.PicContentKeywordsMapper;
 import com.management.platform.util.AuthService;
@@ -30,14 +31,14 @@ public class TestApplicationTests {
     @Test
     public void contextLoads() {
 //        //初始化redis关键词
-        redisUtil.deleteKey("keyWords");
-        List<PicContentKeywords> picContentKeywords = picContentKeywordsMapper.selectList(null);
-        for (PicContentKeywords  keyWord : picContentKeywords) {
-            redisUtil.sSetJsonString("keyWords",keyWord);
-        }
-
-        Set<Object> keyWords = redisUtil.members("keyWords");
-        System.out.println(keyWords.toString());
+//        redisUtil.deleteKey("keyWords");
+//        List<PicContentKeywords> picContentKeywords = picContentKeywordsMapper.selectList(null);
+//        for (PicContentKeywords  keyWord : picContentKeywords) {
+//            redisUtil.sSetJsonString("keyWords",keyWord);
+//        }
+//
+//        Set<Object> keyWords = redisUtil.members("keyWords");
+//        System.out.println(redisUtil.existsKey(Parameter.ACCESS_TOKEN.getName()));
 //        for (Object keyWord : keyWords) {
 //            JSONObject jsonMember = JSON.parseObject((String)keyWord);
 //            System.out.println(jsonMember.getString("content"));
@@ -46,8 +47,8 @@ public class TestApplicationTests {
 
 
 //        Map<String,Object> map = AuthService.getAuth(Constant.API_KEY, Constant.SECRET_KEY);
-//        String accessToken = (String)map.get("access_token");
-//        Long expiresTimeOut = (Long)map.get("expires_in");
+//        String accessToken = (String)map.get("accessToken");
+//        Long expiresTimeOut = (Long)map.get("expiresIn");
 //        System.out.println("accessToken:==="+accessToken);
 //        System.out.println("expiresTimeOut:==="+expiresTimeOut);
 //        redisUtil.setKeyWithExpireTime("accessToken",accessToken,expiresTimeOut);
@@ -57,7 +58,7 @@ public class TestApplicationTests {
 //        for (String keyWord : Constant.keyWords) {
 //            redisUtil.sSet("keyWords",keyWord);
 //        }
-//        System.out.println(redisUtil.members("keyWords").toString());
+        System.out.println(redisUtil.members("keyWords").toString());
     }
 
 }

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/ProcessUtil.java

@@ -46,7 +46,7 @@ public class ProcessUtil {
 //                        "svchost.exe                   1840 Services                   0      4,204 K\n" +
 //                        "svchost.exe                   1848 Services";
         List<String> exeprocessList = new ArrayList<>();
-        String[] list = processStr.toLowerCase().split("k\n");
+        String[] list = processStr.toLowerCase().split("k");
         //从第三行开始才是系统的.exe进程
         for (int i = 3; i < list.length; i++) {
             // 必须写死,截取长度,因为是固定的

+ 37 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/Tess4jDemo.java

@@ -0,0 +1,37 @@
+package com.management.platform.util;
+
+import java.io.File;
+
+import net.sourceforge.tess4j.ITesseract;
+import net.sourceforge.tess4j.Tesseract;
+import net.sourceforge.tess4j.TesseractException;
+
+/**
+ * tess4j测试类
+ */
+
+public class Tess4jDemo {
+    public static void main(String[] args) throws TesseractException {
+
+        //创建ITesseract接口的实现实例对象
+        ITesseract iTesseract = new Tesseract();
+        //设置tessdata训练库语言包地址,项目根目录下为默认地址可不设置
+        //获取项目路径
+//        String projectPath = System.getProperty("user.dir");
+//        System.out.println(projectPath);
+//        iTesseract.setDatapath(projectPath+"\\src\\main\\java\\com.management.platform.tessdata");
+        //默认识别英文
+//                如果需要识别英文之外的语种,需要指定识别语种,并且需要将对应的语言包放进项目中
+        iTesseract.setLanguage("chi_sim");
+        // 指定本地图片
+        File img = new File("D:\\360MoveData\\Users\\Administrator\\Desktop\\book1.png");
+        //开始识别时间
+        long startTime = System.currentTimeMillis();
+        //识别结果
+        String ocrResult = iTesseract.doOCR(img);
+        // 输出识别结果
+        System.out.println("耗时:" + (System.currentTimeMillis() - startTime) + "ms");
+        System.out.println("识别结果: \n" + ocrResult);
+
+    }
+}

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml

@@ -11,6 +11,7 @@ spring:
       # Single file max size  即单个文件大小
       max-file-size: 10000MB
       max-request-size: 10000MB
+      location: D:/upload/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://118.190.47.230:3306/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8

+ 6 - 1
fhKeeper/formulahousekeeper/pom.xml

@@ -39,6 +39,7 @@
         <lombok.version>1.18.8</lombok.version>
         <fastjson.version>1.2.7</fastjson.version>
         <baidu.api.sdk.version>4.2.0</baidu.api.sdk.version>
+        <tess4j-version>4.4.1</tess4j-version>
     </properties>
 
     <repositories>
@@ -181,7 +182,11 @@
                     </exclusion>
                 </exclusions>
             </dependency>
-
+            <dependency>
+                <groupId>net.sourceforge.tess4j</groupId>
+                <artifactId>tess4j</artifactId>
+                <version>${tess4j-version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
     <build>

+ 9 - 4
fhKeeper/formulahousekeeper/timesheet/package-lock.json

@@ -3604,7 +3604,8 @@
         "ansi-regex": {
           "version": "2.1.1",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "aproba": {
           "version": "1.2.0",
@@ -4019,7 +4020,8 @@
         "safe-buffer": {
           "version": "5.1.2",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "safer-buffer": {
           "version": "2.1.2",
@@ -4075,6 +4077,7 @@
           "version": "3.0.1",
           "bundled": true,
           "dev": true,
+          "optional": true,
           "requires": {
             "ansi-regex": "^2.0.0"
           }
@@ -4118,12 +4121,14 @@
         "wrappy": {
           "version": "1.0.2",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         },
         "yallist": {
           "version": "3.0.3",
           "bundled": true,
-          "dev": true
+          "dev": true,
+          "optional": true
         }
       }
     },