如何在java项目中利用ocr实现一个图片文字识别功能

  介绍

这期内容当中小编将会给大家带来有关如何在java项目中利用ocr实现一个图片文字识别功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现谷歌有一个离线的工具,以下为java使用的演示

在此之前,使用这个工具需要在本地安装ocr工具:

如何在java项目中利用ocr实现一个图片文字识别功能

下面一个是一定要安装的离线包,建议默认安装

上面一个是中文的语言包,如果网络可以FQ的童鞋可以在安装的时候就选择语言包在线安装,有多种语言可供选择,默认只有英文的

exe安装好之后,把上面一个文件拷到安装目录下tessdata文件夹下

如C: \程序文件(x86) \ Tesseract-OCR \ tessdata下

然后下面两个是可选包,如果图片不做临时文件处理的话,可以不需要带的

如何在java项目中利用ocr实现一个图片文字识别功能

首先是一个临时文件生成用的类以防源文件损坏,参考某位博友的例子@Gunner

包org.ink.image.textrz;
  
  进口java.awt.image.BufferedImage;
  进口java.io.File;
  进口java.io.IOException;
  进口java.util.Iterator;
  进口java.util.Locale;
  
  进口javax.imageio.IIOImage;
  进口javax.imageio.ImageIO;
  进口javax.imageio.ImageReader;
  进口javax.imageio.ImageWriteParam;
  进口javax.imageio.ImageWriter;
  进口javax.imageio.metadata.IIOMetadata;
  进口javax.imageio.stream.ImageInputStream;
  进口javax.imageio.stream.ImageOutputStream;
  
  进口com.sun.media.imageio.plugins.tiff.TIFFImageWriteParam;
  
  公开课ImageIOHelper {
  私人场所场所=Locale.CHINESE;/* *
  *用户设置语言环境建设
  * @param语言环境
  */公共ImageIOHelper(地区地区){
  this.locale=语言环境;
  }/* *
  * Locale.CHINESE默认构造使用默认区域设置
  */公共ImageIOHelper () {
  
  }/* *
  *创建图像的tempFile为了防止破坏性的原始文件
  * @param imageFile
  * @param imageFormat png, jps等
  * @return TempFile的形象
  * @throws IOException
  */公共文件createImage(文件imageFile字符串imageFormat)抛出IOException {
  Iterator读者=ImageIO.getImageReadersByFormatName (imageFormat);
  ImageReader读者=readers.next ();
  ImageInputStream iis=ImageIO.createImageInputStream (imageFile);
  reader.setInput (iis);
  IIOMetadata streamMetadata=https://www.yisu.com/zixun/reader.getStreamMetadata ();
  TIFFImageWriteParam tiffWriteParam=new TIFFImageWriteParam (Locale.CHINESE);
  tiffWriteParam.setCompressionMode (ImageWriteParam.MODE_DISABLED);
  迭代器<图像打印机>作家=ImageIO.getImageWritersByFormatName (tiff);
  图像打印机作家=writers.next ();
  BufferedImage bi=reader.read (0);
  IIOImage图像=new IIOImage (bi, null, reader.getImageMetadata (0));
  文件tempFile=tempImageFile (imageFile);
  ImageOutputStream ios=ImageIO.createImageOutputStream (tempFile);
  writer.setOutput (ios);
  作家。写(streamMetadata、图像、tiffWriteParam);
  ios.close ();
  iis.close ();
  writer.dispose ();
  reader.dispose ();
  返回tempFile;
  }/* *
  * tempfile添加后缀
  * @param imageFile
  * @return
  * @throws IOException
  */imageFile tempImageFile私人文件(文件)抛出IOException {
  字符串路径=imageFile.getPath ();
  StringBuffer strB=new StringBuffer(路径);
  strB.insert (path.lastIndexOf (“。”)、“_text_recognize_temp”);
  字符串s=strB.toString () .replaceFirst (”(& # 63; <=//) (//w +)气管无名动脉瘘管的”、“美元”);
  Runtime.getRuntime ()。exec(“鲜明”+“/薄? +”/" + " + H”);//设置文件隐藏
  返回新文件(strB.toString ());
  }
  
  }
  
  

下面是真正识别的内容:

包org.ink.image.textrz;
  
  进口java.io.BufferedReader;
  进口java.io.File;
  进口java.io.FileInputStream;
  进口java.io.IOException;
  进口java.io.InputStreamReader;
  进口java.util.ArrayList;
  进口并不知道;
  进口java.util.Locale;
  
  进口org.jdesktop.swingx.util.OS;/* *
  *文本识别跑龙套
  * @author ink.Flower
  *
  */公开课OCRUtil {
  私人最终字符串LANG_OPTION=?l";//英文字母小写l,并非数字1
  私人最终字符串EOL=System.getProperty (“line.separator");
  私人字符串tessPath=癈://程序文件(x86)//Tesseract-OCR";//ocr默认安装路径
  私人字符串transname=癱hi_sim"//默认中文语言包,识别中文/* *
  *构造方法的OCR, Tesseract-OCR安装路径
  * @param tessPath Tesseract-OCR安装路径
  像eng.traineddata * @param transFileName traningFile名称
  */tessPath公共OCRUtil(字符串,字符串transFileName) {
  this.tessPath=tessPath;
  this.transname=transFileName;
  }/* *
  *构造方法的OCR,默认路径是“C://程序文件(x86)//Tesseract-OCR"
  */公共OCRUtil () {}
  
  公共字符串getTessPath () {
  返回tessPath;
  }
  公共空间setTessPath(字符串tessPath) {
  这一点。tessPath=tessPath;
  }
  公共字符串getTransname () {
  返回transname;
  }
  公共空间setTransname(字符串transname) {
  这一点。transname=transname;
  }
  公共字符串getLANG_OPTION () {
  返回LANG_OPTION;
  }
  公共字符串getEOL () {
  返回终点;
  }/* *
  *识别文本图像
  * @param imageFile
  * @param imageFormat
  * @return文本识别形象
  * @throws例外
  */公共字符串recognizeText(文件imageFile字符串imageFormat){抛出异常
  文件tempImage=new ImageIOHelper () .createImage (imageFile imageFormat);
  返回ocrImages (tempImage imageFile);
  }/* *
  *识别文本图像
  * @param imageFile
  * @param imageFormat
  * @param语言环境
  * @return文本识别形象
  * @throws例外
  */null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

如何在java项目中利用ocr实现一个图片文字识别功能