基于腾讯云ocr识别接口,提取图片自定义文字功能

1.介绍

实现对图片识别后自定义识别字段(key),并获取对应的字段值(value)的整套功能。
基于腾讯表格识别(V3)返回的数据中提取对应的识别字段。例如提取图片中姓名、身份证、家庭住址等。

该套文字提取适用于以下类似表格:

2.背景

原接口使用腾讯结构化识别,该腾讯接口可以自定义识别字段,但服务费用较高。
客户要求降低每次识别费用,故改为腾讯表格识别(V3),该服务费用低但需要自行整理返回的数据,无法自定义识别字段。
建议先进入体验网址,使用腾讯结构化识别和表格识别(V3)能直观感受区别。
OCR识别体验:https://ocrdemo.cloud.tencent.com/
OCR识别介绍:https://cloud.tencent.com/document/product/866/17619

3.实操

3.1创建配置类及编写配置文件
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;


@Component
@ConfigurationProperties(prefix = "recognition")
public class RecognitionContant {
    /**
     * 腾讯云账户id
     */
    public static String secretId;
    /**
     *腾讯云账户秘钥
     */
    public static String secretKey;
    /**
     *匹配字段
     */
    public static String targetFields;
    /**
     *代理地址
     */
    public static String poxyHost;

    public void setSecretId(String secretId) {
        RecognitionContant.secretId = secretId;
    }
    public void setSecretKey(String secretKey) {
        RecognitionContant.secretKey = secretKey;
    }
    public void setTargetFields(String targetFields) {
        RecognitionContant.targetFields = targetFields;
    }
    public void setProxyHost(String poxyHost) {
        RecognitionContant.poxyHost = poxyHost;
    }

配置文件

recognition:  
  secretId:   #腾讯云secretId(登录自己的账号获取)
  secretKey:  #腾讯云秘钥
  targetFields: 姓名,身份证号码,个人公积金账号 #自定义识别字段逗号分隔
  poxyHost: ocr.tencentcloudapi.com #代理地址(若需要代理可替换)
3.2创建类RecognitionEntity
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class RecognitionEntity implements Serializable {
    private static final long serialVersionUID = -3582386809406018127L;
    /**
     * 腾讯云账户id
     */
    private String secretId;
    /**
     *腾讯云账户秘钥
     */
    private String secretKey;
    /**
     *匹配字段
     */
    private String targetFields;
    /**
     *代理地址
     */
    private String poxyHost;

}
3.3创建识别工具类Recognition
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.finstone.hfmis.common.entity.RecognitionEntity;
import com.finstone.hfmis.common.result.ResultOcrDto;
import com.tencentcloudapi.common.AbstractModel;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.ocr.v20181119.OcrClient;
import com.tencentcloudapi.ocr.v20181119.models.RecognizeTableAccurateOCRRequest;
import com.tencentcloudapi.ocr.v20181119.models.RecognizeTableAccurateOCRResponse;
import com.tencentcloudapi.ocr.v20181119.models.RecognizeTableOCRRequest;
import com.tencentcloudapi.ocr.v20181119.models.RecognizeTableOCRResponse;

import java.util.*;


public class Recognition {
       /**
        * 调用腾讯识别服务V3
        * @param
        * @param base64ImageString
        * @return
        */
       public  static String v3Recognition(RecognitionEntity recognition, String base64ImageString){

              try{
                     // 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
                     Credential cred = new Credential(recognition.getSecretId(), recognition.getSecretKey());
                     // 实例化一个http选项
                     HttpProfile httpProfile = new HttpProfile();
                     // 默认使用https协议,若涉及代理可以配置为http协议
                     //httpProfile.setProtocol("http://");
                     httpProfile.setEndpoint(recognition.getPoxyHost());

                     // 实例化一个client选项,可选的,没有特殊需求可以跳过
                     ClientProfile clientProfile = new ClientProfile();
                     clientProfile.setHttpProfile(httpProfile);
                     // 实例化要请求产品的client对象,clientProfile是可选的
                     OcrClient client = new OcrClient(cred, "ap-shanghai", clientProfile);
                     // 实例化一个请求对象,每个接口都会对应一个request对象
                     RecognizeTableAccurateOCRRequest req = new RecognizeTableAccurateOCRRequest();
                     req.setImageBase64(base64ImageString);

                     // 返回的resp是一个RecognizeTableAccurateOCRResponse的实例,与请求对象对应
                     RecognizeTableAccurateOCRResponse resp = client.RecognizeTableAccurateOCR(req);

                     String jsonString = AbstractModel.toJsonString(resp);
                     //log.info("json格式的字符串回包>>>>>>" + jsonString);
                     return jsonString;
              } catch (TencentCloudSDKException e) {
                     throw new RuntimeException(e.toString());
              }
       }



