定义
pytesseract是一套面向Python的光学字符识别工具,其官方描述为“Python-tesseract is an optical character recognition (OCR) tool for python”,即用于识别和读取图像中所含文字的程序库[1]。它是对谷歌Tesseract-OCR引擎的封装(wrapper),本身并不包含识别引擎,运行时仍依赖系统中安装的Tesseract可执行文件[2]。因此它也可被当作调用tesseract命令行程序的独立脚本使用,只是把识别结果打印出来而不写入文件[2]。在Debian等系统的软件包仓库中,该库被描述为“Python wrapper for Google Tesseract”,并以pytesseract与python3-pytesseract两个包分别提供命令行工具与Python模块。
原理
pytesseract的工作方式是把图像数据写入临时文件,再以子进程方式调用Tesseract命令行程序完成识别,最后解析其输出并返回给调用方[2]。输入既可以是pillow的Image对象,也可以是图片文件路径,还可以直接传入opencv读取的NumPy数组;由于opencv默认使用BGR色彩顺序而pytesseract假定为RGB,因此调用前通常需要做色彩空间转换[3]。
识别的核心入口是image_to_string()函数,它接收图像并返回一个字符串形式的识别结果[4]。此外还有image_to_boxes()返回字符的边界框、image_to_data()返回包含边界框、置信度、行号与页码的详细数据、image_to_osd()返回页面方向和文字种类信息,以及image_to_pdf_or_hocr()输出可搜索PDF或hOCR结果,image_to_alto_xml()输出ALTO XML结果[2]。
调用时可以传入lang参数指定语言,例如lang="fra"识别法语、lang="chi_sim+eng"实现中英文混合识别;用config参数可以附加Tesseract运行选项,如--psm指定页面分割模式、--oem指定OCR引擎模式[1]。函数还支持timeout参数,超时后终止识别任务,此时会抛出RuntimeError[2]。
发展历程
pytesseract所封装的Tesseract引擎最初于1985年至1994年间由惠普实验室在布里斯托与科罗拉多州格里利开发,1996年移植到Windows并进行C++化改造,2005年由惠普与内华达大学拉斯维加斯分校开源,2006年起由谷歌赞助开发[5]。Tesseract第4版引入基于LSTM神经网络、以整行识别为核心的OCR引擎,同时保留第3版的传统识别引擎[6]。
pytesseract一行最初由Samuel Hoffstaetter编写,后续由Juarez Bochi、Matthias Lee等人参与维护,代码仓库托管在代码托管平台GitHub上[7]。项目仓库创建于2010年10月,首次在软件包索引PyPI发布可追溯至2014年2月6日[8][9]。软件包元数据显示项目采用Apache License 2.0授权,作者为Samuel Hoffstaetter,维护者为Matthias Lee[10]。
版本方面,2018年1月发布的0.1.9引入了新的通用函数、进行了较大重构并改进了图像格式处理,0.2.0随之修正了新的图像处理逻辑中的缺陷。0.3.9起仅支持Python 3.7及以上版本,并把已弃用的distutils版本解析改为packaging.version。0.3.12新增run_and_get_multiple_output功能,0.3.13增加了对Python 3.12的支持。
应用
pytesseract常用于把扫描件、照片和仅有图像层的PDF转换为可编辑文本,是Python环境中做文档数字化的常见方案[11]。借助image_to_data()提供的坐标与置信度信息,它可以用于表格识别、票证与单据信息提取等需要定位文字位置的场景[12]。
在混合语言文档处理中,可以通过lang参数拼接语言代码同时识别多种文字,例如中英文混排的图片可传入lang="chi_sim+eng"[13]。除直接处理图片外,配合pdf2image等库先完成PDF到图像的转换,即可实现扫描版PDF的批量文字抽取[12]。也可将识别结果输出为可搜索PDF或hOCR、ALTO XML等结构化格式,便于后续检索与排版分析[2]。
局限
pytesseract只是外壳,识别能力完全由外部的Tesseract引擎决定,因此使用前必须在系统中单独安装Tesseract,仅安装Python包无法工作;若引擎不在默认位置,还需要通过tesseract_cmd指定可执行文件路径[11]。缺少引擎时程序会抛出TesseractNotFoundError[4]。
Tesseract的识别准确率高度依赖输入图像质量,对低分辨率、倾斜、光照不均或噪声较多的图像效果较差,通常需要先做灰度化、二值化、放大、去噪和纠偏等预处理才能取得较好结果,而预处理过度又会抹掉细小笔画反而降低准确率[14]。此外,默认调用image_to_string()不返回置信度信息,也无法处理手写体等非印刷体文字[4]。
由于每次识别都要启动外部进程,pytesseract本身不提供批处理调度,批量任务需由使用者自行组织并发或队列逻辑[11]。在处理原生带文字层的PDF、Word或Excel文档时,OCR并非合适手段,只有文字纯粹以像素形式存在时才需要使用这类识别方案[14]。
参见
参考资料
- pytesseract - Python Tesseract [引用日期2026-10-14]
- pytesseract [引用日期2026-10-14]
- unstructured.pytesseract [引用日期2026-10-14]
- theneuralbase.com 上的网页 [引用日期2026-10-14]
- Tesseract [引用日期2026-10-14]
- tesseract [引用日期2026-10-14]
- pypi.org 上的网页 [引用日期2026-10-14]
- pytesseract [引用日期2026-10-14]
- pytesseract [引用日期2026-10-14]
- pytesseract - PyPI Package File explorer [引用日期2026-10-14]
- how-to-use-tesseract-ocr-in-python [引用日期2026-10-14]
- 小猪的Python学习之旅:pytesseract文字识别实战指南 [引用日期2026-10-14]
- 小猪的Python学习之旅 —— 13.文字识别库pytesseract初体验 [引用日期2026-10-14]
- micropyramid.com 上的网页 [引用日期2026-10-14]