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

如何正确设置Tesseract.js的PSM以识别图片中的单个数字?

Tesseract数字识别准确率优化及PSM配置问题

我一直在用Tesseract识别格式为最大99,999.9的各类数字:

  • 正常识别示例:清晰的带千分位逗号和小数位的数字(如12,345.6样式)
  • 识别失败示例:数字存在模糊、边缘残缺或背景干扰,导致识别结果偏差

目前识别准确率约80%,但需要达到95%的准确率。

我的代码如下:

async function runOCR(url) {
    const worker = await Tesseract.createWorker('eng', 1, {
        tessedit_pageseg_mode: 13,
        config: '--psm 13'
    });

    (async () => {
        await worker.load();
        await worker.loadLanguage('eng');
        await worker.initialize('eng');    
        
        await worker.setParameters({
            tessedit_ocr_engine_mode: Tesseract.OEM_TESSERACT_ONLY,
            tessedit_char_whitelist: '0123456789,.',
            preserve_interword_spaces: '0',
            SINGLE_WORD: true,
            tessedit_pageseg_mode: Tesseract.SINGLE_WORD,
        });
        const {
            data: { text },
        } = await worker.recognize(url);
        doSomething(text);
        await worker.terminate();
    })();
}

核心问题是我不知道该在何处正确设置Page Segmentation Mode(PSM),找到的示例要么过时,要么是其他语言版本。当前的配置更改似乎对识别准确率没有任何影响。

以下是我从C文件中找到的PSM选项列表(已翻译为中文):

PSM_OSD_ONLY,       ///< 仅进行方向和脚本检测。
PSM_AUTO_OSD,       ///< 自动页面分割,同时进行方向和脚本检测。(OSD)
PSM_AUTO_ONLY,      ///< 自动页面分割,但不进行OSD或OCR。
PSM_AUTO,           ///< 完全自动页面分割,但不进行OSD。
PSM_SINGLE_COLUMN,  ///< 假设文本为单列,字号可变。
PSM_SINGLE_BLOCK_VERT_TEXT,  ///< 假设文本为单个统一块,垂直对齐。
PSM_SINGLE_BLOCK,   ///< 假设文本为单个统一块。(默认值)
PSM_SINGLE_LINE,    ///< 将图像视为单行文本。
PSM_SINGLE_WORD,    ///< 将图像视为单个单词。
PSM_CIRCLE_WORD,    ///< 将图像视为圆形中的单个单词。
PSM_SINGLE_CHAR,    ///< 将图像视为单个字符。
PSM_SPARSE_TEXT,    ///< 尽可能多地查找文本,无特定顺序。
PSM_SPARSE_TEXT_OSD,  ///< 稀疏文本检测,同时进行方向和脚本检测。
PSM_RAW_LINE,       ///< 将图像视为单行文本,绕过Tesseract特定的处理逻辑。

请问如何优化这类数字的识别准确率?或者说,如何正确设置PSM及相关配置?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:30:32