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 文件。

更新时间:2026-09-14 20:38:26
上一篇:Python 批量图片转 base64:内嵌图片到 HTML/CSS 教程