       /**
        * 根据腾讯原始数据进行目标字段匹配,有序存入集合
        * @param recognitionJson 腾讯OCR扫描后原始数据
        * @param targetFields 用于配置检索的目标字段
        * @return
        */
       public static  List<ResultOcrDto> searchTarget (String recognitionJson,String[] targetFields){
           ObjectMapper mapper = new ObjectMapper();
              try {
                     Map<String, Object> map = mapper.readValue(recognitionJson, Map.class);
                     List<String> textValues = new ArrayList<>();
                     textValues = traverseGetText(map, textValues);
                     //log.info("取出键为Text的值>>>>>>" + textValues);
                     List<ResultOcrDto> resultList = matchFields(textValues,targetFields);
                     //log.info("匹配到的值>>>>>>" + resultList);
                     return resultList;
              } catch (JsonProcessingException e) {
                     throw new RuntimeException(e);
              }

       }

       /**
        * 递归OCR扫描后返回的map集合,取出所有键为Text的值
        * @param map
        * @param textValues
        * @return
        */
       private static List<String>  traverseGetText(Map<String, Object> map, List<String> textValues) {
              for (Map.Entry<String, Object> entry : map.entrySet()) {
                     String key = entry.getKey();
                     Object value = entry.getValue();
                     if (key.equals("Text") && value instanceof String) {
                            String trimmedValue = ((String) value).trim(); // 删除前后空格
                            textValues.add(trimmedValue);
                     } else if (value instanceof Map) {
                            traverseGetText((Map<String, Object>) value, textValues); // 递归遍历嵌套
                     } else if (value instanceof List) {
                            for (Object item : (List<?>) value) {
                                   if (item instanceof Map) {
                                          traverseGetText((Map<String, Object>) item, textValues); // 递归遍历列表中的嵌套
                                   }
                            }
                     }
              }
              return textValues;
       }

