0. 背景
最近在准备一个爬虫项目,准备阶段了解到一个文字识别工具,用在验证码方面很方便。 现在主力开发机是mac,本文流程都是基于mac。
1 安装
代码语言:javascript复制//安装tesseract的同时安装训练工具
brew install --with-training-tools tesseract
//安装tesseract的同时安装所有语言,语言包比较大,如果安装的话时间较长,建议不安装,按需选择
brew install --all-languages tesseract
//安装tesseract,并安装训练工具和语言
brew install --all-languages --with-training-tools tesseract
//只安装tesseract,不安装训练工具
brew install tesseract
2. 语言库
作为文字识别工具,需要安装识别的语言库。
下载需要的语言之后,放到/usr/local/Cellar/tesseract/3.05.01/share/tessdata
路径下。
常用的如下:
库名 | 语言 |
---|---|
chi_sim.traineddata | 中文 |
chi_sim_vert.traineddata | 中文精简集 |
eng.traineddata | 英文 |
3.Tesseract的使用
- 帮助文档
~:Tesseract pengjunzhe$ tesseract help
Usage:
tesseract --help | --help-psm | --help-oem | --version
tesseract --list-langs [--tessdata-dir PATH]
tesseract --print-parameters [options...] [configfile...]
tesseract imagename|stdin outputbase|stdout [options...] [configfile...]
OCR options:
--tessdata-dir PATH Specify the location of tessdata path.
--user-words PATH Specify the location of user words file.
--user-patterns PATH Specify the location of user patterns file.
-l LANG[ LANG] Specify language(s) used for OCR.
-c VAR=VALUE Set value for config variables.
Multiple -c arguments are allowed.
--psm NUM Specify page segmentation mode.
--oem NUM Specify OCR Engine mode.
NOTE: These options must occur before any configfile.
Page segmentation modes:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line,
bypassing hacks that are Tesseract-specific.
OCR Engine modes:
0 Original Tesseract only.
1 Cube only.
2 Tesseract cube.
3 Default, based on what is available.
Single options:
-h, --help Show this help message.
--help-psm Show page segmentation modes.
--help-oem Show OCR Engine modes.
-v, --version Show version information.
--list-langs List available languages for tesseract engine.
--print-parameters Print tesseract parameters to stdout.
- 默认使用
# 默认使用eng(英文)文字库,imgName是图片地址,result是识别结果
tesseract imgName result
- 指定语言
//指定使用简体中文
tesseract -l chi_sim imgName result
//查看本地存在的语言库
tesseract --list-langs
- psm参数(page segmentation modes) help文档中的介绍如下
Page segmentation modes:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
解释:
代码语言:javascript复制0 - 仅做定位和脚本检测(OSD)
1 - 使用OSD自动分页
2 - 自动分页,但是不使用OSD或者OCR
3 - 全自动分页,没使用OSD
4 - 假定是一列可变大小文本
5 - 假定是一块垂直对齐的文本
6 - 假定是一块统一的格式的文本
7 - 视图像为一行文本
8 - 视图像为一个单词
9 - 使图像为环形排布的单词
10 - 视图像为单个字符
4. 字符训练
字符训练是一个很重要,也很复杂的话题。以后深入学习了单开话题进行补充。
5. Python库
安装好tesseract之后就可以在Python中通过库文件很方便的把这个功能做到程序中了。
-
pip install pytesseract
不多说。 - 简单的源码:
# -*-encoding:utf-8-*-
import pytesseract
from PIL import Image
def main():
# 打开图片
image0 = Image.open("./img/0.jpg")
image1 = Image.open("./img/1.jpg")
# 使用默认字符集(英文)识别图片
text0 = pytesseract.image_to_string(image0)
# 使用默认字符集(中文)识别图片
text1 = pytesseract.image_to_string(image1, lang='chi_sim')
# 输出
print(text0)
print(text1)
if __name__ == '__main__':
main()
- 结果
- 英文原图:
831524628903_.pic.jpg
- 识别结果: Hello worldl
- 中文原图:
891524629631_.pic.jpg
- 识别结果: 2018年清明节工作 日历女口下图二
可见,英文识别还可以,中文适应度不是很高。对于左右结构的字识别能力较差。