我的知识记录

Python OCR 识别图片文字:pytesseract 中文识别教程

用 Python pytesseract + Pillow 识别图片里的中英文文字,支持截图、扫描件、发票文字提取,讲清 Tesseract 引擎安装和中文语言包配置,附完整代码。

场景痛点

领导甩过来一张截图、一份扫描版 PDF、一张拍歪的发票,让你把里面的文字整理成 Word。手动照着打,一张图几百字几分钟就没了,还容易看错数字。用 Python 跑一遍 OCR,图片里的中英文直接转成文本存成 txt,准确率在清晰截图上能到 95% 以上,批量处理一整个文件夹都行。

用到的库

pip install pytesseract Pillow

另外 Tesseract 是独立的 OCR 引擎,Python 库只是调它,必须先装引擎: - Windows:去 GitHub 下载 tesseract-windows 安装包,装完把安装目录加到系统 PATH,或者在代码里指定 pytesseract.pytesseract.tesseract_cmd。 - Mac:brew install tesseract tesseract-lang。 - Linux:sudo apt install tesseract-ocr tesseract-ocr-chi-sim

完整代码

import os
from PIL import Image
import pytesseract

# Windows 下如果没加 PATH,手动指定 tesseract.exe 路径
# pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

SRC_EXTS = (".jpg", ".jpeg", ".png", ".bmp", ".tiff")


def ocr_image(img_path, lang="chi_sim+eng"):
"""识别单张图片里的文字,lang=中文简体+英文"""
img = Image.open(img_path)
# 先转灰度,识别率更高
if img.mode != "L":
img = img.convert("L")
text = pytesseract.image_to_string(img, lang=lang)
return text.strip()


def batch_ocr(src_dir, dst_txt):
"""批量识别目录下所有图片,结果追加到一个 txt"""
with open(dst_txt, "w", encoding="utf-8") as f:
for root, _, files in os.walk(src_dir):
for name in sorted(files):
if not name.lower().endswith(SRC_EXTS):
continue
path = os.path.join(root, name)
print(f"正在识别:{path}")
try:
text = ocr_image(path)
except Exception as e:
text = f"[识别失败:{e}]"
f.write(f"===== {path} =====\n")
f.write(text)
f.write("\n\n")
print(f"全部完成,结果已写入 {dst_txt}")


def main():
batch_ocr("./screenshots", "./ocr_result.txt")


if __name__ == "__main__":
main()

代码讲解

  • pytesseract 是 Tesseract 引擎的 Python 包装,真正干活的是系统里装的 tesseract 程序,光 pip install 不够。
  • lang="chi_sim+eng" 表示同时加载简体中文和英文语言包,混合识别。只识别纯英文就用 lang="eng",速度更快。
  • 识别前 convert("L") 把图片转灰度,去掉颜色干扰,Tesseract 对灰度图识别率更高。
  • image_to_string 直接返回识别后的整段文本,换行保留,适合截图、扫描件这种排版简单的图。
  • 批量结果写到一个 txt,每张图前面加分隔线和原路径,方便对照。

运行结果

把要识别的截图、扫描件放进 ./screenshots,运行脚本后控制台逐张打印进度,最后生成 ./ocr_result.txt,里面按图片顺序列出每张图识别出的文字。打开 txt 检查一遍,明显错的地方手动改。

注意事项

  • 中文识别必须装 chi_sim 语言包,Windows 安装包里勾选 "Chinese - Simplified",Mac/Linux 装 tesseract-ocr-chi-sim
  • 识别准确率高度依赖图片质量:模糊、倾斜、背景杂乱、字体太小都会让结果变差。真要提高准确率,先 Pillow 二值化、放大 2 倍再识别。
  • 发票、表格这种有结构的图,OCR 出来的文本会丢排版,需要结构化数据建议用 image_to_data 取每个词的坐标。
  • 手写体 Tesseract 基本认不出来,别浪费时间。
  • Windows 控制台打印中文可能乱码,不影响写进 txt 文件。

Python OCR 识别图片文字:pytesseract 中文识别教程

标签:

更新时间:2026-09-14 20:38:26

上一篇:Python 批量图片转 base64:内嵌图片到 HTML/CSS 教程

下一篇:Python 获取当前时间日期并格式化:datetime 常用示例