PyOCR是OCR(optical character recognition,光学字符识别)在python环境的一个接口,注意这里提到的内核是OCR,不像pytesseract内核是tesseract,说明PyOCR包裹的内核除了可以是tesseract还可以是其他OCR工具,比如Cuneiform和Libtesseract。PyOCR支持所有的图片格式,可以甄别文字方向,可以指定只识别数字(包裹的内核是tesseract和Libtesseract时)……PyOCR是第三方模块,需要安装和引入,需要OCR内核(这里用tesseract,参见百宝箱里tesseract的介绍)和第三方模块Pillow(打开生成图片对象供识别)支撑。
通过PyOCR初始化时可以获知系统使用的OCR工具和支持识别的语言包:
import sys
import pyocr.builders
tools = pyocr.get_available_tools() # 获得系统安装的OCR工具列表
if len(tools) == 0: # 如果没有安装OCR,则无法进行图片文字识别,作出提示
print("没有安装OCR工具")
sys.exit(1)
tool = tools[0] # 这里只安装了tesseract,所以这里tool指向tesseract
print("这里使用的OCR工具是{} ".format(tool.get_name())) (1)
langs = tool.get_available_languages() # 获得所有识别语言的语言包,返回列表
print("支持识别的语言有:{}" .format("、 ".join(langs))) (2)
lang = langs[1] # 索引从0开始,所以1指向的是chi_tra
print("将要识别的语言是:{}".format(lang)) (3)
(1)输出为:
这里使用的OCR工具是Tesseract
(2)join是字符串对象的方法函数,把列表的元素用、连接起来。这里安装了简体繁体中文和英文识别库,所以输出为:
支持识别的语言有:chi_sim、chi_tra、eng、osd
排列顺序跟系统语言设置有关
(3)输出为:
将要识别的语言是:chi_sim
PyOCR识别图片上的文字后,将结果保存到字符串里:
from PIL import Image # 引入第三方模块pillow的Image
txt = tool.image_to_string(
Image.open('example_02.png'), # 打开和生成图形对象
lang=lang, # 指定要识别的语言
builder=pyocr.builders.TextBuilder()
# 指定生成器,不指定也行,因为默认就是这个生成器
)
print(txt) # txt是字符串类型
也可以将结果保存到文本文件中:
with open("toFile.txt", 'w', encoding='utf-8') as fObject:
# 以写’w’的方式打开新文件,指定编码是utf-8,生成文件对象fObject
builder.write_file(fObject, txt) # 将识别出来的字符串保存到文本文件
如果PyOCR内核OCR工具用的是Tesseract时,生成器可以指定为识别数字的生成器:
lang = langs[2]
# 我发现识别数字时把语言设为英文结果更好,在前面对 langs的输出中可知eng是第三个元素,所以索引为2
digits = tool.image_to_string(
Image.open('digit.jpeg'),
lang=lang,
builder=pyocr.builders.DigitBuilder() # 生成器指定为识别数字的生成器
)
print(digits) # digits是字符串类型