shikeyin
2024-01-11 65da8373531677b1c37a98f53eaa30c892f35e5a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package com.iplatform.openocr;
 
import com.walker.infrastructure.utils.Base64;
import com.walker.infrastructure.utils.FileUtils;
import com.walker.openocr.OcrType;
import com.walker.openocr.TextBlock;
import com.walker.openocr.idcard.IdCardConfig;
import com.walker.openocr.idcard.IdCardObject;
import com.walker.openocr.idcard.IdCardTextResolver;
import com.walker.openocr.table.CellObject;
import com.walker.openocr.table.TableConfig;
import com.walker.openocr.table.TableObject;
import com.walker.openocr.table.TableTextResolver;
import com.walker.openocr.table.config.FileConfigLoader;
import com.walker.openocr.vehicle.VehicleLicenseResolver;
import com.walker.openocr.vehicle.VehicleLicenseTable;
import org.junit.Test;
 
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
 
public class TestOcrRun {
 
//    @Test
    public void TestRemoteAndParse(){
 
        // 创建OCR引擎对象(初始化,无需重复创建)
        TestOcrEngine ocrEngine = new TestOcrEngine();
//        ocrEngine.setRemoteUrl("http://127.0.0.1:8803/ai/ocr/table");
        ocrEngine.setRemoteUrl("http://116.198.39.83:8803/ai/ocr/table");
//        ocrEngine.setRemoteUrl("http://101.43.168.96:8803/ai/ocr/table");
        ocrEngine.startup();
 
        List<IdCardConfig> idCardConfigList = new ArrayList<>(2);
        idCardConfigList.add(new IdCardConfig());
 
        byte[] fileContent = null;
        String imgBase64 = null;
        List<TextBlock> data = null;
        Map<String, CellObject> tableData = null;
 
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        //~ 表格解析
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        // 1.请求识别服务
        /*fileContent = FileUtils.getFileBytes(new File("D:/dev_tools/ai/demo_table_01.jpg"));
        imgBase64 = new String(Base64.encodeBase64(fileContent));
        data = ocrEngine.recognize("1", imgBase64); // id为业务唯一标识,存储图片拼接路径使用
        System.out.println("返回识别结果:" + data == null ? "" : data.size());
 
        // 2.解析表格内容
        TableTextResolver tableTextResolver = (TableTextResolver)ocrEngine.getTextResolver(OcrType.TextTable);
        if(tableTextResolver == null){
            System.out.println("没有配置表格解析器:");
            return;
        }
 
        // 3.获取表格数据
        TableObject tableObject = tableTextResolver.resolve(data, ocrEngine.getTableConfigList());
        if(tableObject == null){
            System.out.println("没有解析到任何表格数据");
            return;
        }
 
        tableData = tableObject.getTableDataMap();
        if(tableData != null){
            for(CellObject co : tableData.values()){
                System.out.println(co);
            }
            System.out.println("----------->>>>>" + tableData.get("na_shui_ren"));
        }*/
//        tableObject.getRecognizeConfig().getTableTitle();
 
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        //~ 身份证解析
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        // 1.请求识别服务
        fileContent = FileUtils.getFileBytes(new File("D:/dev_tools/ai/sfz02.jpg"));
        imgBase64 = new String(Base64.encodeBase64(fileContent));
        data = ocrEngine.recognize("sfz", imgBase64);
 
        // 2.解析表格内容
        IdCardTextResolver idCardTextResolver = (IdCardTextResolver)ocrEngine.getTextResolver(OcrType.TextIdCard);
        if(idCardTextResolver == null){
            System.out.println("没有配置'身份证'解析器:");
            return;
        }
 
        // 3.获取身份证数据:目前仅支持正面
        IdCardObject idCardObject = idCardTextResolver.resolve(data, idCardConfigList);
        if(idCardObject == null){
            System.out.println("没有解析到任何 身份证 数据");
            return;
        }
        System.out.println("姓名:" + idCardObject.getName());
        System.out.println("性别:" + idCardObject.getSex());
        System.out.println("民族:" + idCardObject.getNation());
        System.out.println("出生:" + idCardObject.getBirthday());
        System.out.println("住址:" + idCardObject.getAddress());
        System.out.println("身份证号码:" + idCardObject.getCardNo());
 
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        //~ 行驶证解析,2022-09-30
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
//        FileConfigLoader vehicleConfig = new FileConfigLoader();
//        TableConfig tableConfig = vehicleConfig.load("D:/dev_tools/workspace_2022/iplatform/iplatform-ml-openocr/src/test/resources/vehicle_license_config.txt");
//
//        List<TableConfig> tableConfigs = new ArrayList<>(2);
//        tableConfigs.add(tableConfig);
//
//        // 初始化解析器(单例即可)
//        VehicleLicenseResolver vehicleLicenseResolver = new VehicleLicenseResolver();
//
//        fileContent = FileUtils.getFileBytes(new File("D:/dev_tools/ai/xsz_1.jpg"));
//        imgBase64 = new String(Base64.encodeBase64(fileContent));
//        data = ocrEngine.recognize("xsz001", imgBase64);
//
//        VehicleLicenseTable vehicleTableObject = (VehicleLicenseTable) vehicleLicenseResolver.resolve(data, tableConfigs);
//        tableData = vehicleTableObject.getTableDataMap();
//        if(tableData != null){
//            for(CellObject co : tableData.values()){
//                System.out.println(co);
//            }
//            System.out.println("-----------号牌号码: " + tableData.get("hao_pai_hao_ma"));
//        }
//        // 识别图片中的盖章内容
//        fileContent = FileUtils.getFileBytes(new File("D:/dev_tools/ai/红章-示例.png"));
//        imgBase64 = new String(Base64.encodeBase64(fileContent));
//        data = ocrEngine.recognize("10", imgBase64); // id为业务唯一标识,存储图片拼接路径使用
//        System.out.println("返回识别结果:" + data == null ? "" : data.size());
    }
}