小科普
光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息.
Tesseract的OCR引擎最先由HP实验室于1985年研发,2005年,交由Google对Tesseract进行改进、优化工作。
准备工作
1.PIL 、Pytesseract
from PIL import Image
from pytesseract import image_to_string
2.安装引擎 Tesseract-OCR
ok 用画图工具整张简单的图片(vm3.png)小试牛刀
上代码
from PIL import Image
from pytesseract import image_to_string
img = Image.open("vm3.png");
text = image_to_string(img)
print(text)
别走,留步,真的只有那么多,不信看结果
支持中文
but,Tesseract是老外开发的,默认不支持中文,需要我们加个中文语言包
将文件chi_sim.traineddata (密码:nd6p) 放到安装目录:Tesseract-OCR\tessdata文件夹内,再整张图
代码骚作修改(,lang='chi_sim')即可
from PIL import Image
from pytesseract import image_to_string
img = Image.open("vm3.png");
text = image_to_string(img,lang='chi_sim')
print(text)
没毛病
骚微复杂图像处理
其实,复杂图片的来不了,需要处理一下,比如这张图片:
这样处理:
img = Image.open("vm.png");
imgry = img.convert("L")
threshold = 140
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
out = imgry.point(table, '1')
out.show()
show()一下处理后的结果:
最后,整合一下:
img = Image.open("vm.png");
imgry = img.convert("L")
threshold = 140
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
out = imgry.point(table, '1')
text = image_to_string(out)
print(text)
我就知道你会回来,如果你在运行中遇到以下问题:
tesseract is not installed or it's not in your path
一图解万愁
Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.
Failed loading language 'eng'
Tesseract couldn't load any languages!
添加环境变量:
变量名:TESSDATA_PREFIX
变量值:testdata的路径
如果加了还不行,重启电脑!
如果还不行,试试 百度OCR的吧
如果你用来作为验证码识别。可能会用到 截屏和裁剪