springboot 整合 百度OCR身份证识别
这次 给大家带来的是百度的身份证图片识别,总体来是属于比较简单的,百度的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));}}
正面识别结果:
背面识别结果:
百度身份证图片识别完成~~~~~
springboot 整合 百度OCR身份证识别相关推荐
- Android Study 玩转百度ocr身份证识别不是梦~
LZ-Says:最近好哥儿们因公来廊坊,在家里可谓夜夜笙歌,喝酒喝的俩眼发懵,最近状态欠佳,导致学习计划一直在滞留,今天通过简短的小例子,重新拾起学习之路,滚蛋吧,懒瘤君~ 前言 Today,由于昨晚 ...
- 百度Ocr身份证识别
controller代码 //可以写入配置文件String clientId = "去百度云注册账号获取";// 官网获取的 Secret Key 更新为你注册的String cl ...
- 关于调用百度云OCR身份证识别接口,用Java语言,识别结果缺少身份证号码的问题解决
问题描述: 最近项目系统开发,使用到了相关证件的信息提取.识别,由于是学校科研使用,选择了百度云OCR文字识别的API.具体的相关识别身份等证件的代码将在另一篇文章中叙述,最近真的太忙了,草稿箱中还有 ...
- VUE element-ui之百度OCR证件识别,组件内证件照转码解码识别身份证照文字
步骤: 接上一篇博文继续完善获取access_token 封装Base64照片转码方法: const identification = {// 将图片转为base64格式transformBase64 ...
- 基于SpringBoot调用百度ocr以及企查查接口实现对营业执照信息的提取并识别真伪
基于SpringBoot调用百度ocr以及企查查接口实现对营业执照信息的提取并识别真伪 1.application.yml 2.Controller层接口 3.相关工具类 3.1 DateUtils ...
- 国航APP接入百度大脑OCR身份证识别技术,让机票购买更便捷!
价值成果 中国国航APP通过接入百度大脑OCR身份证识别技术,实现了旅客线上自助修正错购机票信息的功能.购票信息错误的旅客只需在中国国航APP上传身份证照片,即可进行购票身份认证,并立即修正错误信息. ...
- springboot 集成 腾讯云ocr身份证识别
//控制层 @GetMapping("/getCertification")@ApiOperation(value = "ocr身份证识别接口 positiveImg:正 ...
- 对接百度OCR发票识别功能
对接百度OCR 怎么对接百度OCR平台? 对接开放平台首先需要阅读api文档:->百度OCR-API文档地址, 按照文档操作看起来是不是特别的简单了,如果你需要在你的项目中使用的话你需要申请一个 ...
- 百度AI身份证识别接口开发
1.准备工作: 创建应用并勾选身份证识别接口,应用创建见百度AI应用的创建以及AK.SK的获取如下: API Key.Secret Key见应用列表 2.实现代码如下: public static M ...
- Uipath 百度OCR发票识别
学习目标: 了解百度OCR 掌握Uipath 第三方API 请求HttpRequest 掌握Uipath 百度OCR 发票识别 如何将发票内容写入Excel 1.了解百度OCR 百度AI人工智能服务平 ...
最新文章
- pythonos是啥_Pythonos模块介绍
- NO29 用户提权sudo配置文件详解实践--志行为审计
- Android第二十五期 - 猜歌小游戏
- sealos kubernetes(k8s)高可用安装教程
- POJ 3660 Cow Contest(传递闭包floyed算法)
- oracle gets/exec 单位,ORACLE AWR使用基础
- 关于git push报403的问题
- element-UI:el-table 表格排序
- 计算机界面视频录制软件,视频录制工具怎么用?这样的电脑录屏方法超实用!...
- Java 源码剖析(13)--MyBatis 使用了哪些设计模式?
- Jenkins的下载、配置、安装和基本操作
- 推荐一款国内首个开源线上全链路压测平台
- 【Unity2d】如何避免物体被销毁时绑定的音效消失
- 独立产品灵感周刊 DecoHack #027 - 今天的天气适合穿短裤
- C语言中计算字符个数
- Project的关键路径、关键任务
- Jzoj3498 图形变换
- 凌空天行宣布完成数千万人民币天使轮融资,源码资本领投...
- 模拟退火算法求解旅行商问题
- 华为携100余家国内企业,与微软等外企展开新角逐,优势已现