百度云OCR身份证识别

article/2025/9/11 23:54:56

1.通用OCR文字识别

这种OCR只能按照识别图片中的文字,且是按照行识别返回结果,精度较低。

首先引入依赖包:

<dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.6.0</version>
</dependency>

通过OCR工具类:

package util;import com.baidu.aip.ocr.AipOcr;
import org.json.JSONObject;
import java.util.HashMap;public class OcrApi {private static final String APP_ID = "你的 App ID";private static final String API_KEY = "Xb12m5t4jS2n7";private static final String SECRET_KEY = "9XVx9GPcSbSUTZ";private static AipOcr getAipClient() {return getAipClient(API_KEY, SECRET_KEY);}public static AipOcr getAipClient(String apiKey, String secretKey) {AipOcr client = new AipOcr(APP_ID, apiKey, secretKey);// 可选:设置网络连接参数client.setConnectionTimeoutInMillis(2000);client.setSocketTimeoutInMillis(60000);return client;}public static String result(AipOcr client) {// 传入可选参数调用接口HashMap<String, String> options = new HashMap<>();options.put("language_type", "CHN_ENG");options.put("detect_direction", "true");options.put("detect_language", "true");options.put("probability", "true");JSONObject res = client.basicGeneralUrl("https://lichunyu1234.oss-cn-shanghai.aliyuncs.com/1.png", options);return res.toString(2);}public static void main(String[] args) {System.out.println(result(getAipClient()));}
}

结果如下,识别有两行信息(words即是识别的信息):

 

2.高精度OCR识别身份证信息 

这种就比较高精度,且按照分类显示,返回数据更友好,高可用。

2.1 接口说明及请求参数是地址官方截图如下:

 

 2.2 OCR身份证识别工具类

package util;import com.alibaba.druid.util.Base64;
import com.alibaba.fastjson.JSONObject;
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;public class OcrUtil {// Access_Token获取private static final String ACCESS_TOKEN_HOST = "https://aip.baidubce.com/oauth/2.0/token?";// 身份证识别请求URLprivate static final String OCR_HOST = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard?";// apiKey,secretKeyprivate static final String API_KEY ="Xb12m5t4jS";private static final String SECRET_KEY = "9XVx9GPcSbSUT";// 获取百度云OCR的授权access_tokenpublic static String getAccessToken() {return getAccessToken(API_KEY, SECRET_KEY);}/*** 获取百度云OCR的授权access_token* @param apiKey* @param secretKey* @return*/public static String getAccessToken(String apiKey, String secretKey) {String accessTokenURL = ACCESS_TOKEN_HOST// 1. grant_type为固定参数+ "grant_type=client_credentials"// 2. 官网获取的 API Key+ "&client_id=" + apiKey// 3. 官网获取的 Secret Key+ "&client_secret=" + secretKey;try {URL url = new URL(accessTokenURL);// 打开和URL之间的连接HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.connect();// 获取响应头Map<String, List<String>> map = connection.getHeaderFields();// 遍历所有的响应头字段for (String key : map.keySet()) {System.out.println(key + "---->" + map.get(key));}// 定义 BufferedReader输入流来读取URL的响应BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream()));StringBuilder result = new StringBuilder();String inputLine;while ((inputLine = bufferedReader.readLine()) != null) {result.append(inputLine);}JSONObject jsonObject = JSONObject.parseObject(result.toString());return jsonObject.getString("access_token");} catch (Exception e) {e.printStackTrace();System.err.print("获取access_token失败");}return null;}/*** 获取身份证识别后的数据* @param imageUrl* @param idCardSide* @return*/public static String getStringIdentityCard(File imageUrl, String idCardSide) {// 身份证OCR的http URL+鉴权tokenString OCRUrl = OCR_HOST+"access_token="+getAccessToken();System.out.println(OCRUrl);System.out.println("***************************************************");System.out.println(getAccessToken());// 对图片进行base64处理String image = encodeImageToBase64(imageUrl);// 请求参数String requestParam = "detect_direction=true&id_card_side="+idCardSide+"&image="+image;try {// 请求OCR地址URL url = new URL(OCRUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();// 设置请求方法为POSTconnection.setRequestMethod("POST");// 设置请求头connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");connection.setRequestProperty("apiKey", API_KEY);connection.setDoOutput(true);connection.getOutputStream().write(requestParam.getBytes(StandardCharsets.UTF_8));connection.connect();// 定义 BufferedReader输入流来读取URL的响应BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));StringBuilder result = new StringBuilder();String inputLine;while ((inputLine = bufferedReader.readLine()) != null) {result.append(inputLine);}bufferedReader.close();return result.toString();} catch (Exception e) {e.printStackTrace();System.err.println("身份证OCR识别异常");return null;}}/*** 对图片url进行Base64编码处理* @param imageUrl* @return*/public static String encodeImageToBase64(File imageUrl) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理byte[] data = null;try {InputStream inputStream = new FileInputStream(imageUrl);data = new byte[inputStream.available()];inputStream.read(data);inputStream.close();// 对字节数组Base64编码return URLEncoder.encode(Base64.byteArrayToBase64(data), "UTF-8");} catch (Exception e) {e.printStackTrace();return null;}}/*** 提取OCR识别身份证有效信息* @param* @return*/public static Map<String, String> getIdCardInfo(MultipartFile image, int idCardSide) {String value = getStringIdentityCard(image, idCardSide);String side;if (idCardSide == 1) {side = "正面";}else {side = "背面";}Map<String, String> map = new HashMap<>();JSONObject jsonObject = JSONObject.parseObject(value);JSONObject words_result = jsonObject.getJSONObject("words_result");if (words_result == null || words_result.isEmpty()) {throw new MyException("请提供身份证"+side+"图片");}for (String key : words_result.keySet()) {JSONObject result = words_result.getJSONObject(key);String info = result.getString("words");switch (key) {case "姓名":map.put("name", info);break;case "性别":map.put("sex", info);break;case "民族":map.put("nation", info);break;case "出生":map.put("birthday", info);break;case "住址":map.put("address", info);break;case "公民身份号码":map.put("idNumber", info);break;case "签发机关":map.put("issuedOrganization", info);break;case "签发日期":map.put("issuedAt", info);break;case "失效日期":map.put("expiredAt", info);break;}}return map;}}

 

官方返回示例:

 

**********************************************

对于身份证识别有个大坑:

1.有的base64编码后有头部“Base64:”要去掉,阿里巴巴的base64可以正常使用。

2.OCR识别官方只说明图片要Base64编码,但是实际上还是要再UrlEncode再编码一次才可以。

 

 

 

 


http://chatgpt.dhexx.cn/article/LejPkggA.shtml

相关文章

uniapp-小程序 调用阿里云OCR身份证识别

首先要有阿里云账号&#xff0c;&#xff08;很方便可以只有用支付宝扫码登录&#xff09;&#xff0c;购买套餐之前需要实名认证。 1、阿里云账号实名认证&#xff1a; 鼠标悬浮在右上角账号头像&#xff0c;选择实名认证&#xff0c;选择左边栏的实名认证&#xff0c;根据提示…

uniapp 调用阿里云OCR身份证识别

uniapp 调用阿里云OCR身份证识别 有个项目需求用到阿里云印刷身份证识别&#xff0c;网上搜了很多没有参考&#xff0c;话不多说爬坑总结&#xff1b; 第一步先注册阿里云账号点击注册阿里云账号已有账号忽略&#xff1b; 阿里云身份证识别购买第一次购买可以0元调用500次测试…

H5使用OCR身份证识别

OCR文档地址&#xff1a; ocr识别&#xff1a;https://ai.baidu.com/ai-doc/OCR/ak3h7xxg3 获取Access Token&#xff1a;https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu **想要实现的功能如下&#xff1a;**上传或拍照识别身份证信息并在下方展示。 **步骤1&#xff1a;**…

OCR身份证识别免费试用,附带Java代码

首先&#xff0c;想要使用ocr识别&#xff0c;是要成为百度云的开发者。 第一步&#xff1a; 成为开发者之后&#xff0c;接下来去管理控制台找到文字识别。 然后在应用列表创建应用&#xff1a;身份证识别获取到对应API Key与Secret Key&#xff08;重要的一步&#xff09;。…

阿里云ocr身份证识别接口调用

1、阿里云界面点击搜索ocr&#xff0c;选择文字识别&#xff0c;开通服务&#xff0c;默认已登录阿里云账号 2、选择个人证件识别&#xff0c;身份证识别&#xff08;每个月赠送200次体验&#xff09; 3、点击产品文档 4、下拉到最后&#xff0c;选择RecognizeIdcard点击&am…

百度Ocr身份证识别

controller代码 //可以写入配置文件String clientId "去百度云注册账号获取";// 官网获取的 Secret Key 更新为你注册的String clientSecret "去百度云注册账号获取";/*** 身份证正面* return*/GetMapping("/IdCard/front/{uid}")ApiOperation…

华为云-身份证识别-OCR

使用华为云的AI身份证识别-OCR服务功能需要对应的服务器 华为云的OCR身份证识别需要开通服务区域与调用服务的区域保持一致&#xff0c;目前貌似只有四个服务区才有身份证识别服务&#xff0c;如果购买的服务器不是这四个区的貌似就不能使用这个身份证识别 华为云文字识别 OCR…

OCR身份证识别简单算法流程

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 做OCR身份证识别的调研&#xff0c;正好整理一下从基础的图像处理角度的算法流程。 OCR简介 光学字符识别 Optical Character Recognition&#xff08;OCR&#xff09;其…

身份证扫描件联网OCR识别

前言: 1、调用百度API&#xff0c;联网OCR识别&#xff1b; 2、申请Key试用&#xff0c;每天50000次免费调用&#xff0c;超过次数识别失败。商用或超出免费次数自行联系百度付费。百度付费流程&#xff1b; 3、图片编码后不能超过4M&#xff0c;分辨率4096&#xff0a;4096&a…

【python】小游戏-下载即可玩

首先我们需要先下载pycharm&#xff0c;随后我们winR 调出命令控制行 大家可以下载pycharm后&#xff0c;winr 输入cmd 调出命令控制行&#xff0c;随后输入 pip install freegames 安装游戏 pip install freegames 下载好后会跳出来这样的页面 (后带翻译),由于我提前安装完了…

简单的Python小游戏制作

今天呢&#xff0c;给大家展示一下Python有趣的小地方&#xff0c;展示给大家看看&#xff0c;我做的小游戏&#xff0c;是否有大家小时候的回忆呢。下面就废话不多说了&#xff0c;给大家展示一遍&#xff01;感兴趣的小伙伴不懂也没事&#xff0c;可以下载一个PyCharm&#x…

用python制作几款简单又好玩的小游戏,找回童年的记忆

今天给大家带来几个Python小游戏&#xff0c;找回童年的同时学习编程&#xff01; 一、接金币 普通难度&#xff1a;❤ 玩法介绍&#xff1a;吃金币&#xff0c;控制左右键&#xff0c;有手就行。 源码分享 import os import cfg import sys import pygame import random…

简易的Python小游戏

文章目录 一、第一次写Python小游戏二、对小游戏进行改进1.对玩家进行提示2.提供多次机会给玩家3.每次答案应该是随机的 三、总结 一、第一次写Python小游戏 刚开始学习Python这门计算机语言&#xff0c;所以在网上找了一个非常简易的小游戏来进行模仿编写&#xff0c;目的是从…

python小游戏代码200行左右,python编程小游戏代码

大家好&#xff0c;本文将围绕python小游戏代码200行左右展开说明&#xff0c;小游戏程序代码python是一个很多人都想弄明白的事情&#xff0c;想搞清楚python编程小游戏代码需要先了解以下几个事情。 1、python简单小游戏代码 怎么用Python制作简单小游戏 1、Python猜拳小游戏…

python入门小游戏代码20行,python入门小游戏代码

python入门可以做的小游戏 1、Python入门拼图小游戏简单介绍&#xff1a;将图像分为mn个矩形块&#xff0c;并将图像右下角的矩形块替换为空白块后&#xff0c;将这些矩形块随机摆放成原图像的形状。 2、Python入门推箱子小游戏简单介绍&#xff1a;这是来自日本的一个经典游…

Python自制小游戏【附源码 直接运行】

上班不知道怎么摸鱼&#xff1f;代码敲累了直接自制小游戏放松一下&#xff01;今天给大家分享七个小游戏&#xff0c;可以从周一玩到周日&#xff0c;不重样的那种。 赶紧点赞收藏起来吧&#xff01; 1.消消乐 源代码与学习资料领取 &#x1f449; https://jq.qq.com/?_wv1…

用Python制作简单的小游戏

朋友们大家好&#xff0c;相信大部分人都喜欢玩游戏&#xff0c;无论是在工作间隙还是下班回家的路上&#xff0c;可能都会拿起手机玩游戏打发时间&#xff0c;亦或是在游戏中寻找乐趣&#xff0c;放松自己。上 我跟大家分享的内容主要是用Python的Pygame Zero模块来制作小游戏…

用Python实现的这五个小游戏,你真的学会了嘛?

相关文件 源码分享&#xff0c;问题解答&#xff01;&#xff01; 关注小编&#xff0c;私信小编领取哟&#xff01; 当然别忘了一件三连哟~~ 对了大家可以关注小编的公众号哟~~ 有很多资源可以领取的哟&#xff01;&#xff01; Python日志 游戏名称 五子棋雷霆战机贪吃蛇…

Python实现四个经典小游戏合集

这篇文章主要介绍了利用Python编写一个经典小游戏的合集,包括:贪吃蛇,扫雷,俄罗斯方块,五子棋。感兴趣的小伙伴可以跟随小编一起学习一下 目录 一、效果展示 1、俄罗斯方块2、扫雷3、五子棋4、贪吃蛇二、代码展示 1、俄罗斯方块2、扫雷3、五子棋4、贪吃蛇 一、效果展示 …

10个python入门小游戏,零基础打通关,就能掌握编程基础

前言 不会python就不能用python开发入门级的小游戏&#xff1f; 当然不是&#xff0c;我收集了十个python入门小游戏的源码和教程&#xff0c;并且即使你没有python基础&#xff0c;只要跟着这十个小游戏的开发详细教程去做&#xff0c;以及有了全部的源码&#xff0c;那就能…