Tesseract配置参数详解及适用场景(PyTesseract进行OCR)

发布于:2025-06-07 ⋅ 阅读:(23) ⋅ 点赞:(0)

在使用 PyTesseract 进行 OCR 时,合理配置参数是提高识别准确率的关键。以下是 Tesseract 常用参数的详细解释和适用场景。

一、关键参数

(1)页面分割模式(Page Segmentation Mode, --psm)

控制 Tesseract 如何分析图像中的文本布局,对单行文本、多列文本、表格等不同场景有不同优化。

参数值 描述 适用场景
0 仅定向和脚本检测 用于分析文本方向和语言脚本(如中文、英文)
1 自动分页 处理包含多页内容的图像(如扫描书籍)
2 自动分页,但不进行 OCR 仅分析页面布局,不识别文本
3 全自动分页,无需 OCR 默认模式,适用于常规文档
4 假设为单列文本 处理报纸、杂志等多列文本
5 假设为垂直排列的文本 处理竖排文字(如古籍、日语竖排)
6 假设为单行文本 处理单行较长的文本(如标题)
7 视为单个文本行 短文本、验证码、标语
8 视为单个单词 孤立单词、品牌名、验证码(无空格)
9 视为单个单词在圆圈中 圆形排列的文字(如标志)
10 视为单个字符 单个字母或数字(如车牌字符)
11 稀疏文本 分散在图像中的文本(如水印、标签)
12 稀疏文本,先进行 OSD 稀疏文本且需要自动检测方向
13 原始行 忽略布局,按行处理(适用于不规则文本)

验证码场景推荐:psm 7(单行文本)或 psm 8(单个单词)。

(2)OCR 引擎模式(OCR Engine Mode, --oem)

控制使用的 OCR 引擎类型。

参数值 描述 适用场景
0 仅使用传统 Tesseract 引擎 旧版本兼容性,对简单文本可能更快
1 仅使用 LSTM 引擎 推荐模式,识别准确率更高,支持更多语言
2 同时使用两种引擎 综合两种引擎结果,可能更准确但更慢
3 默认,自动选择 通常选择 LSTM 引擎(推荐)

推荐配置:–oem 3(自动选择 LSTM)。

(3)字符白名单(tessedit_char_whitelist)

限制 Tesseract 只识别指定字符,大幅提高特定场景的准确率。

# 仅识别数字
config = r'-c tessedit_char_whitelist=0123456789'

# 识别数字和小写字母
config = r'-c tessedit_char_whitelist=0123456789abcdefghijklmnopqrstuvwxyz'

适用场景:

  • 验证码(已知字符集)
  • 车牌识别(如 ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789)
  • 特定领域文本(如仅含数字的发票金额)

(4)语言参数(-l)

指定识别语言,需安装相应语言包。

# 英文
text = pytesseract.image_to_string(image, lang='eng')

# 简体中文
text = pytesseract.image_to_string(image, lang='chi_sim')

# 中英文混合
text = pytesseract.image_to_string(image, lang='eng+chi_sim')

安装语言包:

  • Windows:通过 Tesseract 安装程序勾选语言包
  • Linux:sudo apt-get install tesseract-ocr-(如 tesseract-ocr-chi-sim)

(5)其他常用参数

参数 描述 示例
tessedit_pageseg_mode --psm 等效,用于配置文件 -c tessedit_pageseg_mode=8
preserve_interword_spaces 保留单词间空格(默认为0) -c preserve_interword_spaces=1
textord_min_linesize 最小文本行高(像素) -c textord_min_linesize=20
tessedit_char_blacklist 黑名单字符(不识别的字符) -c tessedit_char_blacklist=!@#$%^&*()

二、组合参数示例

(1)验证码识别

# 配置:LSTM引擎,视为单个单词,仅识别数字和小写字母
config = r'--oem 3 --psm 8 -c tessedit_char_whitelist=0123456789abcdefghijklmnopqrstuvwxyz'
text = pytesseract.image_to_string(image, config=config)

(2)单行文本(如车牌)

# 配置:单行文本,仅识别大写字母和数字
config = r'--oem 3 --psm 7 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
text = pytesseract.image_to_string(image, config=config)

(3)多列文本(如报纸)

# 配置:自动检测多列布局
config = r'--oem 3 --psm 4'
text = pytesseract.image_to_string(image, config=config)

(4)竖排中文文本

# 配置:垂直排列文本,中文识别
config = r'--oem 3 --psm 5 -l chi_sim'
text = pytesseract.image_to_string(image, config=config)