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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