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

如何提升Tesseract.js文本识别性能?数字识别准确率低如何优化

Tesseract数字验证码识别准确率提升方法

你当前待识别的验证码如下:
待识别数字验证码

从图像预处理、参数调整、后处理三个层面优化即可解决你当前遇到的字符混淆问题:

1. 优先做验证码图像预处理

Tesseract对无干扰、高对比度的文本识别准确率更高,你使用的验证码存在浅灰色干扰线,直接识别很容易出现字符混淆,预处理可按以下步骤操作:

  • 转灰度图后做二值化处理,拉大数字与背景的对比度,清除浅灰色干扰线
  • 裁剪掉验证码外围的空白边框,只保留4位数字所在的核心区域
  • 用形态学腐蚀膨胀操作清除残留的细小噪点,保证数字笔画连贯无断裂

2. 调整Tesseract识别参数

你当前只配置了字符白名单,缺少适配验证码场景的关键参数,优化后的代码如下:

let img = 'public/captchaImg.png';

await worker.load();
await worker.loadLanguage('eng');
await worker.initialize('eng');
await worker.setParameters({
  tessedit_char_whitelist: '0123456789',
  // 新增:设置页面分割模式为7,告知Tesseract整张图为单行文本
  tessedit_pageseg_mode: 7,
  // 新增:关闭多余的空格检测
  preserve_interword_spaces: 0
});

const {
  data: { text },
} = await worker.recognize(img);

// 新增后处理:过滤换行、空格等非数字字符,只保留4位数字
const result = text.replace(/\D/g, '').slice(0,4);
console.log(result);

await worker.terminate();

3. 补充后处理规则校正

针对当前识别出现的8→0、7→2的混淆问题,可以结合该验证码的字体特征加简单的规则校正:

  • 若识别出的第一个字符是8,可判断字符中间是否存在空白像素,符合特征则校正为0
  • 若识别出的最后一个字符是7,判断字符下部是否存在弧度,符合特征则校正为2

如果需要处理的同类型验证码数量较大,还可以标注少量样本训练专属的tessdata字库,准确率会比通用eng字库高90%以上。


内容的提问来源于stack exchange,提问作者Jeon Do Hae

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:18:02