Python PyTesseract OCR :从基础到项目实战


一、前言:为什么选择 PyTesseract?

在 OCR(Optical Character Recognition)领域,主流方案包括:

  • 商业类:Google Vision OCR、百度 OCR、阿里云 OCR、腾讯云 OCR
  • 自建类:PaddleOCR、EasyOCR、Tesseract OCR

其中 Tesseract OCR 是 Google 维护的开源文字识别引擎,免费、稳定、支持 100+ 种语言,广泛用于:

  • 票据文字抽取
  • 批量扫描 PDF 转文字
  • 水平、竖排文本识别
  • 简单车牌识别
  • 仪表盘读数
  • 快递单/发票预处理 OCR
  • 工业读码(非二维码类)

PyTesseract 是 Tesseract 的 Python 封装层,使 Python 程序员能更方便地调用 OCR。

本文章将从安装、基础使用、图像预处理、OCR 提升技巧、常用 API,到最终提供一个 真实可运行的 OCR 项目完整工程代码,让你从入门到能做项目。


二、环境安装(Windows / Linux / Mac)

PyTesseract 不是 OCR 引擎本体 ,它只是 Python 的 wrapper。

你必须安装 Tesseract-OCR 主程序


1. Windows 安装

下载安装包(官方推荐 UB Mannheim 版本):

复制代码
https://github.com/UB-Mannheim/tesseract/wiki

安装后记住安装路径,例如:

复制代码
C:\Program Files\Tesseract-OCR\tesseract.exe

2. macOS 安装

bash 复制代码
brew install tesseract

3. Linux / Ubuntu

bash 复制代码
sudo apt install tesseract-ocr
sudo apt install libtesseract-dev

安装中文语言包(可选):

bash 复制代码
sudo apt install tesseract-ocr-chi-sim

4. Python 安装 PyTesseract

bash 复制代码
pip install pytesseract
pip install opencv-python
pip install pillow

三、PyTesseract 基础使用

OCR 两个核心步骤:

  1. 加载图像
  2. 调用 Tesseract 识别

最简单示例:

python 复制代码
import pytesseract
from PIL import Image

img = Image.open("test.png")
text = pytesseract.image_to_string(img, lang="chi_sim")
print(text)

如果是 Windows,需要指定 tesseract 路径:

python 复制代码
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

四、OCR 效果差?图像预处理非常关键

实际商业项目中,原图直接 OCR 的效果往往很差

必须配合预处理:

常见操作:

预处理方法 效果
灰度化 去除颜色干扰
二值化 增强对比
去噪 减少 OCR 错误
膨胀 / 腐蚀 处理断笔与黏连
自适应阈值 适合光照不均
倾斜矫正 文档拍歪解决
边缘增强 提升模糊文本可读性

我们使用 OpenCV + PyTesseract 组合,效果远优于单独 OCR。


五、OCR 常用模式与配置

Tesseract 有两个关键参数:

1. PSM(Page Segmentation Mode)页面分割模式

常用:

模式
6 单行文本(最常用)
7 单一文本行
11 稀疏文本(票据、表格)
3 全自动页面分析

示例:

python 复制代码
text = pytesseract.image_to_string(img, config='--psm 6')

2. OEM(引擎模式)

模式
3 默认模式(最佳)
1 LSTM 神经网络模式

3. 综合配置

python 复制代码
config = "--oem 3 --psm 6 -c tessedit_char_blacklist=()"
text = pytesseract.image_to_string(img, config=config, lang="chi_sim")

六、强力 OCR 预处理工具:OpenCV 整合 PyTesseract(项目常用)

下面是 OCR 项目真正会用的预处理流程。


步骤 1:读图与灰度化

python 复制代码
import cv2

img = cv2.imread("test.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

步骤 2:二值化(推荐 OTSU)

python 复制代码
import cv2

_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

步骤 3:中值滤波去噪

python 复制代码
denoise = cv2.medianBlur(thresh, 3)

步骤 4:OCR

python 复制代码
from PIL import Image
import pytesseract

text = pytesseract.image_to_string(Image.fromarray(denoise), lang="chi_sim", config="--psm 6")
print(text)

七、项目实战:识别一张票据 / 仪表文本(完整可运行代码)

下面给你一个企业级常用的 OCR 识别 pipeline,包括:

  • 图像自动裁剪
  • 去噪
  • 增强
  • 文字识别
  • 后处理(正则清洗)
  • 输出结构化数据

适合于:

  • 发票 / 小票
  • 仪表读数
  • 单据文字抽取
  • 工业检测数据记录
  • 设备状态监测(配合你 Jetson 项目也能用)

📌 完整项目代码(可直接运行)

python 复制代码
import cv2
import numpy as np
import pytesseract
from PIL import Image
import re

# Windows 用户需加上路径
# pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# -------- 1. 读入图像 --------
img = cv2.imread("invoice.jpg")

# -------- 2. 灰度化 --------
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# -------- 3. 自适应阈值(二值化)--------
thresh = cv2.adaptiveThreshold(
    gray, 255,
    cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
    cv2.THRESH_BINARY,
    35, 11
)

# -------- 4. 形态学操作去噪 --------
kernel = np.ones((2, 2), np.uint8)
open_img = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)

