因为以前公司有这个需求所以我有去了解实现这个功能

ocr即:图片文字识别功能。就是读取图片上的文件信息,展示出来。一开始为成本考虑我想自己实现这个功能。于是查阅资料整理dome,基于roc语言库,真就让我写了一个文字识别功能出来。但是效果就一言难尽了。总的来说就是只有正面的,图像清晰的图片才能识别出去除了格式的文字信息出来。自己用一用还行,但是想要用到产品上进行商用还行洗洗睡吧。

自己的不行,就用别人的。一番查找对比以后最终有两家平台可以使用(基于效果和成本考虑),一家是百度一家是阿里。如果减低要求使用,百度基本算是免费的,阿里那就只有500次免费了(但是人家效果更好啊)。

百度和阿里都有多种ocr识别服务,带格式的去格式的,带位置的不带位置的。证件的多种多样。这里就展示最简单的那种。

百度的ocr使用需要先开通百度云上的ocr功能。整完就弄出一个如下图的应用就行了

注意我们这里使用的是百度最基础的通用文件识别每天送5W次。qps是10但是这个要开通付费才有不然是2。不过只有每天超过5W的才会收费。然后使用的时候去百度api下jar包,基本都封装好了,我们填参数就行,傻子都会操作(所以说除了效果差一点,这就是良心商家啊) 话不多说符代码:

       AipOcr client = new AipOcr("appID", "API Key", "Secret Key");// System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");// 可选:设置网络连接参数client.setConnectionTimeoutInMillis(2000);client.setSocketTimeoutInMillis(60000);// 传入可选参数调用接口HashMap<String, String> options = new HashMap<String, String>();options.put("language_type", "CHN_ENG");options.put("detect_direction", "true");options.put("detect_language", "true");// options.put("detect_language", "true");// options.put("probability", "true");/* // 参数为本地图片路径String image = "test.jpg";JSONObject res = client.basicGeneral(image, options);System.out.println(res.toString(2));// 参数为本地图片二进制数组byte[] file = readImageFile(image);res = client.basicGeneral(file, options);System.out.println(res.toString(2));*/// 通用文字识别, 图片参数为远程url图片System.out.println(new Date());org.json.JSONObject res = client.basicAccurateGeneral("C:\\Users\\linrui\\Desktop\\测试用图片\\5.png", options);System.out.println(res.toString());

一个main方法调用你就能看到结果

阿里的调用就略麻烦一些,首先你要在阿里云上购买次数,然后它会返给你一个应用的key 这个就是调用的许可证

接着参数什么的要自己封装 上代码

封装一个请求参数

/*** 用于请求阿里的ocr识别的实例*/
public class OcrAlDto implements Serializable {//图像数据:base64编码,要求base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,和url参数只能同时存在一个private Byte[] img;//图像url地址:图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式,和img参数只能同时存在一个private String url;//是否需要识别结果中每一行的置信度,默认不需要。 true:需要 false:不需要private Boolean prob;//是否需要单字识别功能,默认不需要。 true:需要 false:不需要private Boolean   charInfo;//是否需要自动旋转功能,默认不需要。 true:需要 false:不需要private Boolean  rotate;//是否需要表格识别功能,默认不需要。 true:需要 false:不需要private Boolean  table;//是否需要分页功能,默认不需要。 true:需要 false:不需要private Boolean  page;//是否需要分段功能,默认不需要。 true:需要 false:不需要private Boolean   paragraph;//是否需要成行功能,默认不需要。 true:需要 false:不需要private Boolean  row;//是否需要切边功能,默认不需要。 true:需要 false:不需要private Boolean  removeBoundary;//是否需要去印章功能,默认不需要。 true:需要 false:不需要private Boolean noStamp;//字块返回顺序,false表示从左往右,从上到下的顺序,true表示从上到下,从左往右的顺序,默认falseprivate Boolean sortPage;public Byte[] getImg() {return img;}public void setImg(Byte[] img) {this.img = img;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public Boolean getProb() {return prob;}public void setProb(Boolean prob) {this.prob = prob;}public Boolean getCharInfo() {return charInfo;}public void setCharInfo(Boolean charInfo) {this.charInfo = charInfo;}public Boolean getRotate() {return rotate;}public void setRotate(Boolean rotate) {this.rotate = rotate;}public Boolean getTable() {return table;}public void setTable(Boolean table) {this.table = table;}public Boolean getPage() {return page;}public void setPage(Boolean page) {this.page = page;}public Boolean getParagraph() {return paragraph;}public void setParagraph(Boolean paragraph) {this.paragraph = paragraph;}public Boolean getRow() {return row;}public void setRow(Boolean row) {this.row = row;}public Boolean getRemoveBoundary() {return removeBoundary;}public void setRemoveBoundary(Boolean removeBoundary) {this.removeBoundary = removeBoundary;}public Boolean getNoStamp() {return noStamp;}public void setNoStamp(Boolean noStamp) {this.noStamp = noStamp;}public Boolean getSortPage() {return sortPage;}public void setSortPage(Boolean sortPage) {this.sortPage = sortPage;}
}

