JavaScript条码扫描器概述

最近,有一个想法可以节省仓库中的TSD,并尝试使用普通的廉价手机(即使没有防尘保护)。 我计划以Web应用程序(常规网页,HTML + CSS + JS)的形式实现该接口。

为了使一切正常,您需要教网页通过手机的相机扫描条形码。 从相机获取数据非常简单。 主要工作是帧处理。 在一只猫的陪伴下,对现有的交钥匙解决方案和很多图片进行了回顾。



quaggaJS


参考文献:


在搜索结果中-这是第一个选项。 图片库中配备了条形码搜索算法。 支持一维条形码:EAN,CODE 128,CODE 39,EAN 8,UPC-A,UPC-C,I2of5、2of5,CODE 93,CODABAR。 支持通过NPM或Bower安装。 库接口由一个包含7个方法的Quagga对象组成,一切都很简单。

项目网站上有一个页面 ,您可以在其中下载示例并尝试使用该库。 我们尝试1号样品。 需要指定一些设置,好的,没问题。


作为发射的结果,不可能确定条形码,但是条形码的位置被很好地确定。

我们尝试2号样品。 不知何故的无奈。



我们正在尝试更改设置-放入“补丁大小”->“大”。 不行 通过设置“分辨率(长边)= 800px”可以得出正确的结果。 但是,实际上最大的一面是640像素。



也许它与高分辨率图像配合使用效果更好。 好,我们制作了第三个样本(样本编号3)。



老实说,我不知道条形码是什么类型,并尝试了所有设置-尚未确定总部。 好的,让我们尝试另一个高分辨率示例(示例4):



由于某些原因,使用任何设置都无法获得结果。

让我们尝试以下库中的“干净”样本(样本5):



这个被认可了。

javascript-条形码阅读器


参考文献:


这是本期的第二个图书馆。 已知格式:Code128(UCC / EAN-128),Code93,Code39,标准/工业2 of 5,交错2 of 5,Codabar,EAN-13。 它支持通过NPM安装,或者您可以像这样简单地连接它:

<script src="//unpkg.com/javascript-barcode-reader/dist/javascript-barcode-reader.min.js"></script> 

或者,您可以只下载一个文件:大小为10 445字节的javascript-barcode-reader.min.js

该项目有一个带有示例的页面 ,但是图片是通过生成代码获得的,而不是从相机获得的。 这对我们不起作用。

测试库的代码
条码扫描
 <html> <head> <meta http-equiv="content-language" content="ru" /> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <script src="//unpkg.com/javascript-barcode-reader/dist/javascript-barcode-reader.min.js"></script> <script type="text/javascript" src="barcode-scan.js"></script> </head> <body onload='onLoadPage()'> <img id="img1" src="scan02.png" /> </body> </html> 

