[Python] 使用 Tesseract 实现 OCR 文字识别全流程指南

在图像处理、文档数字化、发票识别等场景中,OCR(Optical Character Recognition,光学字符识别)技术应用广泛。而在 Python 中,借助开源工具 Tesseract,我们可以快速构建强大的文字识别系统。

本文将手把手带你了解如何使用 Python 与 Tesseract 配合进行 OCR 文字识别,从环境搭建、基本使用、识别优化,到多语言支持与图像预处理策略,全面覆盖开发所需知识点。


一、什么是 Tesseract?

Tesseract 是由 Google 维护的开源 OCR 引擎,具备如下特点:

  • 支持 100 多种语言

  • 支持垂直文本、右到左文字(如阿拉伯文、日文)

  • 可训练自定义字体模型

  • 在多种平台上表现优秀(Windows/Linux/Mac)

它本身是一个命令行工具,但通过 Python 的 pytesseract 包,我们可以非常方便地调用它。


二、环境准备

1. 安装 Tesseract

Windows
  1. 前往 https://github.com/UB-Mannheim/tesseract/wiki 下载对应版本

  2. 安装后记下安装路径(如:C:\Program Files\Tesseract-OCR\tesseract.exe

macOS
复制代码
brew install tesseract
Linux (Debian/Ubuntu)
复制代码
sudo apt update
sudo apt install tesseract-ocr

2. 安装 Python 依赖

复制代码
pip install pytesseract pillow opencv-python

三、基本识别示例

以下是一个最基础的图像文字识别示例:

复制代码
from PIL import Image
import pytesseract

# Windows 特别注意路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

img = Image.open('example.png')
text = pytesseract.image_to_string(img, lang='eng')

print(text)

如果是 Linux/macOS 系统,可以省略 tesseract_cmd 设置。


四、支持中文 OCR

默认的 Tesseract 安装中可能未包含中文支持。你需要额外安装语言包:

复制代码
# Ubuntu 系统
sudo apt install tesseract-ocr-chi-sim

# Windows 可通过官网下载 chi_sim.traineddata 文件放入 tessdata 目录

识别中文示例:

复制代码
text = pytesseract.image_to_string(img, lang='chi_sim')

五、图像预处理优化识别效果

OCR 的识别效果很大程度依赖于图像质量,下面是常见预处理方法:

复制代码
import cv2

# 加载图像
img = cv2.imread('example.png')

# 转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化处理
_, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)

# 去噪(可选)
blur = cv2.medianBlur(thresh, 3)

# OCR 识别
text = pytesseract.image_to_string(blur, lang='chi_sim')
print(text)

六、识别区域与数据提取

有时候我们不需要整张图的文字,而是某个区域或字段(如身份证号码、发票编号)。

使用裁剪识别

复制代码
box = (100, 200, 400, 250)  # x1, y1, x2, y2
cropped = img.crop(box)
text = pytesseract.image_to_string(cropped, lang='eng')

获取位置信息

复制代码
data = pytesseract.image_to_data(img, lang='eng', output_type=pytesseract.Output.DICT)
for i in range(len(data['text'])):
    if int(data['conf'][i]) > 60:  # 置信度过滤
        print(f"Word: {data['text'][i]}, Pos: ({data['left'][i]}, {data['top'][i]})")

七、常见问题与优化建议

问题 原因 解决方案
识别结果乱码 字体不清晰 / 语言包缺失 安装正确语言包,增强对比度
中文识别效果差 图像质量不高 灰度+二值化预处理
边框或水印干扰识别 噪声过多 尝试裁剪目标区域

八、进阶:批量识别、PDF、表格结构识别

批量识别文件夹图片

复制代码
import os

for file in os.listdir('images'):
    img_path = os.path.join('images', file)
    text = pytesseract.image_to_string(Image.open(img_path), lang='eng')
    print(f'{file}:\n{text}\n')

PDF OCR(需安装 pdf2image

复制代码
pip install pdf2image
sudo apt install poppler-utils  # Linux

from pdf2image import convert_from_path

pages = convert_from_path('document.pdf')
for i, page in enumerate(pages):
    text = pytesseract.image_to_string(page, lang='chi_sim')
    print(f'Page {i+1}:\n{text}\n')

总结

通过 Python + Tesseract,我们可以构建出灵活、可扩展的 OCR 系统。掌握图像预处理、语言包配置、区域提取等技巧,将显著提升识别精度与实用性。

如果你在 Tesseract 使用中遇到实际问题,欢迎评论区交流或私信讨论。

相关推荐
aidou13149 小时前
Kotlin中自定义RadioGroup实现多个RadioButton自动换行
android·开发语言·kotlin·shape·radiobutton·selector·radiogroup
小短腿的代码世界9 小时前
Qt Firebase集成深度解析:移动与嵌入式云后端解决方案
开发语言·qt
AI人工智能+9 小时前
往来港澳通行证识别系统,深度融合计算机视觉与自然语言处理,为“智慧口岸”和“数字政务”提供了强有力的技术支撑
人工智能·深度学习·ocr·往来港澳通行证识别
cici158749 小时前
基于Matlab的数字全息相位展开及再现实现
开发语言·matlab
AC赳赳老秦9 小时前
OpenClaw + 华为云自动化:批量管理云资源、生成月度云账单分析与成本优化报告
java·开发语言·javascript·人工智能·python·mysql·openclaw
极光代码工作室9 小时前
基于数据分析的电影票房预测系统
大数据·python·数据分析·spark·数据可视化
Irissgwe9 小时前
C++ STL 详解:list 的介绍使用与模拟实现
开发语言·c++·stl·list
huangdong_9 小时前
拼多多商品图片采集技术深度解析:webp格式转换、SKU图自动分类与懒加载处理
开发语言·经验分享
我能坚持多久9 小时前
C++继承详解
开发语言·c++
qq_2518364579 小时前
基于java Web 哈尔滨文化活动网站毕业论文
java·开发语言·前端