什么是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. 【PHPExcel】数学公式
  2. 【 Verilog HDL 】HDL的三种描述方式
  3. 【云栖说第三期】发现大家对能模仿马云声音的ET有兴趣,我们找了阿里四位专家来聊聊ET背后的人工智能...
  4. 三星手机Android9和10的区别,三星Galaxy S10+ VS 小米9 拍照深度对比评测:神仙打架...
  5. 预测分析:R语言实现2.6 特征选择
  6. 解决 ubuntu 14.04.1 下一个sublime text3 3065 中国输入的问题
  7. [渝粤教育] 广东-国家-开放大学21秋期末考试中国近现代史纲要(A)10881k1
  8. Redis(五):List集合数据类型详解
  9. Log4net创建日志及简单扩展
  10. Python爬取你好李焕英豆瓣短评并利用stylecloud制作更酷炫的词云图
  11. 动态红包封面来了,特效拉满超炫酷
  12. php 搜索关键字,PHP获取搜索关键字有关问题_PHP教程
  13. 有条件的mysql插入语句_mysql中有条件的插入语句
  14. 数组(一维数组,二维数组)
  15. Jquery常见的面试问题
  16. python空间分析库_空间分析:5-1.空间分析库PySAL的使用
  17. 说一说我的java学习路途(记一个前端学习java日常)
  18. 中国移动国际短信业务正式开通 每条收费1元
  19. 阿里云要“啃”个人云
  20. 树莓派制作minecraft服务器,用树莓派建立Minecraft服务器

热门文章

  1. 密室价目菜单设计 密室逃脱
  2. NNDL 实验五 前馈神经网络(1)二分类任务
  3. 使用Mybatis查询,返回时间数据没有时分秒 解决方法
  4. SVN之VisualSVN-Server简单使用-yellowcong
  5. win10 1803版本Chrome(谷歌浏览器),360浏览器极速内核打不开https网站的解决方法
  6. 行车记录仪软件测试报告工作表,车载终端设备行驶记录仪794-2019检测报告测试项目...
  7. 深入理解SVM,详解SMO算法
  8. 为什么我设置了Targeted Device Family为Iphone还是ipad模拟器
  9. Redis数据结构之——hash
  10. xshell 绿色字体黑色背景主题