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.谈到软件,太专业的术语即使说了,我 ...
最新文章
- Java数组与List 相互转换方法详解
- 游戏场景中的建筑设计,专访暴雪娱乐首席美术师 PhilipKlevestav
- iOS蓝牙开发CoreBluetooth快速入门
- P1983 车站分级
- 介个杀手不太冷锁屏壁纸
- Android开发之Mac配置环境变量
- node.js gbk编码_如何使用Node.js将Chrome的霸王龙编码为电报游戏
- 所选元素非联通_非固化橡胶沥青防水涂料与耐根穿刺防水卷材(沥青基)施工要点...
- JAVA集合框架及其常用方法
- ubuntu 7.04 Feisty Fawn 安装手记之 一:系统安装
- Ajax基础知识《一》
- 2. CSS 高级语法
- 威联通212P 在admin用户密码正确情况下仍然无法登录WEB页面解决办法
- 点进来看看,这篇文章告诉你什么软件可以识别PDF中的文字!
- 借势氢能源发展热潮,重塑股份持续加速行业布局
- python机器学习实现oneR算法 以鸢尾data为例
- 2022.04.17-高宝琪毕设阶段性汇报
- css实现文字越界省略,且后面紧跟一个图标
- 【python】matplotlib.pyplot介绍
- ThinkPHP模版引擎之变量输出详解
热门文章
- 贫乏却最美好的三段论和神奇而不太严格的欧几里得算法-逻辑与算法之六
- 计算机病毒与信息安全论文,信息安全与计算机病毒本科毕业论文.doc
- 表格里已知身份证号,提取性别、出生日期、年龄、籍贯
- 修改注册表恢复IE设置(转)
- emui解锁即root,emui5应用锁
- C++实战手把手教您用ffmpeg和QT开发播放器--01音视频基础知识
- python列表两两相减_用Python做打字软件,让你的打字快如闪电!附超详解和源码链接
- maven(一)--mvn安装、配置、基本命令
- mtk dts文件的配置
- centos挂载盘到根下_Centos 扩容根分区大小,挂载磁盘到跟目录