图片中存在大段的文字,用手敲实在是费劲。很多在线转换的工具,速度慢,并且达到一定次数后会收费。贫穷让我自力更生,查到python可以通过安装pytesseract库来进行文字识别。而pytesser调用了tesseract,因此还需要安装Tesseract-OCR软件(OCR:Optical Character Recognition,即光学字符识别技术,专门用于对图片文字进行识别,并获取文本。tesseract-ocr引擎先由HP实验室研发,后来成为一个开源项目,主要由google进行改进优化)。另外还需要用的图像处理库PIL库。

网上相关资料很多,在安装过程中出现了很多问题,特将安装方法和遇到的问题做个记录,方便日后查阅。

运行环境为:OS X Yosemite 10.10.5

1.安装PIL和pytesseract库

1
2
RosyMacBook-Pro:~ Rosy$ pip install pytesseract
RosyMacBook-Pro:~ Rosy$ pip install PIL

2.安装Tesseract-OCR

2.1 安装homebrew

Homebrew是MacOS上的包管理器,类似于ubuntu中的apt-get,centos中的yum。

1
RosyMacBook-Pro:~ Rosy$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装好后,可用 brew -v 查看认是否安装成功。

1
2
3
RosyMacBook-Pro:~ Rosy$ brew -v
Homebrew 1.3.8
Homebrew/homebrew-core (git revision e939; last commit 2017-11-29)

2.2 安装tesseract

安装tesseract会提示 tesseract:XQuartz is required to install this formula. X11Requirment unsatiffied!

需要先安装xquartz!

1
2
3
4
// 安装xquartz
RosyMacBook-Pro:~ Rosy$ brew cask install xquartz
// 安装tesseract的同时安装训练工具
RosyMacBook-Pro:~ Rosy$ brew install --with-training-tools tesseract

2.3 安装Tesseract-OCR语言包配置

默认安装的是eng英文语言包。如果需要对汉语进行提取,则需要安装汉语语言包。

语言包下载地址:https://github.com/tesseract-ocr/tessdata

下载chi_sim.traineddata(中文简体),将其拷贝到/usr/local/Cellar/tesseract/3.05.01/share/tessdata下。

image

验证Tesseract-OCR:

1
2
3
RosyMacBook-Pro:~ Rosy$ tesseract /Users/Rosy/Desktop/test.png /Users/Rosy/Desktop/test -l chi_sim
Tesseract Open Source OCR Engine v3.05.01 with Leptonica
RosyMacBook-Pro:~ Rosy$

其中 -l 表示识别的语言,test是输出到文件txt的名字。在指定路径下能够看到生成的txt文件。

png格式的图片,提前其中的文字信息

image

提取后的效果:
image

3.python程序提取图片信息

1
2
3
4
5
6
7
8
9
10
11
12
#coding:utf-8
import sys
import pytesseract
from PIL import Image
reload(sys)
sys.setdefaultencoding('utf-8')
image = Image.open("/Users/Rosy/Desktop/test.png")
text = pytesseract.image_to_string(image,lang='chi_sim')
with open("/Users/Rosy/Desktop/output.txt", "w") as f:
print(text)
f.write(str(text))

提取结果

image

其中需要说明:

  • import pytesseract报错如下
1
2
3
4
5
6
7
8
>>> import pytesseract
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pytesseract.py", line 9, in <module>
import Image
File "/Library/Python/2.7/site-packages/PIL/Image.py", line 27, in <module>
from . import VERSION, PILLOW_VERSION, _plugins
ValueError: Attempted relative import in non-package

说pytesseract.py无法引用Image这个包,在确认了PIL是正常安装且能够正常使用,于是找到了pytesseract.py报错的地方,源码是:

1
2
3
4
try:
import Image
except ImportError:
from PIL import Image

我的PIL的Image文件和pytesseract.py不在同一目录下,因此没法直接引用。并且没有走 from PIL import Image 这条语句,说明是异常没有捕获到,改一个范围更大的异常进行捕获就可以了:

1
2
3
4
try:
import Image
except Exception:
from PIL import Image
  • python不能够读取中午,加了 #coding:utf-8 也不行;查阅了网上的资料,加上如下三行,搞定!
1
2
3
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

具体添加的位置见完整代码。

另外,尝试了有背景花纹,颜色和背景接近和非正常字体的图片的文字提取信息。发现正常字体在颜色和背景接近的情况下,能够大致识别出文字信息,而在非正常字体的情况下几乎不能正确提前信息。见下图:

image

另外,对图片的处理和对Tesseract-OCR语言包的训练,可以提高识别率,以后可能会继续研究。