什么是OCR?

粗暴点说就是图片文本识别!正规点的说法就是:(Optical Character Recognition,光学电子识别)

最近公司开展新项目,考虑到实名认证这方面,然后还要上传身份证正反面,这就会涉及到一个问题,就是填写的身份证号,跟图片的身份证号对不上,或者我的图片是瞎上传的那种,那应该怎么办?

那只能使用图片文本识别就是所谓的OCR!

有很多种方法可以实现,比如人民币玩家的可以接第三方:聚合、阿里、腾讯.......等等众多平台都有相关的方案,

平民玩家的,也有插件:tesseract 但是需要FQ下载,我这两天翻不了墙,我就不试了,百度大把大把的教程,但是平民玩家会麻烦一点,这是肯定的,我思考了一下,还是用第三方的吧,简单粗暴点

我选择的是聚合数据OCR,https://www.juhe.cn/docs/api/id/287

步骤如下:

1)注册聚合数据账号

2)实名认证(我是拿公司的资料去认证的)

3)申请OCR(首次会有10次赠送)

4)获取图片转base64

5)请求一下接口就行了,就那么简单

直接上代码吧:

/*** 获取网络图片* @param imageUrl 图片URL* @return* @throws Exception*/public static String getURLImage(String imageUrl) throws Exception {  //new一个URL对象  URL url = new URL(imageUrl);  //打开链接  HttpURLConnection conn = (HttpURLConnection)url.openConnection();  //设置请求方式为"GET"  conn.setRequestMethod("GET");  //超时响应时间为30秒  conn.setConnectTimeout(30 * 1000);  //通过输入流获取图片数据  InputStream inStream = conn.getInputStream();  //得到图片的二进制数据,以二进制封装得到数据,具有通用性  byte[] data = readInputStream(inStream);  // 转码BASE64Encoder encode = new BASE64Encoder();  String s = encode.encode(data);  return s;  }  /*** 已二进制去封装图片* @param inStream 数据流* @return* @throws Exception*/private static byte[] readInputStream(InputStream inStream) throws Exception{  ByteArrayOutputStream outStream = new ByteArrayOutputStream();  //创建一个Buffer字符串  byte[] buffer = new byte[1024];  //每次读取的字符串长度,如果为-1,代表全部读取完毕  int len = 0;  //使用一个输入流从buffer里把数据读取出来  while( (len=inStream.read(buffer)) != -1 ){  //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度  outStream.write(buffer, 0, len);  }  //关闭输入流
        inStream.close();  //把outStream里的数据写入内存  return outStream.toByteArray();  }

以上代码,是用于获取图片并且转成base64的

测试代码

public static void main(String[] args) throws Exception {// 获取图片base64String base64str = getURLImage("https://www.wobokeji.com/justgoFile/upload/image/1.jpg");
//        System.out.println(base64str);// 参数封装NutMap map = new NutMap();map.addv("key", "84f7e1be67db18c721fcfb0685720a11");map.addv("image", base64str);map.addv("side", "front");// 请求聚合接口String str = Http.post("http://apis.juhe.cn/idimage/verify", map, 20 * 1000);System.out.println(str);}

我用的框架是Nutz,这个框架都封装了一些Http请求的方法,我就直接拿来用了

看控制台打印,以下结果我都换了多张图片去测试,准确率满分,

注:昨晚就开始搞这个了,然后遇到了个异常,那时候没想出来是什么原因,就放了一下,回去之后,我在想,是不是转了base64之后就变成了200多万个字节的问题,是不是聚合那边不接受那么长的参数,如果不接收,那为什么需要转base64?后面仔细想了一下代码,猛地发现,是不是链接超时了?因为我的超时时间是 1000 毫秒,也就是 1 秒,那我想了一下,从我这里请求聚合 --》 聚合去识别这张图片并返回数据给我,这个过程需要多久?早上回来第一时间把连接时间改成20秒,然后整个世界都安静了,妈的,我就是个智障

还有一个点就是 转 base64 需要 sun.misc.base64decoder.jar 这个jar我找了一下,找不到maven的我就没照了,各位有人找到的话,给我留个言,哈哈哈哈

转载于:https://www.cnblogs.com/xjbBill/p/9059745.html

Java菜鸟浅谈OCR相关推荐

  1. [转]浅谈OCR之Tesseract

    转载请注明出处:http://www.cnblogs.com/brooks-dotnet/archive/2010/10/05/1844203.html 浅谈OCR之Tesseract 光学字符识别( ...

  2. 浅谈OCR之Onenote 2010

    原文:浅谈OCR之Onenote 2010 上一次我们讨论了Tesseract OCR引擎的用法,作为一款老牌的OCR引擎,目前已经开源,最新版本3.0中更是加入了中文OCR功能,再加上Google的 ...

  3. 解耦 多态性 java_Java的多态浅谈,Java多态浅谈网站安全分享!

    Java的多态浅谈概述Java的四大基本特性:抽象,封装,继承和多态.其中,抽象,封装,继承可以说多态的基础,而多态是封装,继承的具体表现.如果非要用专业术语来描述什么是多态的话 多态是指程序中定义的 ...

  4. 【Java】浅谈关于代码的耦合性

    [Java]浅谈关于代码的耦合性 前言 一.需求 二.简单的实现 1.资源代码(项目提供) 2.对需求的普通实现 三.利用业务与逻辑分离的方式实现 改进 四.对需求改进后的同步项目改进(优点) 总结 ...

  5. java学习方法-浅谈软件开发的神速进步

    中国人大都喜欢用武侠小说来比较软件开发,但是在实战武功中,只有葵花宝典才是最厉害的,也只有掌握了葵花宝典,才能称为"不败". 1浅谈软件开发的神速进步 1.1什么才是软件开发的葵花 ...

  6. java easing_浅谈jQuery animate easing的具体使用方法(推荐)

    从jQuery API 文档中可以知道,jQuery自定义动画的函数.animate( properties [, duration] [, easing] [, complete] )有四个参数: ...

  7. ajax长轮询 java web_浅谈Websocket、Ajax轮询和长轮询(long polling)

    浅谈Websocket.Ajax轮询和长轮询(long p0ll) 最近看到了一些介绍Websocket的文章,觉得挺有用,所以在这里将自己的对其三者的理解记录一下. 1.什么是Websocket W ...

  8. 菜鸟浅谈自己学习Java过程的经历

    [size=large][/size][size=medium] 国庆第二天,昨晚北京下了好大的雨...吵死了...半夜醒来.一个人的寝室,唯有寂寞伴随.习惯了...程序员的真实生活写照...哎,想起 ...

  9. 一个菜鸟浅谈对 软件、程序、软件模型的认识 ——!

    作为一个菜鸟,让我谈关于软件,程序,软件模型的心得,无异于是很天方夜谭的事情,据说很多的专家于此都没有给出明确的定义,我就用这些年中对于电脑的认识,来随便说说. 1.谈到软件,太专业的术语即使说了,我 ...

最新文章

  1. Java数组与List 相互转换方法详解
  2. 游戏场景中的建筑设计,专访暴雪娱乐首席美术师 PhilipKlevestav
  3. iOS蓝牙开发CoreBluetooth快速入门
  4. P1983 车站分级
  5. 介个杀手不太冷锁屏壁纸
  6. Android开发之Mac配置环境变量
  7. node.js gbk编码_如何使用Node.js将Chrome的霸王龙编码为电报游戏
  8. 所选元素非联通_非固化橡胶沥青防水涂料与耐根穿刺防水卷材(沥青基)施工要点...
  9. JAVA集合框架及其常用方法
  10. ubuntu 7.04 Feisty Fawn 安装手记之 一:系统安装
  11. Ajax基础知识《一》
  12. 2. CSS 高级语法
  13. 威联通212P 在admin用户密码正确情况下仍然无法登录WEB页面解决办法
  14. 点进来看看,这篇文章告诉你什么软件可以识别PDF中的文字!
  15. 借势氢能源发展热潮,重塑股份持续加速行业布局
  16. python机器学习实现oneR算法 以鸢尾data为例
  17. 2022.04.17-高宝琪毕设阶段性汇报
  18. css实现文字越界省略,且后面紧跟一个图标
  19. 【python】matplotlib.pyplot介绍
  20. ThinkPHP模版引擎之变量输出详解

热门文章

  1. 贫乏却最美好的三段论和神奇而不太严格的欧几里得算法-逻辑与算法之六
  2. 计算机病毒与信息安全论文,信息安全与计算机病毒本科毕业论文.doc
  3. 表格里已知身份证号,提取性别、出生日期、年龄、籍贯
  4. 修改注册表恢复IE设置(转)
  5. emui解锁即root,emui5应用锁
  6. C++实战手把手教您用ffmpeg和QT开发播放器--01音视频基础知识
  7. python列表两两相减_用Python做打字软件,让你的打字快如闪电!附超详解和源码链接
  8. maven(一)--mvn安装、配置、基本命令
  9. mtk dts文件的配置
  10. centos挂载盘到根下_Centos 扩容根分区大小,挂载磁盘到跟目录