JAVA后端如何调用百度的身份证识别API

大家好,我是 程序员码递夫 。

今天给大家分享的是 JAVA后台如何调用百度的身份证识别API。

1、前言

我们做APP开发时常遇到 身份证认证或资质认证的 需求, 通过上传身份证照片是个常用的操作, 后台对上传的身份证照信息进行识别,并提取关键的实名信息保存入库。借助百度的开放平台,可轻松实现 身份证信息的提取。

2、百度的开放平台

百度的AI开放平台(https://ai.baidu.com/),向我们提供了 卡证文字识别的功能调用,可以结构化识别身份证、银行卡、营业执照等常用卡片及证照,支持营业执照信息的准确性核验;还可使用iOCR、 EasyDL OCR 自定义平台,定制个性化识别模型。广泛适用于身份认证、金融开户、征信评估等业务场景。接口调用简单,对开发者友好,有免费的测试资源资源领取。个人认证 200 次,企业认证 500 次。

2.1、注册或登录百度开放平台

浏览器打开 https://ai.baidu.com/   网址, 选择注册或登录

2.2、领取免费测试资源

进入控制台,选择文字识别模块, 在“操作指引”里的 免费尝鲜 选择 去领取,

选择 卡证OCR 的 身份证识别 即可

2.3、创建应用获取密钥

在“操作指引”里的 创建应用 选择 去创建,

 输入应用的名称、文字识别选择 身份证识别, 输入简单的应用描述,点创建即可

然后在应用列表中,可以看到我们刚才创建的应用,其中APP ID、 API Key、Secret Key这三个是调用百度api的必要参数,后面代码会用到这些。

3、后端代码

这里将以 java 代码为例进行讲解。

3.1、使用maven依赖

    <!-- baidu OCR Java SDK --><dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.16.18</version></dependency>

3.2、简单例子代码

import java.util.*;
import org.json.JSONObject;
import com.baidu.aip.ocr.AipOcr;
public class Sample {//设置APPID/AK/SKpublic static final String APP_ID = "你的 App ID";public static final String API_KEY = "你的 Api Key";public static final String SECRET_KEY = "你的 Secret Key";public static void main(String[] args) {// 初始化一个AipOcrAipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);// 调用接口String path = "c:\test.jpg";  //身份证照片JSONObject res = client.basicGeneral(path, new HashMap<String, String>());System.out.println(res.toString(2));}
}

3.3、身份证识别 JSON返回示例

{"log_id": 2648325511,"direction": 0,"image_status": "normal","idcard_type": "normal","edit_tool": "Adobe Photoshop CS3 Windows","words_result": {"住址": {"location": {"left": 267,"top": 453,"width": 459,"height": 99},"words": "南京市江宁区弘景大道3889号"},"公民身份号码": {"location": {"left": 443,"top": 681,"width": 589,"height": 45},"words": "330881199904173914"},"出生": {"location": {"left": 270,"top": 355,"width": 357,"height": 45},"words": "19990417"},"姓名": {"location": {"left": 267,"top": 176,"width": 152,"height": 50},"words": "伍云龙"},"性别": {"location": {"left": 269,"top": 262,"width": 33,"height": 52},"words": "男"},"民族": {"location": {"left": 492,"top": 279,"width": 30,"height": 37},"words": "汉"}},"words_result_num": 6
}

大家也可以参考官方的代码(https://ai.baidu.com/ai-doc/OCR/Ikibizxql)进行更进一步的了解。

3.4、封装后的代码

根据自己项目的需要,自己封装了一个静态类,便于功能调用。

import com.baidu.aip.ocr.AipOcr;
import com.example.springboot.common.Constants;
import com.example.springboot.common.Result;
import com.example.springboot.entity.IdCard;
import org.json.JSONObject;import java.util.HashMap;/*** @Description    百度身份证OCR识别* @Author     wx_madaogongcheng* @Date*/
public class IdCardOCR  {/*** 卡面*/public interface CardSide {/** 正面*/String  FRONT_SIDE = "front";/** 背面*/String  BACK_SIDE = "back";}public static Boolean getEnable() {return ENABLE;}public static void setEnable(Boolean enable) {IdCardOCR.ENABLE = enable;}/** 功能是否启用 */private static Boolean ENABLE = false;/** 百度 app id    */private static String APP_ID = "";/** 百度 api key    */private static String API_KEY  = "";/** 百度 secret key    */private static String SECRET_KEY  = "";public static String getAppId() {return APP_ID;}public static void setAppId(String appId) {APP_ID = appId;}public static String getApiKey() {return API_KEY;}public static void setApiKey(String apiKey) {API_KEY = apiKey;}public static String getSecretKey() {return SECRET_KEY;}public static void setSecretKey(String secretKey) {SECRET_KEY = secretKey;}/*** 初始化* @param enable* @param appId* @param apiKey* @param secretKey* @return*/public static boolean init(Boolean enable, String appId, String apiKey, String secretKey) {setEnable(enable);setAppId(appId);setApiKey(apiKey);setSecretKey(secretKey);return true;}/*** 获取身份证信息* @param image     身份证图片完整路径* @param cardSide     卡面(正面,反面)* @return*/public static Result getIdCardInfo(String image, String cardSide ) {try{if (!ENABLE) {return Result.error(Constants.CODE_600, "获取身份证信息失败,OCR识别身份证功能未启用");}IdCard idcard = new IdCard();// 初始化一个AipOcrAipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);// 传入可选参数调用接口HashMap<String, String> options = new HashMap<String, String>();options.put("detect_direction", "true");options.put("detect_risk", "false");// 参数为本地图片路径JSONObject res = client.idcard(image, cardSide, options);if (null!=res && res.getInt("words_result_num")>0) {//识别到结果JSONObject words_result = res.getJSONObject("words_result");if (cardSide.equalsIgnoreCase(CardSide.FRONT_SIDE)) {idcard.setName(words_result.getJSONObject("姓名").getString("words"));idcard.setBirth(words_result.getJSONObject("出生").getString("words"));idcard.setIdcard(words_result.getJSONObject("公民身份号码").getString("words") );idcard.setGender(words_result.getJSONObject("性别").getString("words") );idcard.setNation(words_result.getJSONObject("民族").getString("words") );}else {idcard.setIssueOrg(words_result.getJSONObject("签发机关").getString("words"));idcard.setIssueDate(words_result.getJSONObject("签发日期").getString("words"));idcard.setExpiringDate(words_result.getJSONObject("失效日期").getString("words") );}return  Result.success(idcard);}else {return Result.error(Constants.CODE_600, "获取身份证信息失败,请检查图片是否正确");}}catch (Exception ex){ex.printStackTrace();return Result.error(Constants.CODE_500, "获取身份证信息发生异常.原因=" + ex.getMessage());}}
}

3.5、测试代码

@SpringBootTest
class BaiduOcrTest {@Value("${baidu.app-id}")private String appId = "";              //百度 app id@Value("${baidu.api-key}")private String apiKey  = "";            //百度 api key@Value("${baidu.secret-key}")private  String secretKey  = "";         //百度 secret key@Testpublic void testIdCard() {System.out.println("----- 测试百度ocr识别身份证 开始------");IdCardOCR.init(true,appId, apiKey, secretKey);String image = "E:\\idcard.jpg";Result  retIdCard =  IdCardOCR.getIdCardInfo(image, IdCardOCR.CardSide.FRONT_SIDE);if (retIdCard.getCode().equalsIgnoreCase(Constants.OK)) {System.out.println("身份证识别结果:");System.out.println(((IdCard)retIdCard.getData()).toString());}else {System.out.println(retIdCard.getMsg());}System.out.println("----- 测试百度ocr识别身份证 结束------");}
}

4、后记

百度文字识别接口调用简单,识别对象丰富,对开发者友好, 当你学会了身份证识别, 其他的车牌识别、营业执照识别等也可以手到擒来了。

还不清楚的,可以看官方文档,都会找到答案的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/476713.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言进阶依赖管理

1. Go语言进阶 1.1 Goroutine package mainimport ("fmt""time" )func hello(i int) {println("hello goroutine : " fmt.Sprint(i)) }func main() {for i : 0; i < 5; i {go func(j int) { hello(j) }(i) // 启动一个新的 goroutine&…

基于Java Springboot高考志愿填报辅助系统

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据库&#xff1a;…

autoware(2)运行自己的数据集

上一节完成了autoware.ai的安装和编译跑通了demo数据集&#xff0c;本将自己录制的数据包用于测试 1.修改点云地图 将加载点云地图的my_map.launch文件复制并命名为my_map_test.launch&#xff0c; &#xff08;1&#xff09;point cloud处替代原来的点云地图为自己的&#…

el-select 和el-tree二次封装

前言 本文章是本人在开发过程中&#xff0c;遇到使用树形数据&#xff0c;动态单选或多选的需求&#xff0c;element中没有这种组件&#xff0c;故自己封装一个&#xff0c;欢迎多多指教 开发环境&#xff1a;element-UI、vue2 组件效果 单选 多选 组件引用 <treeselec…

【LeetCode热题100】栈

这道题一共记录了关于栈的5道题目&#xff1a;删除字符串中所有相邻重复项、比较含退格的字符串、基本计算器II、字符串解码、验证栈序列。 class Solution { public:string removeDuplicates(string s) {string ret;for(auto c : s){if(ret.size() 0 || c ! ret.back()) ret …

《Python基础》之pip换国内镜像源

目录 推荐镜像源网址&#xff1a; 方法一&#xff1a;手动换源 方法二&#xff1a;命令提示符指令换源 临时换源 推荐镜像源网址&#xff1a; 阿里云&#xff1a;Simple Indexhttp://mirrors.aliyun.com/pypi/simple/ 华为云&#xff1a;Index of python-local https://m…

全面击破工程级复杂缓存难题

目录 一、走进业务中的缓存 &#xff08;一&#xff09;本地缓存 &#xff08;二&#xff09;分布式缓存 二、缓存更新模式分析 &#xff08;一&#xff09;Cache Aside Pattern&#xff08;旁路缓存模式&#xff09; 读操作流程 写操作流程 流程问题思考 问题1&#…

Kafka 分区分配及再平衡策略深度解析与消费者事务和数据积压的简单介绍

Kafka&#xff1a;分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析&#xff1a;从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析&#xff1a…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第二十集:制作专门渲染HUD的相机HUD Camera和画布HUD Canvas

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、制作HUD Camera以及让两个相机同时渲染屏幕二、制作HUD Canvas 1.制作法力条Soul Orb引入库2.制作生命条Health读入数据3.制作吉欧统计数Geo Counter4.制作…

30. 并发编程

一、什么是多任务 如果一个操作系统上同时运行了多个程序&#xff0c;那么称这个操作系统就是 多任务的操作系统&#xff0c;例如&#xff1a;Windows、Mac、Android、IOS、Harmony 等。如果是一个程序&#xff0c;它可以同时执行多个事情&#xff0c;那么就称为 多任务的程序。…

ElasticSearch学习篇17_《检索技术核心20讲》最邻近检索-局部敏感哈希、乘积量化PQ思路

目录 场景在搜索引擎和推荐引擎中&#xff0c;对相似文章去重是一个非常重要的环节&#xff0c;另外是拍照识花、摇一摇搜歌等场景都可以使用它快速检索。 基于敏感性哈希的检索更擅长处理字面上的相似而不是语义上的相似。 向量空间模型ANN检索加速思路 局部敏感哈希编码 随…

mongodb多表查询,五个表查询

需求是这样的&#xff0c;而数据是从mysql导入进来的&#xff0c;由于mysql不支持数组类型的数据&#xff0c;所以有很多关联表。药剂里找药物&#xff0c;需要药剂与药物的关联表&#xff0c;然后再找药物表。从药物表里再找药物与成分关联表&#xff0c;最后再找成分表。 这里…

《机器人控制器设计与编程》考试试卷**********大学2024~2025学年第(1)学期

消除误解&#xff0c;课程资料逐步公开。 复习资料&#xff1a; Arduino-ESP32机器人控制器设计练习题汇总_arduino编程语言 题-CSDN博客 试卷样卷&#xff1a; 开卷考试&#xff0c;时间&#xff1a; 2024年11月16日 001 002 003 004 005 ……………………装………………………

DataWorks快速入门

DataWorks基于MaxCompute、Hologres、EMR、AnalyticDB、CDP等大数据引擎&#xff0c;为数据仓库、数据湖、湖仓一体等解决方案提供统一的全链路大数据开发治理平台。本文以DataWorks的部分核心功能为例&#xff0c;指导您使用DataWorks接入数据并进行业务处理、周期调度以及数据…

0基础跟德姆(dom)一起学AI NLP自然语言处理01-自然语言处理入门

1 什么是自然语言处理 自然语言处理&#xff08;Natural Language Processing, 简称NLP&#xff09;是计算机科学与语言学中关注于计算机与人类语言间转换的领域. 2 自然语言处理的发展简史 3 自然语言处理的应用场景 语音助手机器翻译搜索引擎智能问答...

Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装

Python Matplotlib 安装指南&#xff1a;使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装 Matplotlib是Python最常用的数据可视化工具之一&#xff0c;结合Miniconda可以轻松管理安装和依赖项。在这篇文章中&#xff0c;我们将详细介绍如何使用Miniconda在Linux、mac…

Cmakelist.txt之win-c-udp-client

1.cmakelist.txt cmake_minimum_required(VERSION 3.16) ​ project(c_udp_client LANGUAGES C) ​ add_executable(c_udp_client main.c) ​ target_link_libraries(c_udp_client wsock32) ​ ​ include(GNUInstallDirs) install(TARGETS c_udp_clientLIBRARY DESTINATION $…

移动充储机器人“小奥”的多场景应用(上)

一、高速公路服务区应用 在高速公路服务区&#xff0c;新能源汽车的充电需求得到“小奥”机器人的及时响应。该机器人配备有储能电池和自动驾驶技术&#xff0c;能够迅速定位至指定充电点&#xff0c;为待充电的新能源汽车提供服务。得益于“小奥”的机动性&#xff0c;其服务…

Mono Repository方案与ReactPress的PNPM实践

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 Mono Repository方案与ReactPress的PNPM实践 在当今软件开发领域&#xff0c;Mono Repository&#xff08;简称Monorepo&#xff09;已成为一种流行的代码管理方式&#xff0c;特…

人工智能(AI)与机器学习(ML)基础知识

目录 1. 人工智能与机器学习的核心概念 什么是人工智能&#xff08;AI&#xff09;&#xff1f; 什么是机器学习&#xff08;ML&#xff09;&#xff1f; 什么是深度学习&#xff08;DL&#xff09;&#xff1f; 2. 机器学习的三大类型 &#xff08;1&#xff09;监督式学…