使用阿里OCR身份证识别

1、开通服务

免费试用

2、获取accesskay

AccessKeyId和AccessKeySecret 要同时复制保存下来 因为后面好像看不AccessKeySecret了

3.Api 参考

https://help.aliyun.com/zh/ocr/developer-reference/api-ocr-api-2021-07-07-recognizeidcard?spm=a2c4g.11186623.0.0.7a9f4b1e5C0zS3

4、SDK示例

5、引入Maven依赖

XML 复制代码
         <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>ocr_api20210707</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.79</version>
        </dependency>

6、controller

java 复制代码
package org.example.controller;

import cn.csliu.entity.IdCardRoot;
import com.aliyun.ocr_api20210707.Client;
import com.aliyun.ocr_api20210707.models.*;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.Common;
import com.aliyun.teautil.models.RuntimeOptions;
import lombok.SneakyThrows;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSON;
import java.io.InputStream;




@RestController
public class IDCartController {

    public static Client createClient() throws Exception {
        Config config = new Config()
                .setAccessKeyId("你的AccessKeyID")
                .setAccessKeySecret("你的AccessKeySercet");
        // Endpoint 请参考 https://api.aliyun.com/product/ocr-api
        //设置阿里云 OCR 服务的 API 终端地址。
        config.endpoint = "ocr-api.cn-hangzhou.aliyuncs.com";
        return new Client(config);
    }

    @SneakyThrows
    @PostMapping("/ocr")
     public Object getOcrInfo(@RequestParam("file") MultipartFile file) throws Exception {
        Client client = IDCartController.createClient();
        //将fille文件转化为stream流
        InputStream bodyStream = file.getInputStream();

        RecognizeIdcardRequest recognizeIdcardRequest = new RecognizeIdcardRequest();
        recognizeIdcardRequest.setBody(bodyStream);
        RecognizeIdcardResponse response = null;
        String data = "";
        IdCardRoot idCardRoot = null;
        RuntimeOptions runtime = new RuntimeOptions();
        try {
             // 复制代码运行请自行打印 API 的返回值
            response = client.recognizeIdcardWithOptions(recognizeIdcardRequest, runtime);

            RecognizeIdcardResponseBody body = response.getBody();
            data= body.getData();
            idCardRoot = JSON.parseObject(data, IdCardRoot.class);
        } catch (TeaException error) {
            // 如有需要,请打印 error
            Common.assertAsString(error.message);
         } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 如有需要,请打印 error
            Common.assertAsString(error.message);
         }

        return idCardRoot;

     }
}

7、entity 实现类

java 复制代码
package org.example.entity;

import lombok.Data;

@Data
public class IdCardBack {
    private IdCardDataBackData data;
}
java 复制代码
package org.example.entity;

import lombok.Data;

/**
 * @author mucd
 */
@Data
public class IdCardDataBackData {
    /**
     * 办理地址
     */
    private String issueAuthority;

    /**
     * 生效-到期
     */
    private String validPeriod;
}
java 复制代码
package org.example.entity;

import lombok.Data;

/**
 * @author mucd
 */
@Data
public class IdCardDataFaceData {
    private String name; //姓名
    private String sex; //性别
    private String birthDate; //出生日期
    private String ethnicity;//民族
    private String address; //地址
    private String idNumber;//身份证号码
}
java 复制代码
package org.example.entity;

import lombok.Data;

@Data
public class IdCardDataType {
    private IdCardFace face;
    private IdCardBack back;
}
java 复制代码
package org.example.entity;

import lombok.Data;

@Data
public class IdCardFace {
    private IdCardDataFaceData data;
}
java 复制代码
package org.example.entity;

import lombok.Data;

@Data
public class IdCardRoot {
    private IdCardDataType data;
}

8、调试结果

相关推荐
AlfredZhao3 天前
OCR、VLM、ASR 到底有什么区别?一文讲清
ocr·asr·vlm
合尘猫4 天前
图片表格变结构化数据:OCR 后的三个坑
python·ocr
hddata@11 天前
字符切得准,文本溯得清——高维数据OCR字符分割专利获授权,赋能多行业文本安全应用
安全·ocr
楚识科技11 天前
企业级 OCR 选型指南:从 API 调用到私有化部署的技术对比
ocr
开开心心就好11 天前
网页图片批量下载工具,输入链接就保存
服务器·算法·leetcode·支持向量机·pdf·ocr·1024程序员节
土星云SaturnCloud11 天前
基于 PP-OCR 的车牌识别:从数据整理到土星云 SE110S 系列边缘部署
人工智能·ai·ocr·边缘计算
SEO-狼术12 天前
Aspose.OCR for .NET v26 Crack
ocr
lingxiao1688812 天前
Halcon之OCR应用
人工智能·ocr
开开心心就好13 天前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
开开心心就好13 天前
竖式除法出题工具,整除余数混合模式
运维·服务器·前端·javascript·ocr·perl·1024程序员节