bugstac...

Java OCR文字识别(Tess4J)

2018-01-12  本文已影响5630人  南桥畂翊

OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。

   `Tess4J`是对`google tesseract ocr`的java库的一种实现

Tess4J

Tesseract OCR API的Java JNA(JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。)封装。

特点

该库提供光学字符识别(OCR)支持:

教程

http://tess4j.sourceforge.net/tutorial/

Development with Tess4J

Tesseract, Ghostscript 和 Leptonica 的 Windows 32和64位DLL分别内嵌在tess4j.jar和lept4j.jar中。它们将在运行时自动提取和加载。对于其他平台,请务必先安装或构建Tesseract。

MAC
brew install tesseract

默认安装目录:/usr/local/Cellar/tesseract

NetBeans

创建一个Java项目。在Projects视图中,点击Libraries节点,再选择Add JAR/Folder.... Find,然后添加所有必需的JAR文件,包括jai_imageio.jar, jna.jar, commons-io-2.4.jar, lept4j.jar 和 tess4j.jar。

当然你也可以添加如下依赖:

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

创建一个名为TesseractExample的Java类

image

将tessdata和示例图像放在项目的根目录下。如果您选择文件视图,它应该显示如下:

image

您可以将NetBeans配置为使用JDK 64位启动以运行该示例; 这可以通过调整NetBeans\etc\netbeans.conf文件中的netbeans_jdkhome值。

Command-line on Windows 7 64-bit

创建一个工作目录,其内容和结构如下。将所有依赖的JAR文件放在lib子目录中。

image

在相应的目录下创建一个Java源文件TesseractExample.java

image

在"开始搜索"框中输入cmd以打开一个32位命令提示符。导航到项目目录并执行以下命令:

C:\Projects\TessExample>javac -cp lib\* tess4j\example\TesseractExample.java

C:\Projects\TessExample>java -cp lib\*;. tess4j.example.TesseractExample
The (quick) [brown] {fox} jumps!
Over the $43,456.78 #90 dog
& duck/goose, as 12.5% of E-mail
from aspammer@website.com is spam.
...

-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用于搜索类文件。
linux 用 : 分隔的目录, JAR 档案和 ZIP 档案列表
windows 用 ; 分隔的目录, JAR 档案和 ZIP 档案列表

如果要使用自定义版本的DLL,则需要通过在启动VM之前设置jna.library.path系统属性或更改相应的库访问环境变量,使目标库可用于Java程序(请参阅 Getting Started with JNA)。

package tess4j.example;

import java.io.File;
import net.sourceforge.tess4j.*;

public class TesseractExample {
    public static void main(String[] args) {
        // System.setProperty("jna.library.path", "32".equals(System.getProperty("sun.arch.data.model")) ? "lib/win32-x86" : "lib/win32-x86-64");

        File imageFile = new File("eurotext.tif");
        ITesseract instance = new Tesseract();  // JNA Interface Mapping
        // ITesseract instance = new Tesseract1(); // JNA Direct Mapping
        // File tessDataFolder = LoadLibs.extractTessResources("tessdata"); // Maven build bundles English data
        // instance.setDatapath(tessDataFolder.getParent());

        try {
            String result = instance.doOCR(imageFile);
            System.out.println(result);
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
        }
    }
}

常见问题

运行报错:

Failed loading language 'chi_sim'
Tesseract couldn't load any languages!
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00000001260c9ea8, pid=2235, tid=0x0000000000002603
#
# JRE version: Java(TM) SE Runtime Environment (8.0_131-b11) (build 1.8.0_131-b11)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.131-b11 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# C  [libtesseract.dylib+0x12ea8]  tesseract::Tesseract::recog_all_words(PAGE_RES*, ETEXT_DESC*, TBOX const*, char const*, int)+0xaa
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /Users/liuchunlong/IdeaProjects/gotop/hs_err_pid2235.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
Disconnected from the target VM, address: '127.0.0.1:53687', transport: 'socket'

Process finished with exit code 134 (interrupted by signal 6: SIGABRT)

Mac存在该问题,尝试Windows。

参考

https://github.com/tesseract-ocr/tesseract

https://github.com/tesseract-ocr/tessdata

https://github.com/nguyenq/tess4j

上一篇下一篇

猜你喜欢

热点阅读