You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在PyTesseract脚本运行过程中切换配置适配不同识别场景?

PyTesseract动态切换配置实现多场景OCR的解决思路

你的需求完全可实现,PyTesseract的配置参数为单次调用生效,不需要全局修改,每次调用识别接口时传入对应配置即可实现动态切换。


1. 预定义两套适配不同场景的OCR配置

# 普通词典关键词配置:保留原有逻辑,开启词典匹配保证常规词识别准确率
CONFIG_NORMAL = '--psm 11'
CONFIG_NORMAL_BLUR = '--psm 6'

# 字母数字组合非词典字段配置:关闭词典匹配、限制识别字符范围,避免随机串被纠错为词典词
CONFIG_ALPHANUM = '--psm 11 --oem 3 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 -c load_system_dawg=0 -c load_freq_dawg=0'
CONFIG_ALPHANUM_BLUR = '--psm 6 --oem 3 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 -c load_system_dawg=0 -c load_freq_dawg=0'

其中字符白名单可根据你实际的文档名规则调整,比如添加小写字母、特殊符号等


2. 新增关键词类型判断逻辑

两种实现方案可选:

  • 自动判断:根据业务规则写判断函数,自动归类关键词类型,示例如下:
def is_alphanum_keyword(keyword):
    # 自定义判断规则示例:同时包含字母和数字,长度在6-10位
    has_letter = any(c.isalpha() for c in str(keyword))
    has_digit = any(c.isdigit() for c in str(keyword))
    return has_letter and has_digit and 5 < len(str(keyword)) < 11
  • 手动指定:给OCRscreen函数新增可选参数is_alphanum:bool = False,调用时如果是识别文档号就传True,精度更高不会出现误判。

3. 改造原有OCR调用逻辑

把原有硬编码的config参数替换为动态选择的配置变量即可,核心改造点如下:

# 识别前先判断当前关键词对应的配置
if is_alphanum_keyword(keyword):
    cur_config = CONFIG_ALPHANUM
    cur_config_blur = CONFIG_ALPHANUM_BLUR
else:
    cur_config = CONFIG_NORMAL
    cur_config_blur = CONFIG_NORMAL_BLUR

# 非模糊识别时传入动态配置
results = pytesseract.image_to_data(Image.open(tempFile), lang='eng', config=cur_config, output_type=Output.DICT)

# 模糊识别时传入动态配置
results_Blur = pytesseract.image_to_data(Image.open(tempFile_Blur), lang='eng', config=cur_config_blur, output_type=Output.DICT)

额外优化建议

  • 修复现有代码的坐标获取bug:当前代码如果关键词是在模糊识别的results_Blur中命中的,后续遍历只取了非模糊的results,会找不到坐标直接退出,需要把两个结果合并后再遍历
  • 无需写临时文件到磁盘:pytesseract支持直接传入opencv的图像对象,跳过读写磁盘步骤可提升识别速度
  • 可根据业务需求调整判断规则:如果你的文档号是固定格式,比如「2位大写字母+6位数字」,可以写正则匹配做判断,准确率更高

内容的提问来源于stack exchange,提问作者MontX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:54:05