然后封装返回参数

public class Ocr implements Serializable {private static final long serialVersionUID = 1L;private Long id;private String sid;private String prism_version;private Integer prism_wnum;private Integer angle;private Integer height;private Integer width;private Integer orgHeight;private Integer orgWidth;private String content;private String filePath;private String wordPath;private String ocrResult;private String percentile;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getOcrResult() {return ocrResult;}public void setOcrResult(String ocrResult) {this.ocrResult = ocrResult;}public String getPercentile() {return percentile;}public void setPercentile(String percentile) {this.percentile = percentile;}public String getWordPath() {return wordPath;}public void setWordPath(String wordPath) {this.wordPath = wordPath;}public String getFilePath() {return filePath;}public void setFilePath(String filePath) {this.filePath = filePath;}public String getSid() {return sid;}public void setSid(String sid) {this.sid = sid;}public String getPrism_version() {return prism_version;}public void setPrism_version(String prism_version) {this.prism_version = prism_version;}public Integer getPrism_wnum() {return prism_wnum;}public void setPrism_wnum(Integer prism_wnum) {this.prism_wnum = prism_wnum;}public Integer getAngle() {return angle;}public void setAngle(Integer angle) {this.angle = angle;}public Integer getHeight() {return height;}public void setHeight(Integer height) {this.height = height;}public Integer getWidth() {return width;}public void setWidth(Integer width) {this.width = width;}public Integer getOrgHeight() {return orgHeight;}public void setOrgHeight(Integer orgHeight) {this.orgHeight = orgHeight;}public Integer getOrgWidth() {return orgWidth;}public void setOrgWidth(Integer orgWidth) {this.orgWidth = orgWidth;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}}

封装请求 代码中的key就是上文中的key