       /**
        * 匹配集合中的值,取出预设的目标字段值
        * @param textValues
        * @param targetFields
        * @return
        */
       public static List<ResultOcrDto> matchFields(List<String> textValues,String[] targetFields) {
              List<ResultOcrDto> resultList = new ArrayList<>();
              int index = 0;
              while (index + 1 < textValues.size()) {
                     String current = textValues.get(index);
                     String next = textValues.get(index + 1);

                     boolean foundMatch = false;
                     for (String field : targetFields) {
                            if (field.equals(current)) {
                                   ResultOcrDto dto = new ResultOcrDto(current, next);
                                   resultList.add(dto);
                                   foundMatch = true;
                                   break;
                            }
                     }

                     if (foundMatch) {
                            index += 2; // 只有在找到匹配项时才移动到下一对元素
                     } else {
                            index++; // 否则,只增加1以检查与下一个值相同的名称
                     }
              }

              return resultList;
       }
}
3.4service层调用识别功能

/**
*入参使用识别图片转的base64
*图片/PDF的 Base64 值。 要求图片/PDF经Base64编码后不超过 7M,分辨率建议600*800以上,支持PNG、JPG、JPEG、BMP、PDF格式。图片支持的像素范围:需介于20-10000px之间。
*/
public ResultDto recognitionTx(String imageBase64) {
    //配置文件匹配字段
    String[] targetFields = RecognitionContant.targetFields.split(",");

    try {
        // 调用腾讯 OCR 识别服务
           RecognitionEntity recognition = new RecognitionEntity();
 recognition.setSecretId(RecognitionContant.secretId).setSecretKey(RecognitionContant.secretKey).setPoxyHost(RecognitionContant.poxyHost);
          String recognitionJson = Recognition.v3Recognition(recognition,imageBase64);   

        // 获得匹配字段
        List<ResultOcrDto> resultOcrDtos = Recognition.searchTarget(recognitionJson, targetFields);

        // 准备结果映射(用于模拟前端需要的数据层次,可以自行修改)
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("auto", resultOcrDtos);
        resultMap.put("scanner", UserUtils.getRealName());
        return ResultDto.success(resultMap);
    } catch (Exception e) {
        log.error("OCR 识别出错:{}", e.getMessage());
        return ResultDto.error("OCR识别出错: " + e.getMessage());
    }
}
3.5附示例-V3表格识别response

{"code":0,"message":"success","requestId":"ace50a09-ccdc-47b7-bc8d-bcb501b75cc2","data":{"Response":{"Angle":-359.28183,"Data":"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","PdfPageSize":0,"RequestId":"3b0f6cc6-bbb4-4cab-89e6-6c6149c61b2a","TableDetections":[{"Cells":[{"ColBr":10,"ColTl":0,"Confidence":100,"Polygon":[{"X":15,"Y":0},{"X":1418,"Y":0},{"X":1416,"Y":111},{"X":14,"Y":93}],"RowBr":1,"RowTl":0,"Text":"表","Type":"body"},{"ColBr":1,"ColTl":0,"Confidence":100,"Polygon":[{"X":14,"Y":93},{"X":88,"Y":94},{"X":87,"Y":452},{"X":14,"Y":452}],"RowBr":7,"RowTl":1,"Text":"电\n请\n<\n精\n况","Type":"body"},{"ColBr":2,"ColTl":1,"Confidence":100,"Polygon":[{"X":88,"Y":94},{"X":205,"Y":96},{"X":204,"Y":209},{"X":88,"Y":207}],"RowBr":3,"RowTl":1,"Text":"姓名","Type":"body"},{"ColBr":4,"ColTl":2,"Confidence":100,"Polygon":[{"X":205,"Y":96},{"X":443,"Y":99},{"X":445,"Y":211},{"X":204,"Y":209}],"RowBr":3,"RowTl":1,"Text":"张三","Type":"body"},{"ColBr":5,"ColTl":4,"Confidence":100,"Polygon":[{"X":443,"Y":99},{"X":560,"Y":100},{"X":564,"Y":212},{"X":445,"Y":211}],"RowBr":3,"RowTl":1,"Text":"性别","Type":"body"},{"ColBr":6,"ColTl":5,"Confidence":100,"Polygon":[{"X":560,"Y":100},{"X":707,"Y":102},{"X":703,"Y":214},{"X":564,"Y":212}],"RowBr":3,"RowTl":1,"Text":"男","Type":"body"},{"ColBr":7,"ColTl":6,"Confidence":100,"Polygon":[{"X":707,"Y":102},{"X":823,"Y":103},{"X":829,"Y":214},{"X":703,"Y":214}],"RowBr":3,"RowTl":1,"Text":"年龄","Type":"body"},{"ColBr":8,"ColTl":7,"Confidence":100,"Polygon":[{"X":823,"Y":103},{"X":993,"Y":105},{"X":997,"Y":216},{"X":829,"Y":214}],"RowBr":3,"RowTl":1,"Text":"22","Type":"body"},{"ColBr":9,"ColTl":8,"Confidence":100,"Polygon":[{"X":993,"Y":105},{"X":1137,"Y":107},{"X":1139,"Y":169},{"X":996,"Y":170}],"RowBr":2,"RowTl":1,"Text":"联系电话","Type":"body"},{"ColBr":10,"ColTl":9,"Confidence":0,"Polygon":[{"X":1137,"Y":107},{"X":1416,"Y":111},{"X":1416,"Y":168},{"X":1139,"Y":169}],"RowBr":2,"RowTl":1,"Text":"","Type":"body"},{"ColBr":9,"ColTl":8,"Confidence":100,"Polygon":[{"X":996,"Y":170},{"X":1139,"Y":169},{"X":1138,"Y":217},{"X":997,"Y":216}],"RowBr":3,"RowTl":2,"Text":"手机号码","Type":"body"},{"ColBr":10,"ColTl":9,"Confidence":0,"Polygon":[{"X":1139,"Y":169},{"X":1416,"Y":168},{"X":1416,"Y":221},{"X":1138,"Y":217}],"RowBr":3,"RowTl":2,"Text":"","Type":"body"},{"ColBr":3,"ColTl":1,"Confidence":100,"Polygon":[{"X":88,"Y":207},{"X":317,"Y":210},{"X":317,"Y":271},{"X":87,"Y":269}],"RowBr":4,"RowTl":3,"Text":"身份证号码","Type":"body"},{"ColBr":6,"ColTl":3,"Confidence":0,"Polygon":[{"X":317,"Y":210},{"X":703,"Y":214},{"X":700,"Y":275},{"X":317,"Y":271}],"RowBr":4,"RowTl":3,"Text":"","Type":"body"},{"ColBr":8,"ColTl":6,"Confidence":100,"Polygon":[{"X":703,"Y":214},{"X":997,"Y":216},{"X":998,"Y":277},{"X":700,"Y":275}],"RowBr":4,"RowTl":3,"Text":"联系地址","Type":"body"},{"ColBr":10,"ColTl":8,"Confidence":0,"Polygon":[{"X":997,"Y":216},{"X":1416,"Y":221},{"X":1415,"Y":281},{"X":998,"Y":277}],"RowBr":4,"RowTl":3,"Text":"","Type":"body"},{"ColBr":3,"ColTl":1,"Confidence":100,"Polygon":[{"X":87,"Y":269},{"X":317,"Y":271},{"X":317,"Y":333},{"X":87,"Y":331}],"RowBr":5,"RowTl":4,"Text":"工作单位","Type":"body"},{"ColBr":10,"ColTl":3,"Confidence":0,"Polygon":[{"X":317,"Y":271},{"X":1415,"Y":281},{"X":1414,"Y":342},{"X":317,"Y":333}],"RowBr":5,"RowTl":4,"Text":"","Type":"body"},{"ColBr":3,"ColTl":1,"Confidence":100,"Polygon":[{"X":87,"Y":331},{"X":317,"Y":333},{"X":318,"Y":394},{"X":87,"Y":393}],"RowBr":6,"RowTl":5,"Text":"个人","Type":"body"},{"ColBr":6,"ColTl":3,"Confidence":0,"Polygon":[{"X":317,"Y":333},{"X":707,"Y":336},{"X":704,"Y":396},{"X":318,"Y":394}],"RowBr":6,"RowTl":5,"Text":"","Type":"body"},{"ColBr":8,"ColTl":6,"Confidence":0,"Polygon":[{"X":707,"Y":336},{"X":994,"Y":338},{"X":992,"Y":397},{"X":704,"Y":396}],"RowBr":6,"RowTl":5,"Text":"","Type":"body"},{"ColBr":10,"ColTl":8,"Confidence":0,"Polygon":[{"X":994,"Y":338},{"X":1414,"Y":342},{"X":1415,"Y":401},{"X":992,"Y":397}],"RowBr":6,"RowTl":5,"Text":"","Type":"body"},{"ColBr":3,"ColTl":1,"Confidence":100,"Polygon":[{"X":87,"Y":393},{"X":318,"Y":394},{"X":317,"Y":454},{"X":87,"Y":452}],"RowBr":7,"RowTl":6,"Text":"单位类别","Type":"body"},{"ColBr":6,"ColTl":3,"Confidence":0,"Polygon":[{"X":318,"Y":394},{"X":704,"Y":396},{"X":700,"Y":457},{"X":317,"Y":454}],"RowBr":7,"RowTl":6,"Text":"","Type":"body"},{"ColBr":8,"ColTl":6,"Confidence":100,"Polygon":[{"X":704,"Y":396},{"X":992,"Y":397},{"X":989,"Y":459},{"X":700,"Y":457}],"RowBr":7,"RowTl":6,"Text":"职 称","Type":"body"},{"ColBr":10,"ColTl":8,"Confidence":100,"Polygon":[{"X":992,"Y":397},{"X":1415,"Y":401},{"X":1414,"Y":463},{"X":989,"Y":459}],"RowBr":7,"RowTl":6,"Text":"□初级 □中级\n□高级","Type":"body"},{"ColBr":1,"ColTl":0,"Confidence":100,"Polygon":[{"X":14,"Y":452},{"X":87,"Y":452},{"X":86,"Y":717},{"X":14,"Y":717}],"RowBr":11,"RowTl":7,"Text":"配\n照\n观\n(\n共\n回\n借\n款\n人\n)","Type":"body"},{"ColBr":2,"ColTl":1,"Confidence":100,"Polygon":[{"X":87,"Y":452},{"X":200,"Y":454},{"X":196,"Y":529},{"X":87,"Y":528}],"RowBr":8,"RowTl":7,"Text":"姓名","Type":"body"},{"ColBr":4,"ColTl":2,"Confidence":0,"Polygon":[{"X":200,"Y":454},{"X":434,"Y":454},{"X":438,"Y":531},{"X":196,"Y":529}],"RowBr":8,"RowTl":7,"Text":"","Type":"body"},{"ColBr":5,"ColTl":4,"Confidence":100,"Polygon":[{"X":434,"Y":454},{"X":553,"Y":456},{"X":557,"Y":531},{"X":438,"Y":531}],"RowBr":8,"RowTl":7,"Text":"性别","Type":"body"},{"ColBr":6,"ColTl":5,"Confidence":0,"Polygon":[{"X":553,"Y":456},{"X":700,"Y":457},{"X":696,"Y":532},{"X":557,"Y":531}],"RowBr":8,"RowTl":7,"Text":"","Type":"body"},{"ColBr":7,"ColTl":6,"Confidence":100,"Polygon":[{"X":700,"Y":457},{"X":822,"Y":457},{"X":813,"Y":533},{"X":696,"Y":532}],"RowBr":8,"RowTl":7,"Text":"年龄","Type":"body"},{"ColBr":8,"ColTl":7,"Confidence":0,"Polygon":[{"X":822,"Y":457},{"X":989,"Y":459},{"X":986,"Y":533},{"X":813,"Y":533}],"RowBr":8,"RowTl":7,"Text":"","Type":"body"},{"ColBr":9,"ColTl":8,"Confidence":100,"Polygon":[{"X":989,"Y":459},{"X":1133,"Y":460},{"X":1132,"Y":534},{"X":986,"Y":533}],"RowBr":8,"RowTl":7,"Text":"手机号码","Type":"body"},{"ColBr":10,"ColTl":9,"Confidence":0,"Polygon":[{"X":1133,"Y":460},{"X":1414,"Y":463},{"X":1413,"Y":537},{"X":1132,"Y":534}],"RowBr":8,"RowTl":7,"Text":"","Type":"body"},{"ColBr":3,"ColTl":1,"Confidence":100,"Polygon":[{"X":87,"Y":528},{"X":317,"Y":530},{"X":314,"Y":599},{"X":86,"Y":597}],"RowBr":9,"RowTl":8,"Text":"身份证号码","Type":"body"},{"ColBr":6,"ColTl":3,"Confidence":0,"Polygon":[{"X":317,"Y":530},{"X":696,"Y":532},{"X":692,"Y":601},{"X":314,"Y":599}],"RowBr":9,"RowTl":8,"Text":"","Type":"body"},{"ColBr":8,"ColTl":6,"Confidence":100,"Polygon":[{"X":696,"Y":532},{"X":986,"Y":533},{"X":983,"Y":602},{"X":692,"Y":601}],"RowBr":9,"RowTl":8,"Text":"是否现役军人","Type":"body"},{"ColBr":10,"ColTl":8,"Confidence":100,"Polygon":[{"X":986,"Y":533},{"X":1413,"Y":537},{"X":1413,"Y":605},{"X":983,"Y":602}],"RowBr":9,"RowTl":8,"Text":"□是\n□否","Type":"body"},{"ColBr":3,"ColTl":1,"Confidence":100,"Polygon":[{"X":86,"Y":597},{"X":314,"Y":599},{"X":312,"Y":660},{"X":86,"Y":658}],"RowBr":10,"RowTl":9,"Text":"工作单位","Type":"body"},{"ColBr":10,"ColTl":3,"Confidence":0,"Polygon":[{"X":314,"Y":599},{"X":1413,"Y":605},{"X":1412,"Y":670},{"X":312,"Y":660}],"RowBr":10,"RowTl":9,"Text":"","Type":"body"},{"ColBr":3,"ColTl":1,"Confidence":100,"Polygon":[{"X":86,"Y":658},{"X":312,"Y":660},{"X":310,"Y":720},{"X":86,"Y":717}],"RowBr":11,"RowTl":10,"Text":"个人","Type":"body"},{"ColBr":6,"ColTl":3,"Confidence":0,"Polygon":[{"X":312,"Y":660},{"X":688,"Y":664},{"X":693,"Y":724},{"X":310,"Y":720}],"RowBr":11,"RowTl":10,"Text":"","Type":"body"},{"ColBr":8,"ColTl":6,"Confidence":0,"Polygon":[{"X":688,"Y":664},{"X":980,"Y":665},{"X":984,"Y":726},{"X":693,"Y":724}],"RowBr":11,"RowTl":10,"Text":"","Type":"body"},{"ColBr":10,"ColTl":8,"Confidence":0,"Polygon":[{"X":980,"Y":665},{"X":1412,"Y":670},{"X":1413,"Y":732},{"X":984,"Y":726}],"RowBr":11,"RowTl":10,"Text":"","Type":"body"}],"TableCoordPoint":[{"X":14,"Y":0},{"X":1418,"Y":0},{"X":1418,"Y":732},{"X":14,"Y":732}],"Type":1}]}}}

  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值