当前位置: 代码迷 >> 综合 >> Tesseract OCR+Tess4j实现图片中英文识别
  详细解决方案

Tesseract OCR+Tess4j实现图片中英文识别

热度:98   发布时间:2023-12-17 21:41:01.0

文章目录

  • Tesseract
    • 简介
    • 环境搭建
    • 下载语言库
  • tess4j
    • 依赖
    • demo


Tesseract

简介

Tesseract的OCR引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。然而,HP不久便决定放弃OCR业务,Tesseract也从此尘封。数年以后,HP意识到,与其将Tesseract束之高阁,不如贡献给开源软件业,让其重焕新生。在2005年,Tesseract由美国内华达州信息技术研究所获得,并委托Google对其进行改进、优化工作。

Tesseract目前已作为开源项目发布在Google Project,它与Leptonica图片处理库结合,可以读取各种格式的图像并将它们转化成超过60种语言的文本,我们还可以不断训练自己的库,使图像转换文本的能力不断增强。如果团队深度需要,还可以以它为模板,开发出符合自身需求的OCR引擎。

环境搭建

这里只介绍 Homebrew

brew install tesseract

其他系统请见官方安装文档

下载语言库

根据自己的需求可以到这里选择所需要的语言库,如我们选择的简体中文库是: chi_sim.traineddata,将下载好的文件拷贝到: /usr/local/Cellar/tesseract/4.0.0_1(tesseract版本号)/share/tessdata目录下。

tess4j

依赖

<!-- https://mvnrepository.com/artifact/net.sourceforge.tess4j/tess4j -->
<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.4.0</version>
</dependency>

demo

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;import java.io.File;public class Test {
    @org.junit.Testpublic void test()throws Exception{
    String file = "/Users/apple/Downloads/1.jpg";ITesseract iTesseract = new Tesseract();iTesseract.setDatapath("/usr/local/Cellar/tesseract/4.0.0_1/share/tessdata");iTesseract.setLanguage("eng+chi_sim");//中英文结合用 + 分隔long l = System.currentTimeMillis();System.out.println(iTesseract.doOCR(new File(file)));//识别结果System.out.println("用时:"+(System.currentTimeMillis()-l) + "ms");}}

运行结果
识别结果

关于识别的准确率,肯定是分辨率越高越准确;如果图片比较大,建议每一次只识别一块指定的区域(传入一个Rectangle对象指定识别的区域)

下面贴上ITesseract接口方法

	String doOCR(File var1) throws TesseractException;String doOCR(File var1, Rectangle var2) throws TesseractException;String doOCR(BufferedImage var1) throws TesseractException;String doOCR(BufferedImage var1, Rectangle var2) throws TesseractException;String doOCR(List<IIOImage> var1, Rectangle var2) throws TesseractException;String doOCR(List<IIOImage> var1, String var2, Rectangle var3) throws TesseractException;String doOCR(int var1, int var2, ByteBuffer var3, Rectangle var4, int var5) throws TesseractException;String doOCR(int var1, int var2, ByteBuffer var3, String var4, Rectangle var5, int var6) throws TesseractException;void setDatapath(String var1);void setLanguage(String var1);void setOcrEngineMode(int var1);void setPageSegMode(int var1);void setTessVariable(String var1, String var2);void setConfigs(List<String> var1);void createDocuments(String var1, String var2, List<ITesseract.RenderedFormat> var3) throws TesseractException;void createDocuments(String[] var1, String[] var2, List<ITesseract.RenderedFormat> var3) throws TesseractException;OCRResult createDocumentsWithResults(BufferedImage var1, String var2, String var3, List<ITesseract.RenderedFormat> var4, int var5) throws TesseractException;List<OCRResult> createDocumentsWithResults(BufferedImage[] var1, String[] var2, String[] var3, List<ITesseract.RenderedFormat> var4, int var5) throws TesseractException;OCRResult createDocumentsWithResults(String var1, String var2, List<ITesseract.RenderedFormat> var3, int var4) throws TesseractException;List<OCRResult> createDocumentsWithResults(String[] var1, String[] var2, List<ITesseract.RenderedFormat> var3, int var4) throws TesseractException;List<Rectangle> getSegmentedRegions(BufferedImage var1, int var2) throws TesseractException;List<Word> getWords(BufferedImage var1, int var2);