这次 给大家带来的是百度的身份证图片识别,总体来是属于比较简单的,百度的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身份证识别相关推荐

  1. Android Study 玩转百度ocr身份证识别不是梦~

    LZ-Says:最近好哥儿们因公来廊坊,在家里可谓夜夜笙歌,喝酒喝的俩眼发懵,最近状态欠佳,导致学习计划一直在滞留,今天通过简短的小例子,重新拾起学习之路,滚蛋吧,懒瘤君~ 前言 Today,由于昨晚 ...

  2. 百度Ocr身份证识别

    controller代码 //可以写入配置文件String clientId = "去百度云注册账号获取";// 官网获取的 Secret Key 更新为你注册的String cl ...

  3. 关于调用百度云OCR身份证识别接口,用Java语言,识别结果缺少身份证号码的问题解决

    问题描述: 最近项目系统开发,使用到了相关证件的信息提取.识别,由于是学校科研使用,选择了百度云OCR文字识别的API.具体的相关识别身份等证件的代码将在另一篇文章中叙述,最近真的太忙了,草稿箱中还有 ...

  4. VUE element-ui之百度OCR证件识别,组件内证件照转码解码识别身份证照文字

    步骤: 接上一篇博文继续完善获取access_token 封装Base64照片转码方法: const identification = {// 将图片转为base64格式transformBase64 ...

  5. 基于SpringBoot调用百度ocr以及企查查接口实现对营业执照信息的提取并识别真伪

    基于SpringBoot调用百度ocr以及企查查接口实现对营业执照信息的提取并识别真伪 1.application.yml 2.Controller层接口 3.相关工具类 3.1 DateUtils ...

  6. 国航APP接入百度大脑OCR身份证识别技术,让机票购买更便捷!

    价值成果 中国国航APP通过接入百度大脑OCR身份证识别技术,实现了旅客线上自助修正错购机票信息的功能.购票信息错误的旅客只需在中国国航APP上传身份证照片,即可进行购票身份认证,并立即修正错误信息. ...

  7. springboot 集成 腾讯云ocr身份证识别

    //控制层 @GetMapping("/getCertification")@ApiOperation(value = "ocr身份证识别接口 positiveImg:正 ...

  8. 对接百度OCR发票识别功能

    对接百度OCR 怎么对接百度OCR平台? 对接开放平台首先需要阅读api文档:->百度OCR-API文档地址, 按照文档操作看起来是不是特别的简单了,如果你需要在你的项目中使用的话你需要申请一个 ...

  9. 百度AI身份证识别接口开发

    1.准备工作: 创建应用并勾选身份证识别接口,应用创建见百度AI应用的创建以及AK.SK的获取如下: API Key.Secret Key见应用列表 2.实现代码如下: public static M ...

  10. Uipath 百度OCR发票识别

    学习目标: 了解百度OCR 掌握Uipath 第三方API 请求HttpRequest 掌握Uipath 百度OCR 发票识别 如何将发票内容写入Excel 1.了解百度OCR 百度AI人工智能服务平 ...

最新文章

  1. pythonos是啥_Pythonos模块介绍
  2. NO29 用户提权sudo配置文件详解实践--志行为审计
  3. Android第二十五期 - 猜歌小游戏
  4. sealos kubernetes(k8s)高可用安装教程
  5. POJ 3660 Cow Contest(传递闭包floyed算法)
  6. oracle gets/exec 单位,ORACLE AWR使用基础
  7. 关于git push报403的问题
  8. element-UI:el-table 表格排序
  9. 计算机界面视频录制软件,视频录制工具怎么用?这样的电脑录屏方法超实用!...
  10. Java 源码剖析(13)--MyBatis 使用了哪些设计模式?
  11. Jenkins的下载、配置、安装和基本操作
  12. 推荐一款国内首个开源线上全链路压测平台
  13. 【Unity2d】如何避免物体被销毁时绑定的音效消失
  14. 独立产品灵感周刊 DecoHack #027 - 今天的天气适合穿短裤
  15. C语言中计算字符个数
  16. Project的关键路径、关键任务
  17. Jzoj3498 图形变换
  18. 凌空天行宣布完成数千万人民币天使轮融资,源码资本领投...
  19. 模拟退火算法求解旅行商问题
  20. 华为携100余家国内企业,与微软等外企展开新角逐,优势已现

热门文章

  1. matlab rsenc函数,Xilinx RS编码IP核仿真验证
  2. 运动matlab分析机械振动,《运用Matlab分析机械振动》-毕业论文.doc
  3. Windows10原神二次元美化主题工具包分享
  4. 『Windows Builder』Java Swing期末课设神器
  5. 访问类路径下资源的两种方式
  6. WPS Office 免费版和专业增强版区别是什么
  7. python如何运行js代码
  8. ubuntu下载安装nginx+nginx-rtmp-module
  9. 从无线安全到内网渗透(转)
  10. 发票查验系统帮你轻松解决发票管理各种问题