816°

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

@[TOC]


  • 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.Test
    public 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);

个人博客:https://www.cqwxhn.xin

关注公众号获取更多咨询

Java开发小驿站


全部评论: 0

    我有话说: