Tesseract.js (JavaScript OCR) 识别1D条形码下面的数字

假装没事ソ 提交于 2020-02-27 01:03:38

在做条形码识别的时候,有可能碰到条形码因为被破坏,无法识别的情况。通常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>

这是我的测试图片

在这里插入图片描述

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

(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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!