条码扫描

 function onLoadPage() { Image = document.getElementById('img1'); javascriptBarcodeReader( Image /* Image ID || HTML5 Image || HTML5 Canvas || HTML5 Canvas ImageData || Image URL */, { barcode: 'EAN-13', // 'Code-39' type: 'industrial', //    "Code-2of5",   "industrial"  "Interleaved" } ) .then(code => { console.log(code) }) .catch(err => { console.log(err) }); } 



1号样品 该库将输出到控制台“错误:提取条形码失败!”。
2号样品 该库将输出到控制台“错误:提取条形码失败!”。
样品编号3。 该库将输出到控制台“错误:提取条形码失败!”。
样品编号4。 该库向控制台发出“ 601”。

嗯...库可能未正确连接? 让我们尝试以下示例:



5号样品 磁带库向控制台发出“ 10023”。 好酷

Dynamsoft条码读取器


项目现场
该库的核心是用WebAssembly(WASM)编写的,并且仅使用JavaScript包装器编写,这并不是那么有趣。 知道格式:

1D:Code 39,Code 93,Code 128,Codabar,EAN-8,EAN-13,UPC-A,UPC-E,交错2之5(ITF),工业2之5(5之Code 2行业,标准2) 5,规则2之5),ITF-14;

2D:PDF417,QR码,DataMatrix,Aztec。

这是一个付费图书馆,可通过订阅获得,所有类型的条形码每年的费用为2199美元 ,如果仅是一维代码,则费用将降至每年1099美元 。 有一个用于实验的page1page2

1号样品 是的 答案是正确的。 该区域非常清楚地圈了圈。



2号样品 是的 答案再次是正确的。 该区域也非常清楚地圈出。



样品编号3。 现在我们知道了该条形码的类型。



样品编号4。 答案也是正确的。



而且,显然,您可以这样:



但是,第一个样本被识别为错误。 然后像这样再次尝试( 原始图像非常模糊 ):



现在我们知道至少有一个工作图书馆,尽管有偿图书馆。

tobytailor get_barcode_from_image.js


参考文献:


一个简单的小图书馆。 仅知道一种条形码格式:UPC。 如果首先将零添加到此类型的代码,则得到EAN-13。

我们尝试第一个示例:



结果:000204892734。模式被识别。

取出2号样品(EAN-13)。 为了工作,您需要这样编写脚本的第32行:

 ctx.drawImage(img, 0, 0, width, height); //  : ctx.drawImage(img, 0, 0); 

结果:XXXXXXXXXXXXX。 样品无法识别。

采取以下措施:



结果:XXXXXXXXXXXXX。 无法识别。

让我们尝试一些简单的事情:



结果:无法识别。 也许他需要的服务方式是,除了条形码之外,图片上除了多余的空间外什么都没有。



结果:022334545453。

还有另一个EAN-13:



部分认可。

EddieLa条码读取器


Github
另一个免费的库,作者对此有一点吸引力:
如果您喜欢和/或将此项目用于商业目的,请考虑捐赠以支持我的工作。

如果您喜欢和/或将此项目用于商业目的,请考虑捐赠以支持我的工作。
已知格式:Code128,Code93,Code39,标准/工业2 of 5,交错2 of 5,Codabar和EAN-13。 有一个实验页面

1号样品 范围和类型已正确定义。 代码被识别为错误。



2号样品 好结果 正确识别:条形码的区域,类型和条形码本身。



样品编号3。 负面的。 她无法做到这一点。



样品编号4。 很好,模式认可。



5号样品 模式已识别。



好吧,值得称赞。 该库的最新更改发生在3年前。

WebCodeCamJS


参考文献:


免费库(MIT许可证)。 知道以下类型的一维条形码:代码128,代码93,代码39,Codabar,EAN-13。 能够识别QR码。 在项目页面上,有机会尝试该库。

样品编号1:不被识别。



样品编号2:正确识别。



3号样品:无法识别。
4号样品:无法识别。
5号样品:正确识别。



识别QR码的功能似乎很有趣,因此我收集了6个样本来测试此库和后续库:



样品编号1:没有。
2号样本:没事。
示例3:什么都没有。
样本4:一无所有。
5号样本:没事。
6号样品:已识别。



网络QR


项目页面
免费图书馆。 宣布QR码的生成和识别。 在项目页面上,有机会尝试该库。

六个样品均未被识别。 页面上有一个QR码生成器,在这里可以识别使用此生成器获得的代码。



UPD 在一起,在注释中(由于TiesP ), 可以确定该算法是否有效,只是不知道如何确定代码的方向。 考虑到这一点,新结果如下:
1号样品-无法识别。
2号样品-无法识别。
3号样品-无法识别。
4号样品-无法识别。
5号样品-已识别。
6号样品-已识别。


显然,背景仍然有一些限制,因为我的示例和评论中提供的示例都是在纸上确定的:


总结


这就是我找到的全部。 基于上述之一找到了几种实现,例如this 。 我重复一次,主要搜索标准是所有工作应在客户端通过浏览器执行,而无需任何其他安装。 也就是说,该解决方案必须以JavaScript和/或Wasm实现(因此ZBar不适用)。

如果您知道满足这些要求的库并且不在本文中,请告知。

生成的库评分如下:



感谢在线照明商店Devine Light撰写了这篇文章。

Source: https://habr.com/ru/post/zh-CN442770/


All Articles