1.图形验证码识别技术
登陆或者请求一些数据时需要图形验证码。将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition),简称OCR。实现OCR的库不是很多,特别是开源的。因为这一块存在一定的技术壁垒(需要大量的数据、算法、机器学习、深度学习知识等),并且如果做好了具有很高的商业价值。因此开源的比较少。这里介绍一个比较优秀的图像识别开源库:Tesseract。由Google公司赞助,可以通过训练识别任何字体。
2.Windows操作系统下Tesseract的安装
Tesseract的下载地址有:
(2)德国曼海姆大学发行的3.05版本下载地址,http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-3.05.00dev.exe
(3)Simon Eigeldinger (@DomasoFan) 维护的另一个版本:http://3.onj.me/tesseract/,值得称道的是,这个网址里还有一个比较详细的说明。
安装好后需要添加2个环境变量:D:\Python2.7\tesseract\Tesseract-OCR\tessdata 和 D:\Python2.7\tesseract\Tesseract-OCR (tesseract.exe的文件路径)
3.在cmd中写Tesseract代码识别图片
(1)常用的cmd命令:d: 进入D盘; cd / 返回到根目录; cd *** 进入***文件夹
(2)首先进入图片所在的文件夹,然后使用命令: (tesseract 文件名.后缀 识别后的文件名)
tesseract 01.png after
4.Tesseract识别中文图片
需要下载识别中文的数据:https://github.com/tesseract-ocr/tessdata/blob/bf82613055ebc6e63d9e3b438a5c234bfd 638c93/chi_sim.traineddata或者https://github.com/tesseract-ocr/langdata/tree/master/chi_sim,下载的文件放到D:\Python2.7\tesseract\Tesseract-OCR\tessdata文件夹里面。
(1)tesseract -h 查看tesseract命令是怎么用的
(2)tesseract --list-langs 查看tesseract可以支持识别的语言种类
(3)tesseract 02.png 02 -l chi_sim
(4)出现错误提示:actual_tessdata_num_entries_ <= TESSDATA_NUM_ENTRIES:Error:Assert failed:in file
..\..\ccutil\tessdatamanager.cpp, line 50。这个是因为下载的 traineddata 版本不对,如果你报了这个错误应该下载这个版本的中文包,把之前的替换掉就可以了
5.在Python代码中操作tesseract识别图片
(1)需要安装pytesseract库:
pip install pytesseract
以及 PIL库(Pillow库):
pip install PIL # pip install Pillow
pip list 可以查看安装了哪些库。
(2)在python代码中实现tesseract识别图片
# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import pytesseract
from PIL import Image
# tesseract.exe的全路径
pytesseract.pytesseract.tesseract_cmd = r"D:\Python2.7\tesseract\Tesseract-OCR\tesseract.exe"
# 想要打开的文件的全路径
image = Image.open(r"D:\Program\01.png")
text = pytesseract.image_to_string(image)
# text = pytesseract.image_to_string(image, lang="chi_sim")
with open(r"C:\Users\HuangQi\Desktop\01.txt", "w") as fp:
fp.write(text.decode("utf-8", "ignore"))
print text
6. 常见问题
(1)环境变量的问题
Error opening data file …. Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your “tessdata” directory. Failed loading language ‘eng’ . Teseract couldn’t load any languages! Counld not initialize tesseract.
意思是:请确保将TESSDATA_PREFIX环境变量设置为您的“tessdata”目录的父目录。
解决办法:
第一步:在环境变量中的系统变量中新建一个系统变量,变量名称为TESSDATA_PREFIX,tessdata是放置语言包的文件夹,一般在你安装tesseract的目录下,即tesseract的安装目录就是tessdata的父目录,把ESSDATA_PREFIX的值设置为tessdata的父目录。
第二步:重启电脑。注意一定要重启或者注销重新进入系统。