红联Linux门户
Linux帮助

OCR----Ubuntu下调用Tesseract引擎(Python篇)

发布时间:2016-03-31 11:17:07来源:谷震平作者:谷震平

前言

最近再搞OCR的,用于识别日文报刊,是公司的一个日本项目,做的我是苦不堪言。最近把自己的工作内容写出来,也会做一个系列和专栏,欢迎关注!

想搞好这个OCR,需要读论文。好在只需要读4篇,都是Tesseract的作者Ray Smith写的。Tesseract目前被Google维护并开源,以后的前景应该会非常好。

按发表时间排序:

2007,An Overview of the Tesseract OCR Engine(https://github.com/guzhenping/the-Papers-and-Data-of-Tesseract-OCR-/blob/master/An%20Overview%20of%20the%20Tesseract%20OCR%20Engine.pdf)
2009,Hybrid Page Layout Analysis via Tab-Stop Detection(https://github.com/guzhenping/the-Papers-and-Data-of-Tesseract-OCR-/blob/master/Hybrid%20Page%20Layout%20Analysis%20via%20Tab-Stop%20Detection.pdf)
2009,Adapting the Tesseract Open Source OCR Engine for Multilingual OCR(https://github.com/guzhenping/the-Papers-and-Data-of-Tesseract-OCR-/blob/master/Adapting%20the%20Tesseract%20Open%20Source%20OCR%20Engine%20for%20Multilingual%20OCR.pdf)
The Fourth Annual Test of OCR Accuracy[不是Ray所写](https://github.com/guzhenping/the-Papers-and-Data-of-Tesseract-OCR-/blob/master/The%20Fourth%20Annual%20Test%20of%20OCR%20Accuracy.pdf)

需要深入研究的请戳链接(https://github.com/guzhenping/the-Papers-and-Data-of-Tesseract-OCR-)。以上都是英文资料,中国人帮助中国人,所以我会把我翻译过的一部分公布出来,欢迎关注。if 没有公布,欢迎来问,前3篇论文都已经看过2、3遍了,还是知道一些东西的。


OCR概述

全称Optical Character Recognition ,中文即:光学字符识别。这是文字自动输入的一种方法,通过扫描和摄像等光学输入方式获取纸张上的文字图像信息,利用各种模式识别算法分析文字形态特征,判断出文字的标准编码,并按通用格式存储在文本文件中,从根本上改变了人们对计算机文字人工编码录入的概念。

我这就是瞎扯淡。大家自己去维基百科上看吧。


Tesserct概述

OCR----Ubuntu下调用Tesseract引擎(Python篇)

图1 识别过程图

OCR----Ubuntu下调用Tesseract引擎(Python篇)
图2 识别过程图(中文版)


入门操作

开发环境(请注意你自己的):

Python2.7,用自带的IDLE即可
Ubuntu14.04 LTS
Tesseract 3.02

如果没有这些东西,试了下面的代码不成功,建议使用虚拟机(VM)来安装这些工具。


注意2点:

1 Tesseract在Github上的Python API,在你自己的电脑不一定能跑通,因为libtesseract.so.3的存储位置不同,需要自己去找自己本机的libtesseract.so.3

2 Tesseract的处理时间和图片大小有关,越大的图片用时越长,用大图片测试的童鞋请耐心等待


代码如下:

##########################################
#内容来自:谷震平的博客,http://blog.csdn.net/guzhenping
#谷震平原创,请尊重版权!
#这个是最精简的Python代码,后续会给出复杂的。
#使用说明:(1) 注意你的引擎库文件的位置,可能需要修改libname;
#(2) 我的待识别图片filename在桌面上,请注意修改,一定要把文件扩展
#名带上
##########################################

import os
import ctypes

libname = "/usr/lib/libtesseract.so.3" # tesseract引擎的动态库
lang = "eng" # 识别的语言,eng是英文,chi_sim是中文,自己选择
filename = "/home/guzhenping/Desktop/tests.jpg"  # 待识别图片

# 加载动态库
tesseract = ctypes.cdll.LoadLibrary(libname)
tesseract.TessVersion.restype = ctypes.c_char_p

# 创建一个handle,请看TessBaseAPI,你就懂了为啥非要有handle
api = tesseract.TessBaseAPICreate()

# 初始化引擎
rc = tesseract.TessBaseAPIInit3(api,TESSDATA_PREFIX,lang)

# 处理待识别图片
text_out = tesseract.TessBaseAPIProcessPages(api,filename,None,0)

#转成字符串
result_text = ctypes.string_at(text_out)
print result_text  # 输出结果


结语

如果希望深入研究Tesseract,欢迎交友,留言。此外,我还有印象笔记的工作记录。如果可以,欢迎交换研究资料。

这些工作还有待完善,会慢慢发布的,期待您的关注!


本文永久更新地址:http://www.linuxdiyf.com/linux/19405.html