从0-1,使用腾讯OCR进行身份证识别

目录

1.申请腾讯OCR权限

2.代码思路

3.Postman测试​


1.申请腾讯OCR权限

获取 secretId 和 secretKey,见上文
从0到1,申请cos服务器并上传图片到cos文件服务器-CSDN博客https://blog.csdn.net/m0_55627541/article/details/133902798

2.代码思路

入参有两个值,第一个为图片的云服务器路径,第二个为版面(正面/反面)

controller

java 复制代码
 /**
     * 身份证识别
     * @param path
     * @return
     */
    @PostMapping("/IDCardOCR")
    public Result IDCardOCR(String path,Integer cardSide) {
        IDCardResponse idCardResponse = idCardOCRService.identifyIDCardByUrl(path, cardSide);
        return Result.success("校验成功",idCardResponse);
    }

serviceImpl

java 复制代码
package com.zsp.quartz.common;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
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.IDCardOCRRequest;
import com.tencentcloudapi.ocr.v20181119.models.IDCardOCRResponse;
import com.zsp.quartz.Exception.CustomException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 腾讯身份证识别接口
 */
@Service
@Slf4j
public class TencentIDCardOCRServiceImpl implements IDCardOCRService {

    private static String secretId = "xxx";
    private static String secretKey = "xxx";
    private static String regionName = "ap-shanghai";
    @Override
    public IDCardResponse identifyIDCardByUrl(String imgUrl, Integer cardSide) {
        IDCardOCRRequest req = new IDCardOCRRequest();
        req.setImageUrl(imgUrl);
        if(cardSide != null) {
            if (cardSide == 1) {
                req.setCardSide("FRONT");
            } else if (cardSide == 2) {
                req.setCardSide("BACK");
            }
        }
        return idCardAction(req);
    }

    private IDCardResponse idCardAction(IDCardOCRRequest req) {
        Credential cred = new Credential(secretId, secretKey);
        // 实例化一个http选项,可选的,没有特殊需求可以跳过
        HttpProfile httpProfile = new HttpProfile();
        httpProfile.setEndpoint("ocr.tencentcloudapi.com");
        // 实例化一个client选项,可选的,没有特殊需求可以跳过
        ClientProfile clientProfile = new ClientProfile();
        clientProfile.setHttpProfile(httpProfile);
        OcrClient client = new OcrClient(cred, regionName,clientProfile);
        IDCardOCRResponse res = null;
        try {
            res = client.IDCardOCR(req);
        } catch (TencentCloudSDKException e) {
            throw new CustomException("校验失败");
        }

        if(res != null) {
            IDCardResponse idCardResponse = new IDCardResponse();
            idCardResponse.setAddress(res.getAddress());
            idCardResponse.setAuthority(res.getAuthority());
            if(!StrUtil.isEmpty(res.getBirth())) {
                idCardResponse.setBirth(DateUtil.parseDate(res.getBirth()));
            }
            idCardResponse.setIdNum(res.getIdNum());
            idCardResponse.setName(res.getName());
            idCardResponse.setNation(res.getNation());
            if("男".equals(res.getSex())) {
                idCardResponse.setSex(1);
            } else if("女".equals(res.getSex())) {
                idCardResponse.setSex(2);
            } else {
                idCardResponse.setSex(0);
            }
            idCardResponse.setValidDate(res.getValidDate());
            return idCardResponse;
        }
        return null;
    }

}

VO层

java 复制代码
package com.zsp.quartz.common;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.util.Date;

@Data
public class IDCardResponse {

    /**
     * 姓名(人像面)
     */
    @JSONField(name = "Name")
    private String name;
    /**
     * 性别(人像面)
     */
    @JSONField(name = "Sex")
    private Integer sex;
    /**
     * 民族(人像面)
     */
    @JSONField(name = "Nation")
    private String nation;
    /**
     * 出生日期(人像面)
     */
    @JSONField(name = "Birth")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date birth;
    /**
     * 地址(人像面)
     */
    @JSONField(name = "Address")
    private String address;
    /**
     * 身份证号(人像面)
     */
    @JSONField(name = "IdNum")
    private String idNum;
    /**
     * 发证机关(国徽面)
     */
    @JSONField(name = "Authority")
    private String authority;
    /**
     * 证件有效期(国徽面)
     */
    @JSONField(name = "ValidDate")
    private String validDate;
}

3.Postman测试

相关推荐
人月神话-Lee1 天前
两个改动,让这个iOS OCR SDK识别成功率翻了一倍
ios·ocr·ai编程·身份证识别·银行卡识别
weixin_408099672 天前
身份证OCR识别如何做到99.9%准确率?揭秘石榴智能六大核心技术(矫正/完整度/翻拍检测/头像提取)
图像处理·人工智能·ocr·api接口·身份证识别·石榴智能
小小测试开发2 天前
EasyOCR用法全攻略:Python开源OCR工具快速上手,图文识别零门槛
python·开源·ocr
weixin_408099672 天前
身份证OCR API怎么选?对比4款主流产品后,我选择了石榴智能(含Python/Java调用示例)
人工智能·ocr·文字识别·api接口·身份证ocr·石榴智能·ocr api
weixin_408099673 天前
身份证OCR识别中的“隐形防线”:复印件/翻拍检测如何拦截99%的虚假注册?(附多语言代码)
人工智能·ocr·图像识别·api接口·实名认证·身份证ocr·石榴智能
易连EDI—EasyLink7 天前
易连EDI–EasyLink实现OCR智能数据采集
网络·人工智能·安全·汽车·ocr·edi
泉飒7 天前
某特定场景下的ocr增强方式
ocr
小陈phd7 天前
多模态大模型学习笔记(三十八)——传统OCR技术机制:从DBNet到CRNN:吃透传统OCR两阶段范式的底层逻辑
笔记·学习·ocr
石榴树下的七彩鱼7 天前
OCR API价格对比2026:身份证/发票/医疗票据识别哪家性价比最高?含Python对接+成本公式
开发语言·人工智能·python·ocr·图像识别·文字识别·api接口
sali-tec7 天前
C# 基于OpenCv的视觉工作流-章56-OCR
图像处理·人工智能·opencv·算法·计算机视觉·ocr