
tesseract 在识别整行数字时表现良好,但对单个数字图像常返回空结果;根本原因在于默认页面分割模式(psm 3)不适用于孤立字符,需手动指定更匹配的 psm(如 7、8、10 或 13)并配合字符白名单提升准确率。
tesseract 在识别整行数字时表现良好,但对单个数字图像常返回空结果;根本原因在于默认页面分割模式(psm 3)不适用于孤立字符,需手动指定更匹配的 psm(如 7、8、10 或 13)并配合字符白名单提升准确率。
Tesseract 的页面分割模式(Page Segmentation Mode, --psm)直接影响 OCR 引擎如何理解图像结构。默认 --psm 3(全自动分割,无 OSD)专为常规文档设计,会尝试检测段落、行、词等层级结构——而单个数字图像缺乏上下文和布局特征,导致引擎“找不到文本区域”,最终跳过识别或返回空字符串。
针对单字符(尤其是数字)图像,推荐以下 PSM 值:
- --psm 7:将整张图视为单行文本,适合居中、清晰的单字/单数;
- --psm 8:将整张图视为单个单词,对紧凑型数字(如无边距的 4、7)鲁棒性更强;
- --psm 10:明确指定为单个字符,是处理孤立数字最精准的模式;
- --psm 13:以“原始行”方式处理,绕过 Tesseract 内部的启发式修正,适合高对比度、无噪声的简单图像。
同时,务必启用字符白名单以约束输出范围,避免误识干扰(如将 1 识别为 l 或 I):
custom_config = r'--oem 3 --psm 10 -c tessedit_char_whitelist=0123456789' text = pytesseract.image_to_string(image, lang='eng', config=custom_config).strip()
✅ 最佳实践建议:
- 无需强制缩放图像(实测原图尺寸即可工作),过度放大可能引入插值噪声;
- 避免使用 --psm 0/1/2(依赖方向检测)或 4–6(假设多行/多列结构);
- 若图像 DPI 未显式设置,Tesseract 可能警告 “Invalid resolution 0 dpi” —— 可通过 img.info['dpi'] = (300, 300) 预设,或忽略该警告(70 dpi 默认值通常足够);
- 对批量处理场景,可先用 psm=10 主流程,失败时降级尝试 psm=7 或 psm=8,兼顾速度与容错。
综上,解决单数字 OCR 失败的关键不是调参或预处理,而是正确选择语义匹配的 PSM 模式。结合白名单约束与简洁配置,Tesseract 完全可稳定、高精度地识别单个数字图像。

















