pytesseract

关注
义项:Tesseract 的 Python 封装库
pytesseract

pytesseract是谷歌(Google)开源光学字符识别引擎Tesseract的Python封装库,通常以python-tesseract的名义发布,作用是让Python程序识别并读出图像中嵌入的文字[1]。它本身不实现识别算法,而是把pillow等图像库支持的各种图片交给Tesseract处理,并支持列出可用语言、输出可搜索PDF、返回字符位置与置信度等结果[2]。由于使用简单、语言支持广,它成为Python生态中调用OCR功能的常用入口之一[3]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

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]。

参见

  • Tesseract —— pytesseract所封装的底层光学字符识别引擎。

  • 光学字符识别 —— pytesseract所实现的技术,把图像中的文字转换为可编辑文本。

  • Python —— pytesseract的运行语言与宿主环境。

  • Pillow —— pytesseract常用的图像读取与处理库。

  • OpenCV —— 常与pytesseract配合,用于识别前的图像预处理。

参考资料

  1. pytesseract - Python Tesseract [引用日期2026-10-14]
  2. pytesseract [引用日期2026-10-14]
  3. unstructured.pytesseract [引用日期2026-10-14]
  4. theneuralbase.com 上的网页 [引用日期2026-10-14]
  5. Tesseract [引用日期2026-10-14]
  6. tesseract [引用日期2026-10-14]
  7. pypi.org 上的网页 [引用日期2026-10-14]
  8. pytesseract [引用日期2026-10-14]
  9. pytesseract [引用日期2026-10-14]
  10. pytesseract - PyPI Package File explorer [引用日期2026-10-14]
  11. how-to-use-tesseract-ocr-in-python [引用日期2026-10-14]
  12. 小猪的Python学习之旅:pytesseract文字识别实战指南 [引用日期2026-10-14]
  13. 小猪的Python学习之旅 —— 13.文字识别库pytesseract初体验 [引用日期2026-10-14]
  14. micropyramid.com 上的网页 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:4 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T21:29:33Z

历史版本

本条目引用的词条
Tesseract 光学字符识别 Python Pillow OpenCV