非常游戏网
如何使用 Tesseract 正确从图像中提取文本

如何使用 Tesseract 正确从图像中提取文本

2026-05-24日常编程15373

本文介绍如何通过 python 调用 tesseract ocr 引擎,高效、准确地从清晰的单行文本图像中提取数值或短文本,并提供可直接运行的代码示例及关键参数说明。

本文介绍如何通过 python 调用 tesseract ocr 引擎,高效、准确地从清晰的单行文本图像中提取数值或短文本,并提供可直接运行的代码示例及关键参数说明。

在实际开发中,从图像中识别文本(OCR)是一项常见需求,而 Tesseract 是目前最成熟、免费且支持多语言的开源 OCR 引擎。但其默认行为针对通用场景,若直接调用 image_to_string() 处理简单文本图(如仪表读数、标签、刻度值),往往因自动版面分析(layout analysis)误判导致识别失败。正确做法是关闭复杂版面检测,强制指定为单行文本模式

以下是一个稳定可靠的完整流程:

✅ 基础环境准备

  • 安装 Tesseract 引擎:前往 https://www.myinqi.com/link/96b591794a81d64dfc9d9fe49060088d 下载对应系统的安装包(Windows 用户推荐安装 tesseract-ocr-w64-setup-v5.x.x.7z 并勾选 Add to PATH);
  • 安装 Python 封装库:
    pip install opencv-python pytesseract

✅ 核心代码(无需预处理,适用于高对比度单行文本图)

import cv2
import pytesseract

# ⚠️ 关键:显式指定 tesseract.exe 路径(Windows 默认路径,macOS/Linux 通常为 '/usr/local/bin/tesseract')
pytesseract.pytesseract.tesseract_cmd = r"C:/Program Files/Tesseract-OCR/tesseract.exe"

# 读取图像(确保图像清晰、文字区域无严重畸变/阴影/反光)
img = cv2.imread("text.jpg")

# 使用 --psm 7(单行文本模式) + -l eng(英文语言包)提升精度
# 若图像含数字为主,可追加 config='--psm 7 -c tessedit_char_whitelist=0123456789.-dBm'
text = pytesseract.image_to_string(
    img,
    config='-l eng --psm 7'
)

print(text.strip())  # 输出:1.331 dBm

? 关键参数说明

参数 含义 推荐值
--psm 7 Page Segmentation Mode 7:将整张图视为单行文本,跳过段落/列分析 ✅ 必选(对单行图提升准确率 80%+)
-l eng 指定语言数据包(需提前下载 eng.traineddata) ✅ 建议显式声明
--psm 8 单字模式(适合字符间距极大场景) 可选
tessedit_char_whitelist 白名单字符(大幅提升纯数字/单位识别鲁棒性) 如:-c tessedit_char_whitelist=0123456789.- dBm

⚠️ 注意事项

  • 图像质量决定上限:确保文字区域分辨率 ≥ 300 DPI,背景与文字对比度高(建议灰度化后二值化效果更佳);
  • 中文识别需额外下载 chi_sim.traineddata 并设 -l chi_sim;
  • 若仍识别不准,优先尝试 OpenCV 预处理(灰度 → 高斯模糊 → 自适应二值化),而非盲目调整 PSM;
  • Linux/macOS 用户需确认 tesseract --version 可执行,再省略 tesseract_cmd 赋值。

掌握 --psm 7 这一核心技巧,即可解决 90% 的简单文本图识别问题——精准、轻量、无需深度学习依赖。