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再编码一次才可以。

百度云OCR身份证识别相关推荐

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

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

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

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

  3. Java实现百度云OCR接口识别图片文字信息(也包含身份证,银行卡识别,更新添加通用票据识别)

    参考: https://blog.csdn.net/weixin_40165004/article/details/82632229 1.需求背景 因项目需求,需要提取身份证.发票(9/16更新内容) ...

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

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

  5. python百度云ocr文字识别软件_基于百度云的OCR识别(Python)

    2019年7月3日早上,在百度AI开发者大会上,一个来自山西的青年,将一瓶矿泉水浇在了同样来自山西的李彦宏身上. 可以回顾一下 https://b23.tv/av57665929/p1 ,着实让人一惊 ...

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

    1.阿里云界面点击搜索ocr,选择文字识别,开通服务,默认已登录阿里云账号 2.选择个人证件识别,身份证识别(每个月赠送200次体验) 3.点击产品文档 4.下拉到最后,选择RecognizeIdca ...

  7. 阿里云 OCR身份证识别Api 使用(一)

    最近项目更新使用拍照识别身份证功能,为了省去用户手动输入身份证号码信息等. 从网上搜了一些方案,发现阿里云的非常便宜,果断采用. 但是没有android 的官方案例 ,只能自己搞了. 首选OCR 识别 ...

  8. 百度智能云OCR身份证识别-SDK

    支持 JAVA版本:1.7+ 使用maven依赖: 添加以下依赖即可.其中版本号可在maven官网查询 <dependency><groupId>com.baidu.aip&l ...

  9. 调用百度智能云OCR接口识别身份证和户口本

    一.百度智能云获取token类编写 package com.wy.gcserver.ocr.service;import org.slf4j.Logger; import org.slf4j.Logg ...

  10. Ocr 图文识别技术——基于百度云OCR技术学习与总结

                                                               Ocr 图文识别技术--基于百度云OCR技术学习与总结 1.百度智能云 控制台   ...

最新文章

  1. docker 命令详解(cp篇)
  2. Opengl-实例化(不知道为啥叫实例化,感觉应该叫一次批量渲染)
  3. generator探幽(1)--koa中间件机制浅析
  4. 多分类的梯度以及logsumexp
  5. 【语音编码】基于matlab ADPCM编解码【含Matlab源码 553期】
  6. 局域网vnc远程控制软件,盘点三款特别好用的局域网vnc远程控制软件
  7. 伪标签(Pseudo-Labelling)
  8. 语义分割网络-BiSenet
  9. 局域网访问提示无法访问检查拼写_win10访问局域网出现“请检查名称的拼写”如何解决...
  10. 变频器LED显示灯闪烁_东莞变频器常见故障维修华中伺服驱动器维修
  11. java 微博sdk_Java基于新浪微博SDK实现发微博的功能
  12. 若要赞美晴天请等到黄昏之后
  13. gun up里怎么修改服务器,龙之泪Dragonia作弊大全 Dragonia怎么作弊 作弊方法一览 sys_GunPowerup.txt-游侠网...
  14. 转三篇文章关于php中session机制
  15. HTTP1.0,HTTP1.1,HTTP2.0,SPDY,HTTPS你应该知道的一些事
  16. OEM (Oracle 企业管理器)登录提示您的用户名/或口令无效的解决办法
  17. 数据库RocksDB优化方案
  18. 关于淫秽×××网站泛滥的思考
  19. 山寨层出不穷_李开复也搞山寨版
  20. 夜幕降临,我还记得那首歌

热门文章

  1. CCS6.0安装教程
  2. php qrcode 生成二维码 中间加logo的二维码
  3. 互联网广告类型的分析--弹出式广告【3】
  4. 怎么删除内网计算机IP地址,如何能在局域网中隐藏电脑及IP地址
  5. Windows 内核会换为 Linux 吗?
  6. 微信小程序2048小游戏(上)
  7. 解决百度文库文字无法复制
  8. 【创建交互式 Dice Roller 应用】
  9. 蓝桥杯练习题(二):Python组之基础练习三十题
  10. Disease Ontology:人类疾病分类数据库