# -------- 5. 倾斜矫正(适合拍照的发票)--------
coords = np.column_stack(np.where(open_img > 0))
angle = cv2.minAreaRect(coords)[-1]

if angle < -45:
    angle = -(90 + angle)
else:
    angle = -angle

(h, w) = open_img.shape[:2]
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(open_img, M, (w, h), flags=cv2.INTER_CUBIC)

# -------- 6. OCR --------
config = "-l chi_sim --oem 3 --psm 6"
text = pytesseract.image_to_string(rotated, config=config)

# -------- 7. 文本后处理:使用正则抽取关键字段 --------
amount = re.findall(r"金额[:: ]?([\d\.]+)", text)
date = re.findall(r"日期[:: ]?(\d{4}-\d{2}-\d{2})", text)

print("识别文本:\n", text)
print("金额:", amount)
print("日期:", date)

# -------- 8. 保存中间结果,便于调试 --------
cv2.imwrite("gray.jpg", gray)
cv2.imwrite("thresh.jpg", thresh)
cv2.imwrite("rotated.jpg", rotated)

八、高级 OCR 技巧(工程级提升 OCR 准确率)

1. 指定字符白名单 / 黑名单

python 复制代码
config = "-c tessedit_char_whitelist=0123456789 --psm 7"

适用于:

  • 仪表盘读数
  • 数字金额
  • 设备屏显

2. 识别表格

python 复制代码
config = "--psm 11"

Tesseract 会识别稀疏文本,非常适合票据、账单。


3. 自动分割文本区域(ROI)

OCR 最佳实践:

不要整张图识别,应只识别特定区域(ROI)

例如检测"金额"位置的区域后再 OCR,准确率高 30%+。


4. 多语言识别

python 复制代码
lang = "eng+chi_sim+num"

九、PyTesseract 的局限与替代方案

PyTesseract 属于经典 OCR,适合简单的:

  • 票据
  • 扫描件
  • 批量 PDF
  • 简单文本图像
  • 数字仪表盘

但不适合:

  • 弯曲文字
  • 手写文字
  • 复杂背景
  • 噪声极多的图像
  • 表格结构化识别
  • 深度学习场景

这些可以用:

  • PaddleOCR
  • EasyOCR
  • TrOCR(Deep Learning)

但 Tesseract 的优势永远是:

轻量、高速、跨平台、无依赖、可离线部署


十、总结:PyTesseract 的位置与价值

PyTesseract 是一个 超稳定、跨平台、免费、离线可用的 OCR 方案

它最大的价值是:

  • 快速验证 OCR 方案
  • 适合中小型离线项目
  • 在仪表读数、票据 OCR、表单数字识别中仍大量使用
  • 与 OpenCV 组合后可以做到极强的精度

相关推荐
二川bro2 小时前
第57节:Three.js企业级应用架构
开发语言·javascript·架构
sali-tec2 小时前
C# 基于halcon的视觉工作流-章62 点云采样
开发语言·图像处理·人工智能·算法·计算机视觉
没有bug.的程序员2 小时前
Java 字节码:看懂 JVM 的“机器语言“
java·jvm·python·spring·微服务
这人很懒没留下什么3 小时前
SpringBoot2.7.4整合Oauth2
开发语言·lua
ZHOUZAIHUI3 小时前
WSL(Ubuntu24.04) 安装PostgreSQL
开发语言·后端·scala
欧阳x天3 小时前
C++入门(二)
开发语言·c++
CappuccinoRose3 小时前
MATLAB学习文档(二十八)
开发语言·学习·算法·matlab
爱敲代码的loopy3 小时前
MATLAB函数全称解析:旋转翻转找数字
开发语言·matlab
下午见。4 小时前
Python基础入门:用Anaconda搭建环境的启蒙之旅
python