文章目录
- 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);