Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。
本系列将会陆续整理分享一些有趣、有用的第三方库。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_Ecosystem
-
安装:
https://github.com/tesseract-ocr/tesseract
pip install pytesseract
-
语言包:
pytesseract.get_languages()
如果要识别更多语言,需要下载并安装相应的语言包:
-
下载语言包:
https://github.com/tesseract-ocr/tessdata
-
安装语言包:
pytesseract库提供了多个函数来实现不同的OCR功能,以下是一些主要的函数:
-
image_to_string()——从图像中提取文本:
image_to_string()函数是pytesseract库中最常用的函数之一,它用于将图像中的文本转换为字符串,其基本语法如下:
image_to_string(image, lang=None)
以下是该函数的一些主要参数:
-
image:必需参数,要进行字符识别的图像。可以是PIL Image对象、NumPy数组或者是图像文件的路径。如果传递的是对象而不是文件路径,pytesseract会隐式地将图像转换为RGB模式。 -
lang:可选参数,指定要使用的语言模型的语言标识符。这确定了Tesseract将使用哪种语言的字符识别模型。例如,‘eng’表示英语,‘chi_sim’表示中文简体等。默认情况下,它使用英语模型。可以根据需要设置多个语言,以提高识别准确性。
以下是一个简单的使用示例:
# 打开图像文件
image = Image.open('./data/test_1.jpg')
# 进行文字识别
# 如果需要识别特定语言,可以通过 lang 参数指定语言代码
text = pytesseract.image_to_string(image,lang='chi_sim')
print(text)
另外,可以传入包含多个图像文件路径列表的txt文件进行批处理:
# 打开图像文件
image_txt = './data/images.txt'
# 进行文字识别
text = pytesseract.image_to_string(image_txt,lang='chi_sim')
print(text)
-
image_to_boxes()——返回包含识别字符及其边界框的结果:
# 打开图像文件
image = Image.open('./data/test_1.jpg')
# 进行文字识别
boxes = pytesseract.image_to_boxes(image,lang='chi_sim')
print(boxes)
-
image_to_data()——返回包含方格边界、confidences 和其他信息的结果。:
image_to_data()函数提供了更详细的输出,包括每个识别到的文字的坐标位置、置信度等信息,其基本语法如下:
image_to_data(image, lang=None, config='',
nice=0, output_type=Output.STRING,
timeout=0, pandas_config=None)
以下是该函数的一些主要参数:
-
image:必需参数,要进行字符识别的图像。可以是PIL Image对象、NumPy数组或者是图像文件的路径。如果传递的是对象而不是文件路径,pytesseract会隐式地将图像转换为RGB模式。 -
lang:可选参数,指定要使用的语言模型的语言标识符。这确定了Tesseract将使用哪种语言的字符识别模型。例如,‘eng’表示英语,‘chi_sim’表示中文简体等。默认情况下,它使用英语模型。可以根据需要设置多个语言,以提高识别准确性。 -
config:可选参数,一个字符串,用于指定Tesseract的其他配置选项。你可以在这里设置各种Tesseract参数,如图像处理参数、OEM(OCR引擎模式)参数等。例如,–psm 6表示使用页面分段模式6。配置选项可以根据你的需求进行自定义。 -
nice:可选参数,修改Tesseract运行的处理器优先级。该参数在Windows系统上不支持。它调整了类Unix系统进程的优先级。 -
output_type:可选参数,指定输出的数据类型。该参数支持以下几种选项:STRING(默认的输出类型,返回识别结果的字符串形式)、BYTES(返回识别结果的字节形式)、DICT(返回一个包含识别结果详细信息的字典,其中包含边界框、置信度等信息)、DATAFRAME(返回一个Pandas DataFrame对象,其中包含识别结果的详细信息),默认值是pytesseract.Output.STRING。 -
timeout:可选参数,OCR处理的持续时间(以秒为单位),在此之后,pytesseract将终止并可能引发RuntimeError。
以下是一个简单的使用示例:
# 打开图像文件
image = Image.open('./data/test_1.jpg')
# 进行文字识别
data = pytesseract.image_to_data(image,lang='chi_sim' , output_type=pytesseract.Output.DATAFRAME)
print(data)
返回结果为一个Pandas DataFrame对象,其中包含识别结果的详细信息:

如果原始图像中存在噪声或文字排版不规则的情况,会显著影响识别准确性。为了提升 OCR 的识别效果,通常需要对图像进行预处理,以消除噪声、增强文字对比度、规范化排版等。OpenCV 和 PIL(Pillow)是两种常用的图像处理库,它们提供了丰富的工具来进行图像预处理。
以下是一些使用 OpenCV 或 PIL 进行图像预处理以提升 OCR 准确性的常见方法:
-
1. 灰度化:
将彩色图像转换为灰度图像可以简化处理过程,因为 OCR 通常只需要关注文字的形状和位置,而不需要颜色信息。
OpenCV:使用 cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)。
PIL:使用 image.convert(‘L’)。
-
2. 二值化:
将灰度图像转换为二值图像(仅包含黑白两种颜色),这有助于更好地分离文字和背景。
OpenCV:可以使用 cv2.threshold() 或自适应阈值方法 cv2.adaptiveThreshold()。
-
3. 噪声消除:
使用滤波器(如高斯滤波器、中值滤波器等)来平滑图像,减少噪声。
OpenCV:cv2.GaussianBlur() 或 cv2.medianBlur()。
PIL:可以使用 ImageFilter 模块中的滤波器。
以下是一个简单的使用示例:
import cv2
# 加载图像
image = cv2.imread('./data/test_1.jpg')
# 转为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化
_, binary = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)
# 保存处理后的图像并提取文本
cv2.imwrite("./data/processed_image.jpg", binary)
# 对预处理后的图像文件进行文本识别
text = pytesseract.image_to_string(binary,lang='chi_sim')
print(text)
更多内容,可以前往官方GitHub页面查看:
https://github.com/madmaze/pytesseract


本篇文章来源于微信公众号: 码农设计师