web浏览器端识别条形码

最近做需求的时候遇到一个场景需要在浏览器端调用摄像头实现前端识别条形码,于是搜刮了一番,找了一下相关的资料整理如下

chrome自带的条形码识别

Chrome 57 之后的版本实现了一批图形图像识别的API,Shape Detection API 相关的信息如下

实际操作


在实际操作之前,我们需要先在 Chrome 浏览器中打开实验性功能chrome://flags页面,然后搜索 Experimental web Platform features 功能并启用(Enabled)即可。注意这里启用功能之后需要重新启动 Google Chrome 之后才能生效。然后我们可以用下面命令在 Console 中检测功能是否正常

window.FaceDetector
window.BarcodeDetector
window.TextDetector

实际的使用可以见一下链接

条码识别(BarcodeDetector)示例如下

    const barcodeDetector = new BarcodeDetector();
    const imageSource = document.querySelector('img');
 
    barcodeDetector.detect(imageSource)
    .then(handleDetectedBarcodes)
    .catch(console.error);

此API总结:

实际上移动端的APP使用的更多的识别条形码的库是zxing,这个库也是谷歌的,所以我个人推测chrome的条形码识别的API底层也许是用这个库,这个库的API有个缺点就是不能识别斜着的条形码。摄像头的视图需要和条形码视图保持平行.如果他们两个有一定夹角,那么是识别不出条形码的内容的。

下面介绍一下另外一个条形码识别的库

quaggajs

这个库是专门识别条形码的。官网链接如下https://serratus.github.io/quaggaJS/ 打开官网就会看到相关的示例,这里不做过多的描述,下面放一个实际示例 

web浏览器端识别条形码 第1张

可以看到他的识别准确率是很高的

这里重点介绍一下相关参数的调节

打开在线链接https://serratus.github.io/quaggaJS/examples/livewlocator.html 会有以下几个参数可以根据实际需要调节

Barcode-Type

条形码的类型,实际上条形码有很多种类型,每种类型的编码规则不一样,这里根据你的需要设置

Resolution 分辨率,Patch-Size 条形码尺寸

这两个参数是互相影响的,根据实际的摄像头分辨率和你的条形码尺寸来自己调节,以达到最好的识别效果, ex:我的高拍仪设置的参数是:1600px 和small的时候识别率最高

Workers

在识别条形码的过程中调用的workers数量。默认4个,使用4个感觉已经很快了。

现代计算机的CPU中有多个物理处理器内核(通常为两个或四个内核),但每个物理内核通常也能够使用高级调度技术一次运行多个线程。因此,例如,四核CPU可能提供八个逻辑处理器内核。逻辑处理器内核的数量可用于测量可以一次有效运行的线程数量,而无需进行上下文切换

navigator.hardwareConcurrency //获取能实际调用的内核数量

Half-Sample

可以根据实际场景确定是否需要开启

温馨提示

实际测试的时候建议不要手持条形码测试,因为手绘抖动,影响摄像头的识别。建议把条形码放在高拍仪下面或者静止的物体上。 这样能提高识别率

web浏览器端识别条形码 第2张

本文标题:web浏览器端识别条形码
本文链接:https://56way.com/p/114.html
作者授权:除特别说明外,本文由 无路 原创编译并授权 小无路 刊载发布。
版权声明:本文使用「署名-非商业性使用 4.0 国际」创作共享协议,转载或使用请遵守署名协议。

已有2位网友发表了看法:

1L访客 2018-06-20 19:32:54 回复
啦啦啦啦
2L访客 2018-06-20 19:32:59 回复
嘎嘎嘎嘎

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。