C#中Tesseract 4设置黑白名单无效果的技术求助
Tesseract LSTM模式下黑白名单无效的解决方案
你遇到的问题核心在于LSTM引擎使用的黑白名单变量名与传统引擎不同,旧的tessedit_char_*系列变量仅对传统Tesseract引擎生效,而你使用的是EngineMode.LstmOnly,需要替换为LSTM专属的变量。
解决步骤
替换变量名
将原代码中的黑白名单变量替换为LSTM模式对应的名称:- 黑名单:
lstm_choice_blacklist - 白名单:
lstm_choice_whitelist
- 黑名单:
确保变量生效
部分版本的Tesseract需要在设置变量后重新初始化引擎,调用tesseract.Init()确保配置生效。可选:调整页面分割模式
如果PageSegMode.Auto导致识别逻辑异常,可以尝试更具体的分割模式(如PageSegMode.SingleLine),让Tesseract更聚焦于目标文本区域。
修改后的代码
private TesseractEngine tesseract = new TesseractEngine(path, "eng", EngineMode.LstmOnly); // 使用LSTM模式专属的黑白名单变量 tesseract.SetVariable("lstm_choice_blacklist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); tesseract.SetVariable("lstm_choice_whitelist", "123"); // 重新初始化引擎确保变量生效 tesseract.Init(); using (var page = tesseract.Process(image, rec, PageSegMode.Auto)) { text = page.GetText(); // 此时应仅输出"123" using (var iterator = page.GetIterator()) { iterator.Begin(); do { string symbol = iterator.GetText(PageIteratorLevel.Symbol); } while (iterator.Next(PageIteratorLevel.Symbol)); } }
额外排查点
- 确认Tesseract版本:必须使用4.1及以上版本,该版本才修复了LSTM模式下黑白名单的支持问题。
- 图像预处理:如果图像存在噪声、模糊或倾斜,先进行二值化、去噪、矫正等预处理,能提升黑白名单的过滤效果。
- 训练数据检查:若使用自定义训练模型,需确保模型支持黑白名单过滤逻辑。
内容的提问来源于stack exchange,提问作者MR.ROBOT
相关产品推荐
相关产品推荐

