如何正确设置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
相关产品推荐
相关产品推荐

