在使用 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)