Java OCR [Tess4j]

OCR介绍

OCR技术是光学字符识别的缩写(Optical Character Recognition),是通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术。可应用于银行票据、大量文字资料、档案卷宗、文案的录入和处理领域。适合于银行、税务等行业大量票据表格的自动扫描识别及长期存储。相对一般文本,通常以最终识别率、识别速度、版面理解正确率及版面还原满意度4个方面作为OCR技术的评测依据;而相对于表格及票据, 通常以识别率或整张通过率及识别速度为测定OCR技术的实用标准。

Quick Start

tensoflow-ocr是谷歌开源的一个ocr文字识别功能,本次介绍的OCR如何与其他语言之一Java的结合调用,需要已经有tenslow-ocr的安装环境。

pom依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.cms</groupId>
<artifactId>ocr</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>ocr</name>
<url>http://maven.apache.org</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>

<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.3.2</version>
</dependency>

<!-- tesseract-ocr 文字识别调用 -->
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>3.3.1</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

需要的文件

  1. 需要分析的图片文件
  2. 创建tessdata文件夹,并放入模型文件chi_sim.traineddata (训练集的制作在这里不做讲解)

测试代码

实际使用过程中,可能还需要对图像进行相关处理,如二值化、灰度化,文字图像捕捉等相关操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* Tess-OCR 文字识别
*
*/
public class App
{
public static void main( String[] args ) throws IOException
{
System.out.println( "tess4j starting..." );
File imgFile = new File("images/testhuang.png");
BufferedImage image = ImageIO.read(imgFile);
//TODO 图像灰度化
//image = ImageHelper.convertImageToGrayscale(image);
//TODO 图像二值化
//image = ImageHelper.convertImageToBinary(image);
//ImageIO.write(image, "jpg", new File("gray.jpg"));
ITesseract instance = new Tesseract(); //JNA Interface Mapping
instance.setLanguage("chi_sim");
try {
String res = instance.doOCR(image);
System.out.println(res);
} catch (TesseractException e) {
System.out.println(e.getMessage());
}
}
}

结束

有其他不足的部分,日后再做补充。

Fiveplus wechat
扫一扫上方二维码,关注微信公众号:阿五编程
如果这篇文章对你有所帮助,请点击下方的打赏按钮。