springboot 整合 百度OCR身份证识别

article/2025/9/11 23:51:30

这次 给大家带来的是百度的身份证图片识别,总体来是属于比较简单的,百度的API开发文档也写的比较清楚:https://ai.baidu.com/docs#/OCR-API-Idcard/41062b1a

使用百度身份证识别前要先申请百度的账号以及申请相对应用  https://cloud.baidu.com/ 

选择  产品-->人工智能-->文字识别-->卡证文字识别    进到里面选择身份证识别

再选择管理应用   点击身份证识别添加应用 

得到等会需要用到的API Key  和 Secret Key

准备工作已经完成了 现在直接上代码,因为比较简单,我就不一一解释,不懂的就留言好了

pom.xml

        <!--百度文字识别接口--><dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.3.2</version></dependency>
import org.springframework.boot.configurationprocessor.json.JSONObject;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;public class BaiDuOCR {public static String getAuth() {// 官网获取的 API KeyString clientId = "GZaw2gGRPWV4**********";// 官网获取的 Secret KeyString clientSecret = "sBOEHzGShfGC*************";return getAuth(clientId, clientSecret);}/*** 获取token* @param ak* @param sk* @return*/public static String getAuth(String ak, String sk) {// 获取token地址String authHost = "https://aip.baidubce.com/oauth/2.0/token?";String getAccessTokenUrl = authHost// 1. grant_type为固定参数+ "grant_type=client_credentials"// 2. 官网获取的 API Key+ "&client_id=" + ak// 3. 官网获取的 Secret Key+ "&client_secret=" + sk;try {URL realUrl = new URL(getAccessTokenUrl);// 打开和URL之间的连接HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();//百度推荐使用POST请求connection.setRequestMethod("POST");connection.connect();// 获取所有响应头字段Map<String, List<String>> map = connection.getHeaderFields();// 定义 BufferedReader输入流来读取URL的响应BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String result = "";String line;while ((line = in.readLine()) != null) {result += line;}//System.out.println("result:" + result);JSONObject jsonObject = new JSONObject(result);String access_token = jsonObject.getString("access_token");return access_token;} catch (Exception e) {System.err.printf("获取token失败!");e.printStackTrace(System.err);}return null;}/*** 调用OCR* @param httpUrl* @param httpArg* @return*/public static String request(String httpUrl, String httpArg) {BufferedReader reader = null;String result = null;StringBuffer sbf = new StringBuffer();try {//用java JDK自带的URL去请求URL url = new URL(httpUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();//设置该请求的消息头//设置HTTP方法:POSTconnection.setRequestMethod("POST");//设置其Header的Content-Type参数为application/x-www-form-urlencodedconnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");// 填入apikey到HTTP headerconnection.setRequestProperty("apikey", "uml8HFzu2hFd8iEG2LkQGMxm");//将第二步获取到的token填入到HTTP headerconnection.setRequestProperty("access_token", BaiDuOCR.getAuth());connection.setDoOutput(true);connection.getOutputStream().write(httpArg.getBytes("UTF-8"));connection.connect();InputStream is = connection.getInputStream();reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();result = sbf.toString();} catch (Exception e) {e.printStackTrace();}return result;}/***身份证参数转换* @param jsonResult* @return*/public static HashMap<String, String> getHashMapByJson(String jsonResult) {HashMap map = new HashMap<String, String>();try {JSONObject jsonObject = new JSONObject(jsonResult);JSONObject words_result = jsonObject.getJSONObject("words_result");Iterator<String> it = words_result.keys();while (it.hasNext()) {String key = it.next();JSONObject result = words_result.getJSONObject(key);String value = result.getString("words");switch (key) {case "姓名":map.put("姓名", value);break;case "民族":map.put("民族", value);break;case "住址":map.put("住址", value);break;case "公民身份号码":map.put("公民身份号码", value);break;case "出生":map.put("出生日期", value);break;case "性别":map.put("性别", value);break;case "失效日期":map.put("失效日期", value);break;case "签发日期":map.put("签发日期", value);break;case "签发机关":map.put("签发机关", value);break;}}} catch (Exception e) {e.printStackTrace();}return map;}}

base64 本地文件转换

import sun.misc.BASE64Encoder;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;public class BASE64 {/*** 将本地图片进行Base64位编码* <p>* imgUrl 图片的url路径,如e:\\123.png** @return*/public static String encodeImgageToBase64(File imageFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理// 其进行Base64编码处理byte[] data = null;// 读取图片字节数组try {InputStream in = new FileInputStream(imageFile);data = new byte[in.available()];in.read(data);in.close();} catch (Exception e) {e.printStackTrace();}// 对字节数组Base64编码BASE64Encoder encoder = new BASE64Encoder();// 返回Base64编码过的字节数组字符串return encoder.encode(data);}
}

接下来 先写一个本地图片识别测试

public static void main(String[] args) {//获取本地的绝对路径图片File file = new File("F:\\timg2.jpg");//进行BASE64位编码String imageBase = BASE64.encodeImgageToBase64(file);imageBase = imageBase.replaceAll("\r\n", "");imageBase = imageBase.replaceAll("\\+", "%2B");//百度云的文字识别接口,后面参数为获取到的tokenString httpUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard?access_token="+BaiDuOCR.getAuth();//id_card_side=front 识别正面    id_card_side=back  识别背面String httpArg = "detect_direction=true&id_card_side=front&image=" + imageBase;String jsonResult = BaiDuOCR.request(httpUrl, httpArg);//System.out.println("返回的结果--------->" + jsonResult);HashMap<String, String> map = BaiDuOCR.getHashMapByJson(jsonResult);for (String key : map.keySet()) {System.out.println(key +": "+ map.get(key));}}

然后再给一个是前端 传过来的时进行识别,其实和本地识别区别在于 base64的转换一样,其他都是一样的,所以顺便也给你们贴出来 

/*** 图片识别* @param picOcr* @throws Exception*/@PostMapping("/ocr")public void picOCR(@RequestParam("pic") MultipartFile picOcr) throws Exception {byte[] data = null;BASE64Encoder base64Encoder = new BASE64Encoder();String base64 = base64Encoder.encode(picOcr.getBytes());base64 = base64.replaceAll("\r\n", "");base64 = base64.replaceAll("\\+", "%2B");String httpUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard?access_token=" + BaiDuOCR.getAuth();//正面照String httpFront = "detect_direction=true&id_card_side=front&image=" + base64;//背面照String httpBack = "detect_direction=true&id_card_side=back&image=" + base64;String jsonResult = BaiDuOCR.request(httpUrl, httpFront);HashMap<String, String> map = BaiDuOCR.getHashMapByJson(jsonResult);for (String key : map.keySet()) {System.out.println(key + ": " + map.get(key));}}

正面识别结果:

背面识别结果: 

百度身份证图片识别完成~~~~~


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

相关文章

学习记录542@阿里云OCR身份证识别具体实现

入门参考网址&#xff1a;https://help.aliyun.com/document_detail/294533.html 两种调用方式&#xff1a;HTTP调用方式&#xff0c;SDK&#xff0c;推荐用SDK&#xff0c;更加简单&#xff0c;方法都是封装好的&#xff0c;本文采用此方式。 SDK方式参考链接&#xff1a; ht…

微信小程序中OCR身份证识别流程

申请权限 登录微信小程序开发平台 设置 -> 第三方设置 -> 插件管理 点击添加&#xff0c;搜索OCR添加即可&#xff0c;如下图所示 点击详情可以看到插件的开发文档 文档传送门 这里值得注意的是要从开放平台购买微信 OCR 识别 不购买直接调用识别接口会报错 101003…

百度云OCR身份证识别

1.通用OCR文字识别 这种OCR只能按照识别图片中的文字&#xff0c;且是按照行识别返回结果&#xff0c;精度较低。 首先引入依赖包&#xff1a; <dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version&g…

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模块来制作小游戏…