之前看了,网上一些python 图片识别的小程序。自己也试着写个来测试下!
运行环境 Linux CentOS +python 2.7 +PIL库+ Tesseract3.0+pytesser
环境搭建:
Linux下安装python就不说了,这里主要说如何安装pytesser,PIL和Tesseract
1.检查系统是否已经安装以下库:
libpng , libjpeg ,libtiff,zlibg-dev
#yum list | grep libpng
#yum list | grep libjpeg
#yum list | grep libtiff
#yum list | grep zlibg
没安装上就安装:
#yum install libpng
#yum install libjpeg
#yum install libtiff
#yum install zlibg
2.安装Tesseract:
解压压缩包:
进入解压后的文件夹:
#cd tesseract-3.00
安装:
#./configure --prefix=/opt/tesseract #使用--prefix 来指定安装的目录,我这里的安装目录是/opt/tesseract
#make
#make install
安装完成后要配置PATH,修改用户home目录下的 .profile或者.bash-profile我这里是修改.bash-profile。在PATH那里加上 以下内容。
:/opt/tesseract/bin
令配置文件生效:
#. .bash-profile
3.安装PIL:
解压压缩包:
#tar -zxvf Imaging-1.1.7.tar.gz
进入解压后的文件夹:
#cd Imaging-1.1.7
安装:
#python setup.py install
4.安装pytesser:
解压压缩包:
#unzip pytesser_v0.0.1.zip
建议创建一个文件夹,把压缩包放到文件夹里在解压,因为直接使用unzip来解压会把压缩包里的东西解压到当前目录,不易管理。
5.测试:
在pytesser目录下创建img_to_text.py内容如下:
from pytesser import * #导入pytesser文件
def img_to_text(filename):
img = Image.open(filename) #读取图片文件
img.load() #这里要是不用load()方法,有时会提示找不到object。
if len(img.split())==4: #这里主要把图片的model分离
r,g,b,a = img.split() #把图片的4个model或是通道付给r,g,b,a(r红色通道,g绿色通道,b蓝色通道,a透明alpha 通道),PIL在bmp图片是不支持a通道的。而图片识别,是先要把图片转换成bmp格式在进行识别的。
img = Image.merge("RGB",(r,g,b)) #去掉a通道,重新组合图片。
return image_to_string(img) #调用pytesser中的image_to_string()方法,进行图文转换。方法中用到了tesseract引擎。
if __name__ == '__main__':
img_to_text()
print "OK"
测试:
我这里那了几张网上商城的价格图片进行识别:
上图是原图:
¥符号不能识别,不过对数字部分没影响。
测试别的图片:
这张通过转换成bmp再识别的图片可以识别出¥符合。不过有时就算转换成bmp图片也是不能识别出¥符号。
不过要获取价格可以截取string第3个字符之后的字符。也就是获取string[2]及其后的字符了。
ps:Tesseract 提供多国语言库,可以到文章中Tesseract的下载页面下载。