OCR图像识别技术的JAVA实现(一)
来源:互联网 发布:网络舆情监测制度 编辑:程序博客网 时间:2024/06/05 07:11
OCR图像识别技术的JAVA实现
最近有个需求需要用图像识别,学习记录一下。
目前网络上的开源的图像识别技术有很多,例如 OCRE(OCR Easy)、Clara OCR、OCRAD、TESSERACT-OCR 等等,今天本blog将记录下tesseract-ocr的JAVA实现,后面会记录研究下Android的使用:
- TESSERACT-OCR安装
- 程序实现
1、TESSERACT-OCR安装
首先下载EXE安装包进行安装,我安装的版本是“tesseract-ocr-setup-3.05.01.exe”,建议直接安装在默认路径。安装完毕后,目录下:
其中,文件夹“tessdata”用于放置语言库。
程序实现
上一步已经安装好了TESSERACT-OCR,下面直接贴代码。
核心代码 OCRHelper.java:
package com.liping.test;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;/** * 图文识别帮助类 * * @author Felix Li * @create 2017-12-19-9:12 */public class OCRHelper { private final String LANG_OPTION = "-l"; private final String EOL = System.getProperty("line.separator"); /** * Tesseract-OCR的安装路径 */ private String tessPath = "C://Program Files (x86)//Tesseract-OCR"; //private String tessPath = new File("tesseract").getAbsolutePath(); /** * @param imageFile 传入的图像文件 * @param imageFormat 传入的图像格式 * @return 识别后的字符串 */ public String recognizeText(File imageFile) throws Exception { /** * 设置输出文件的保存的文件目录 */ File outputFile = new File(imageFile.getParentFile(), "output"); StringBuffer strB = new StringBuffer(); List<String> cmd = new ArrayList<String>(); cmd.add(tessPath + "\\tesseract"); cmd.add(""); cmd.add(outputFile.getName()); cmd.add(LANG_OPTION); cmd.add("chi_sim"); //cmd.add("eng"); ProcessBuilder pb = new ProcessBuilder(); /** *Sets this process builder's working directory. */ pb.directory(imageFile.getParentFile()); cmd.set(1, imageFile.getName()); pb.command(cmd); pb.redirectErrorStream(true); long startTime = System.currentTimeMillis(); System.out.println("开始时间:" + startTime); Process process = pb.start(); // tesseract.exe 1.jpg 1 -l chi_sim //不习惯使用ProcessBuilder的,也可以使用Runtime,效果一致 // Runtime.getRuntime().exec("tesseract.exe 1.jpg 1 -l chi_sim"); /** * the exit value of the process. By convention, 0 indicates normal * termination. */// System.out.println(cmd.toString()); int w = process.waitFor(); if (w == 0)// 0代表正常退出 { BufferedReader in = new BufferedReader(new InputStreamReader( new FileInputStream(outputFile.getAbsolutePath() + ".txt"), "UTF-8")); String str; while ((str = in.readLine()) != null) { strB.append(str).append(EOL); } in.close(); long endTime = System.currentTimeMillis(); System.out.println("结束时间:" + endTime); System.out.println("耗时:" + (endTime - startTime) + "毫秒"); } else { String msg; switch (w) { case 1: msg = "Errors accessing files. There may be spaces in your image's filename."; break; case 29: msg = "Cannot recognize the image or its selected region."; break; case 31: msg = "Unsupported image format."; break; default: msg = "Errors occurred."; } throw new RuntimeException(msg); } new File(outputFile.getAbsolutePath() + ".txt").delete(); return strB.toString().replaceAll("\\s*", ""); }}
测试类Test.java:
package com.liping.test;import java.io.File;import java.io.IOException;/** * 测试主类 * * @author Felix Li * @create 2017-12-19-9:17 */public class Test { public static void main(String[] args) { try { //图片文件:此图片是需要被识别的图片 File file = new File("C://Program Files (x86)//Tesseract-OCR//shouye.png"); String recognizeText = new OCRHelper().recognizeText(file); System.out.print(recognizeText + "\t"); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }}
以上就是TESSERACT-OCR的JAVA使用。
注意事项
图片读出来有的字符可能会乱码,这是由于识别语言库的原因,可以训练语言库,来提升识别准确率与识别速度,这个以后再讲。
有问题的欢迎留言讨论!
阅读全文
1 0
- OCR图像识别技术的JAVA实现(一)
- Java OCR tesseract 图像智能字符识别技术(一)
- OCR图像识别技术的JAVA实现(二)之Tess4J的使用
- Java OCR tesseract 图像智能字符识别技术 Java代码实现(二)
- Java OCR 图像智能字符识别技术
- Java OCR tesseract 图片识别技术(一)
- java OCR 图像识别
- Java OCR 图像智能字符识别技术,可识别中文
- Java OCR 图像智能字符识别技术,可识别中文
- Java OCR 图像智能字符识别技术,可识别中文
- Java OCR 图像智能字符识别技术,可识别中文
- Java OCR 图像智能字符识别技术,可识别中文
- Java OCR 图像智能字符识别技术,可识别中文
- Java OCR 图像智能字符识别技术,可识别中文
- Java OCR 图像智能字符识别技术,可识别中文
- Java OCR 图像智能字符识别技术[可识别中文]
- Java OCR tesseract 图像智能字符识别技术 Java代码实现
- Java OCR tesseract 图像智能字符识别技术 Java代码实现
- android okhttp3使用base64字符串上传图片问题
- 多条目适配器--pizifusheng
- 二维数组的查找
- ORACLE的锁机制---blue---博客园
- Dassault.Systemes.Simulia.XFlow.2017.Win64 1DVD
- OCR图像识别技术的JAVA实现(一)
- SaaS软件管理哪家好?小来薪福成为企业的良方
- oracle-取当前日期时间的前一天前一小时前一分钟前一秒
- 从程序的角度看Python和Java
- springMVC入门(四)拦截器
- oracle数据库索引相关知识
- Deep Learning of Binary Hash Codes for Fast Image Retrieval_CVPR2015
- 数字三角形POJ1163 program7.1.4.cpp
- 《大话数据结构》——学习笔记(栈&串&树)