本文参考了https://www.cnblogs.com/syqlp/p/5462459.html,诚挚感谢
试验目标:用python27实现文字识别OCR功能
环境:win10(64位)
Python2.7.9
实现流程:
1. 安装pyocr
到https://pypi.python.org/pypi/pyocr/0.4.1下载pyocr-0.4.1.tar.gz
解压后,进入pyocr-0.4.1.tar.gz目录里执行下面的命令进行安装:
Python setup.py install
2. 安装PIL
针对win64位的PIL,到下面的网址下载 Pillow-2.1.0.win-amd64-py2.7.exe (md5) : https://pypi.python.org/packages/2.7/P/Pillow/Pillow-2.1.0.win-amd64-py2.7.exe#md5=3abe747fbbcdba151e48255b96639b69
下载后选默认直接安装即可。
如果是32位系统,到http://www.pythonware.com/products/pil/index.htm下载安装
3. 安装tesseract-ocr
到下面网址下载:
http://jaist.dl.sourceforge.net/project/tesseract-ocr-alt/tesseract-ocr-setup-3.02.02.exe
下载后选默认直接安装。
4. 测试
测试代码如下:
#coding=utf-8
__author__ = 'syq'
#https://github.com/tesseract-ocr
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
try:
from pyocr import pyocr
from PIL import Image
except ImportError:
print '模块导入错误,请使用pip安装,pytesseract依赖以下库:'
print 'http://www.lfd.uci.edu/~gohlke/pythonlibs/#pil'
print 'http://code.google.com/p/tesseract-ocr/'
raiseSystemExit
tools = pyocr.get_available_tools()[:]
if len(tools) == 0:
print("No OCR tool found")
sys.exit(1)
print("Using '%s'" %(tools[0].get_name()))
printtools[0].image_to_string(Image.open('D:\\123.png'),lang='eng')
print tools[0].image_to_string(Image.open('D:\\3434.png'),lang='chi_sim')
#printtools[0].image_to_string(Image.open('D:\\3535.png'),lang='chi_sim')
123.png
3434.png
运行结果:
c:\python27\python my_ocr_test.py
Using 'Tesseract (sh)'
7364
Traceback (most recent call last):
File"my_ocr_test.py", line 26, in
printtools[0].image_to_string(Image.open('D:\\3434.png'),lang='chi_sim')
File "build\bdist.win-amd64\egg\pyocr\tesseract.py", line 322,in image_to_string
pyocr.tesseract.TesseractError:(-1073741819, '')
可见,英文可以正确识别,可是中文识别不了。
网上找到的解决方法如下:
1. 下载tesseract-ocr的中文库,地址:https://codeload.github.com/tesseract-ocr/tessdata/zip/master,里面包含tesseract所有的文字库,大约1.1G,chi_sim.traineddata为简体中文库,将该文件放至C:\ProgramFiles (x86)\Tesseract-OCR\tessdata目录下。
2. 控制台切换至C:\ProgramFiles (x86)\Tesseract-OCR\tessdata,使用命令行执行:
combine_tessdata -e chi_sim.traineddatachi_sim.config
执行完后,在目录下出现chi_sim.config的文件,打开该文件;
在allow_blob_division F这一行的前面加#,注释掉
即:#allow_blob_division F
然后,在执行命令行:
combine_tessdata -o chi_sim.traineddata chi_sim.config
到此在使用 chi_sim.traineddata文件就不会报read_params_file: parameternot found: allow_blob_division
当然,要使用上面的命令行,需要安装Tesseract-OCR
以上步骤摘自http://www.cnblogs.com/syqlp/p/5460971.html,不能正确执行。不知是不是系统版本的原因。
至此,文字识别,已实现了英文和数字的正确识别。