Python开发中基于pytesseract配置Tesseract仅使用自定义词典识别的实现咨询
Tesseract 基于自定义词典的Python调用实现方案
快速轻量方案(无需重新训练,运行时配置约束)
- 操作前置要求:确认Tesseract安装目录下
tessdata文件夹的完整路径,和你当前代码里配置的tesseract_cmd路径保持一致 - 第一步:准备自定义词表
新建纯文本文件,每行写入一个允许识别的自定义词汇,不要留空行,保存到固定路径,比如C:\tess_my_words.txt。注意词表内不要出现你不希望被识别的词汇。 - 第二步:配置Tesseract运行参数
在pytesseract调用image_to_string时,直接通过config参数传入自定义词表路径,同时配置字符白名单,缩小识别范围:
该方案的效果:Tesseract会将自定义词的匹配权重提至最高,但内置语言自带的大词典仍会参与识别评分,无法100%杜绝非自定义词的识别结果,适合对约束要求不极端严格的快速场景。text = tess.image_to_string( img, lang='fra+eng', config='--user-words "C:\\tess_my_words.txt" --tessedit_char_whitelist "你自定义词覆盖的全部字符"' )
完全锁死自定义词方案(修改训练/词典文件,彻底禁用内置词典)
如果需要实现仅识别自定义词典内词汇、完全排除内置词典干扰的效果,需要通过替换词典文件+关闭内置词典加载的方式实现,步骤如下:
- 第一步:生成专属自定义词典Dawg文件
用Tesseract安装目录下自带的wordlist2dawg工具,将你准备好的自定义词表编译为Tesseract可识别的Dawg格式词典文件,替代原本语言包内置的大词典。生成的文件需要存放到tessdata目录下,命名格式和现有语言包词典保持一致。 - 第二步:关闭内置词典加载开关
在调用参数中加入两个核心配置,强制Tesseract不加载系统自带的大词典文件:--load_system_dawg F --load_freq_dawg F - 第三步:对应代码修改示例
原有ocr函数的核心调用部分修改为:def ocr(img): cv2.imwrite('image.png', img) img = cv2.medianBlur(img, 1) img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, \ cv2.THRESH_BINARY, 31, 20) cv2.imshow('frames', img) # 纯自定义词典识别配置 text = tess.image_to_string( img, lang='fra+eng', config='--tessdata-dir "C:\\Users\\Utilisateur\\AppData\\Local\\Programs\\Tesseract-OCR\\tessdata" --load_system_dawg F --load_freq_dawg F --user-words "C:\\tessdata\\my_custom_words.dawg"' ) print(text)
注意事项
- 配置里的所有文件路径必须用双反斜杠转义,不要用单反斜杠,否则会出现路径识别错误
- 字符白名单的范围必须完全覆盖自定义词表里的所有字符,否则会出现字符识别遗漏
- 不要在Tesseract的configs目录下新建带.txt后缀的配置文件,Tesseract默认不会识别带后缀的配置项
- 你之前代码中尝试的
config='bazaar'配置属于Tesseract旧版本的内置示例配置,当前新版本不会默认加载该配置文件,因此设置后不会产生预期效果
内容的提问来源于stack exchange,提问作者Lounis
相关产品推荐
相关产品推荐