/*** 向指定 URL 发送POST方法的请求** @param url   发送请求的 URL* @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。*/public static String ocrpost(String url, String param) {PrintWriter out = null;BufferedReader in = null;String result = "";try {URL realUrl = new URL(url);// 打开和URL之间的连接URLConnection conn = realUrl.openConnection();// String s = PropKit.get("ocr.al.key");conn.setRequestProperty("Authorization", "APPCODE " + key);conn.setRequestProperty("Content-Type", "application/json");// 设置通用的请求属性conn.setRequestProperty("accept", "*/*");conn.setRequestProperty("connection", "Keep-Alive");conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");// 发送POST请求必须设置如下两行conn.setDoOutput(true);conn.setDoInput(true);// 获取URLConnection对象对应的输出流out = new PrintWriter(conn.getOutputStream());// 发送请求参数out.print(param);// flush输出流的缓冲out.flush();out.close();InputStream ips = conn.getInputStream();ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buf = new byte[1024];int length = 0;while ((length = ips.read(buf)) != -1) {baos.write(buf, 0, length);baos.flush();}byte[] responsData = baos.toByteArray();baos.close();//处理写响应信息result = new String(responsData, "UTF-8");} catch (Exception e) {System.out.println("发送 POST 请求出现异常!" + e);}return result;}

main方法

@Testpublic void aliocr(){OcrAlDto ocrAlDto = new OcrAlDto();ocrAlDto.setRotate(true);ocrAlDto.setNoStamp(true);ocrAlDto.setRemoveBoundary(true);ocrAlDto.setProb(true);ocrAlDto.setUrl("http://baidu/uplo/20210410/B00247DAB527_20210410_142745_2.jpg");//可以直接使用网上的图片路径String data = JSONObject.toJSONString(ocrAlDto);String ocrResult = OcrHttp.ocrpost(ocrRequestUrl, data);Ocr ocr = JSONObject.parseObject(ocrResult, Ocr.class);if (ocr == null) {throw new RuntimeException("ocr识别失败。。请检查图片是否可以访问");}if (ocr.getContent() != null) {String content = ocr.getContent().replaceAll("\n", "");System.out.println(content);}}

我一直说的差距在哪里呢,差距就是矫正图片的角度,阿里的ocr识别不管你的图片文件歪到什么角度它到会帮你矫正到正面识别文字,而百度的只会帮你矫正90度和180度角,一旦角度倾斜明显,文字的顺序会整个乱掉

百度免费ocr和阿里付费的使用方法相关推荐

  1. 阿里 c++ 编码规范 百度网盘_阿里云网盘开启公测预约!不限速,2T永久免费!!硬刚百度网盘~...

    写在前面 前段时间,阿里云即将推出阿里云网盘一事基本人尽皆知,其上传下载不限速.免登录免客户端下载功能更是受到网友的一致好评. 不过阿里云网盘 Teambition 内测申请通道已经关闭,公测预约现已 ...

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

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

  3. 百度大脑OCR网约车行程单识别上线邀测啦

    今天给大家带来的是百度大脑OCR网约车行程单识别上线邀测的相关内容,近期百度OCR家族再添『新丁』--网约车行程单识别上线邀测,可对各大主要服务商的网约车行程单,进行结构化识别,下面我们来看具体详情! ...

  4. SaaSpace:5种最好的免费OCR软件工具

    OCR(光学字符识别)软件是一个快速发展的技术空间,基于图像中的单词到文本中的单词的转移:从扫描的图像到文本文件,从屏幕截图到电子表格,等等.这些现代工具可以读取印刷或数字"页面" ...

  5. 【Python】利用python和百度通用OCR文字识别模型处理pdf文件(有水印且加密)

    pdf文件是办公中非常常见的文件,而且为了保密,常常加水印并且加密,你无法直接复制内容出来. 直接复制出来的效果如图所示. 贯,署,纵 ...

  6. 三年百度,五年阿里,阿里p8架构师浅谈:我是如何顺利进入BAT

    说来惭愧,也不怕你们笑话.做开发8年多,到目前还是一名不折不扣的扫地僧.年前的辞职,到现在还在家静养中.其实也没什么,就是回家总结一下自己这些年来在外工作与面试等做一个简单的总结与反思.做一下自己后面 ...

  7. 百度大脑OCR技术加持白描App:让AI成为视障者的眼睛

    现实中,你可以轻松无障碍的阅读各类平面印刷文字以及身边的一切,或许你未曾想过,视障人群该怎么办呢? 统计数据显示,中国大约有1700万的视障群体,相当于每100个人中就有超过1位是视障人士.但我们在日 ...

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

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

  9. 学会这5个方法,全网任意免费复制,告别付费复制

    我们在网上搜索资料的时候,经常需要把有用的内容复制下来.但是,并不是所有的网站内容都可以复制.粘贴,有时候复制内容会弹出开通VIP,立即解锁文本内容.要么就是提示要付费,才能够复制内容.在这种情况下, ...

  10. ML之API:国内外各大人工智能平台(百度云/华为云/阿里云/Face++等)及其API的简介、使用方法之详细攻略

    ML之API:国内外各大人工智能平台(百度云/华为云/阿里云/Face++等)及其API的简介.使用方法之详细攻略 目录 一.百度云api 1.api之CV 二.旷视科技(face++)api 1.a ...

最新文章

  1. 阿里云提示WordPress“/wp-includes/http.php输入IP验证不当”的解决办法
  2. 十大开源ERP点评 献给深水区的中小企业和CIO们
  3. 最大子数组 ——算法导论
  4. 紫为云 2020春招开启!算法职位20K-50K!
  5. [转]VC 键盘虚拟码
  6. 软件著作权算法软件设计说明书_软件详细设计说明书例子.pdf
  7. 使用Android制作视频播放器
  8. html5添加上下居中,详解HTML5中垂直上下居中的解决方案
  9. excel中查找两列数据中的重复数据
  10. AHRS、IMU和INS对比
  11. 2021湖南高考成绩查询考生版,湖南省普通高校招生考试考生综合信息平台入口2021...
  12. 一步一步SEO 之 网站内容SEO
  13. 计算机桌面没有打字,电脑输入法不见了怎么办
  14. QRCode插件的使用(二维码识别与生成)
  15. 解决attempted to register plugin but it was already registered with this flutterengine
  16. 黑龙江省计算机一级考试科目,黑龙江省2021年3月全国计算机等级考试时间和科目调整...
  17. Kafka分区副本分配规则
  18. (免费分享)基于JavaWeb的高校试题库管理系统设计与实现 毕业论文+项目源码及数据库文件(已发)
  19. MATLAB--数字图像处理 图像几何变换
  20. linux u盘 慢_Linux系统下测U盘(USB口)速度的工具和方法

热门文章

  1. 谷歌800多款开源字体
  2. 谷歌浏览器Google Chrome离线安装包下载
  3. 偷取php网站源码,最新PHP新闻小偷采集站开源版本源码分享,集成六个广告位,不限制域名...
  4. 测试用例设计方法——正交表详解
  5. 阿里P8手把手教你!java私塾培训
  6. matlab通过带通滤波器代码,设计一个matlab带通滤波器代码
  7. 数学建模——模糊数学
  8. 计算机网络布线需要什么材料,计算机网络综合布线的设计方法与流程
  9. 浅谈股价预测模型:全能大明星——神经网络模型
  10. python积最大的分解_pyfactor