v2-83497475c39c6a4c5135c94d614b7507_1440w.jpg?source=172ae18b

在做条形码识别的时候,有可能碰到条形码因为被破坏,无法识别的情况。通常1D条形码的下面都印着对应的数字。这个时候还可以借助下OCR。虽然OCR的成功率可能不高,但是多一种识别方法也是好的。这里分享下如何用Tesseract.js来识别一张1D条形码。

如何使用Tesseract.js

使用npm的命令安装Tesseract.js:

npm install tesseract.js

获取示例代码:

https://github.com/naptha/tesseract.js/tree/master/examples

简单的运行下这些示例代码会发现第一次运行速度很慢,原因是需要下载语言包。要加快速度可以参考https://github.com/jeromewu/tesseract.js-offline的示例代码,指定语言包的路径。

Node

const path = require('path');
 
const worker = createWorker({
  langPath: path.join(__dirname, '..', 'lang-data'), 
  logger: m => console.log(m),
});
 
(async () => {
  await worker.load();
  await worker.loadLanguage('eng');
  await worker.initialize('eng');
  const { data: { text } } = await worker.recognize('image-path'));
  console.log(text);
  await worker.terminate();
})();

Web

<script src="../node_modules/tesseract.js/dist/tesseract.min.js"></script>
<script>
  const { createWorker } = Tesseract;
  const worker = createWorker({
    workerPath: '../node_modules/tesseract.js/dist/worker.min.js',
    langPath: '../lang-data',
    corePath: '../node_modules/tesseract.js-core/tesseract-core.wasm.js',
    logger: m => console.log(m),
  });
 
  (async () => {
    await worker.load();
    await worker.loadLanguage('eng');
    await worker.initialize('eng');
    const { data: { text } } = await worker.recognize('image-path');
    console.log(text);
    await worker.terminate();
  })();
</script>

这是我的测试图片

v2-8ad6beabb2cafbccbd0a3b35cb109bfe_b.jpg

现在设置好文件名,然后运行程序,会得到这样的结果:

(IMTANMUEARRMAD
3 1383 09602 2010

显然,下面的数字是我想要的。如果希望结果只有数字,可以设置一个字符白名单:

await worker.setParameters({
    tessedit_char_whitelist: '0123456789',
  })

重新运行下,结果有些不一样了:

101011191 1 1 1111  111  11 1   41 111  1  11  11 111 11 1 11
31383096022010

我不清楚上面这一窜的数字是怎么回事,猜想可能和语言包有关。打开语言包的仓库https://github.com/naptha/tessdata。下载一个最佳训练集的eng.traineddata.gz试试。再运行程序,发现结果正常了:

31383096022010

这个实验发现,Tesseract.js在做纯文字识别的时候,效果挺好的。但是条形码的图,在识别的时候效率比较低,会把条形码当成文字来识别。

源码

https://github.com/yushulx/javascript-barcode-ocr

GitHub 加速计划 / te / tesseract
31
3
下载
tesseract-ocr/tesseract: 是一个开源的光学字符识别(OCR)引擎,适用于从图像中提取和识别文本。特点是可以识别多种语言,具有较高的识别准确率,并且支持命令行和API调用。
最近提交(Master分支:22 小时前 )
014b9d00 - 8 个月前
13c966b7 - 8 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