Java菜鸟浅谈OCR
什么是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相关推荐
- [转]浅谈OCR之Tesseract
转载请注明出处:http://www.cnblogs.com/brooks-dotnet/archive/2010/10/05/1844203.html 浅谈OCR之Tesseract 光学字符识别( ...
- 浅谈OCR之Onenote 2010
原文:浅谈OCR之Onenote 2010 上一次我们讨论了Tesseract OCR引擎的用法,作为一款老牌的OCR引擎,目前已经开源,最新版本3.0中更是加入了中文OCR功能,再加上Google的 ...
- 解耦 多态性 java_Java的多态浅谈,Java多态浅谈网站安全分享!
Java的多态浅谈概述Java的四大基本特性:抽象,封装,继承和多态.其中,抽象,封装,继承可以说多态的基础,而多态是封装,继承的具体表现.如果非要用专业术语来描述什么是多态的话 多态是指程序中定义的 ...
- 【Java】浅谈关于代码的耦合性
[Java]浅谈关于代码的耦合性 前言 一.需求 二.简单的实现 1.资源代码(项目提供) 2.对需求的普通实现 三.利用业务与逻辑分离的方式实现 改进 四.对需求改进后的同步项目改进(优点) 总结 ...
- java学习方法-浅谈软件开发的神速进步
中国人大都喜欢用武侠小说来比较软件开发,但是在实战武功中,只有葵花宝典才是最厉害的,也只有掌握了葵花宝典,才能称为"不败". 1浅谈软件开发的神速进步 1.1什么才是软件开发的葵花 ...
- java easing_浅谈jQuery animate easing的具体使用方法(推荐)
从jQuery API 文档中可以知道,jQuery自定义动画的函数.animate( properties [, duration] [, easing] [, complete] )有四个参数: ...
- ajax长轮询 java web_浅谈Websocket、Ajax轮询和长轮询(long polling)
浅谈Websocket.Ajax轮询和长轮询(long p0ll) 最近看到了一些介绍Websocket的文章,觉得挺有用,所以在这里将自己的对其三者的理解记录一下. 1.什么是Websocket W ...
- 菜鸟浅谈自己学习Java过程的经历
[size=large][/size][size=medium] 国庆第二天,昨晚北京下了好大的雨...吵死了...半夜醒来.一个人的寝室,唯有寂寞伴随.习惯了...程序员的真实生活写照...哎,想起 ...
- 一个菜鸟浅谈对 软件、程序、软件模型的认识 ——!
作为一个菜鸟,让我谈关于软件,程序,软件模型的心得,无异于是很天方夜谭的事情,据说很多的专家于此都没有给出明确的定义,我就用这些年中对于电脑的认识,来随便说说. 1.谈到软件,太专业的术语即使说了,我 ...
最新文章
- 【PHPExcel】数学公式
- 【 Verilog HDL 】HDL的三种描述方式
- 【云栖说第三期】发现大家对能模仿马云声音的ET有兴趣,我们找了阿里四位专家来聊聊ET背后的人工智能...
- 三星手机Android9和10的区别,三星Galaxy S10+ VS 小米9 拍照深度对比评测:神仙打架...
- 预测分析:R语言实现2.6 特征选择
- 解决 ubuntu 14.04.1 下一个sublime text3 3065 中国输入的问题
- [渝粤教育] 广东-国家-开放大学21秋期末考试中国近现代史纲要(A)10881k1
- Redis(五):List集合数据类型详解
- Log4net创建日志及简单扩展
- Python爬取你好李焕英豆瓣短评并利用stylecloud制作更酷炫的词云图
- 动态红包封面来了,特效拉满超炫酷
- php 搜索关键字,PHP获取搜索关键字有关问题_PHP教程
- 有条件的mysql插入语句_mysql中有条件的插入语句
- 数组(一维数组,二维数组)
- Jquery常见的面试问题
- python空间分析库_空间分析:5-1.空间分析库PySAL的使用
- 说一说我的java学习路途(记一个前端学习java日常)
- 中国移动国际短信业务正式开通 每条收费1元
- 阿里云要“啃”个人云
- 树莓派制作minecraft服务器,用树莓派建立Minecraft服务器
热门文章
- 密室价目菜单设计 密室逃脱
- NNDL 实验五 前馈神经网络(1)二分类任务
- 使用Mybatis查询,返回时间数据没有时分秒 解决方法
- SVN之VisualSVN-Server简单使用-yellowcong
- win10 1803版本Chrome(谷歌浏览器),360浏览器极速内核打不开https网站的解决方法
- 行车记录仪软件测试报告工作表,车载终端设备行驶记录仪794-2019检测报告测试项目...
- 深入理解SVM,详解SMO算法
- 为什么我设置了Targeted Device Family为Iphone还是ipad模拟器
- Redis数据结构之——hash
- xshell 绿色字体黑色背景主题