OCR识别图片和PDF上的文字

PyOCROCRoptical character recognition,光学字符识别)在python环境的一个接口,注意这里提到的内核是OCR,不像pytesseract内核是tesseract,说明PyOCR包裹的内核除了可以是tesseract还可以是其他OCR工具,比如CuneiformLibtesseractPyOCR支持所有的图片格式,可以甄别文字方向,可以指定只识别数字(包裹的内核是tesseractLibtesseract时)……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是字符串类型