在 chrome 中使用条形码检测 API 不一致

Using Barcode Detection API in chrome is inconsistent

提问人:sayar 提问时间:11/11/2023 最后编辑:sayar 更新时间:11/11/2023 访问量:52

问:

我正在尝试为我的 Web 应用程序使用相机实现条码扫描器。 它应该主要检测包含某些 ID 的 Code 39 条形码。我正在使用 asp.net 核心 razor 页面来构建我的 Web 应用。 在 chrome android 中使用条形码检测 Api 和如下所示的代码,我能够毫无问题地读取条形码。

<!DOCTYPE html>
<html>

<head>
    <style>
        video {
            width: 100%;
        }
    </style>
</head>

<body>
    <video></video>
    <script>
        const videoElement = document.querySelector('video');

        function scan(detector) {
            detector.detect(videoElement)
                .then(console.log)
                .catch(console.error);
        }

        navigator.mediaDevices.getUserMedia({
            audio: false,
            video: {
                facingMode: "environment",
                zoom: 200
            }
        }).then((stream) => {
            videoElement.srcObject = stream;
            videoElement.play();
            let detector = new BarcodeDetector({ formats: ['code_39'] });
            setInterval(scan, 300, detector);
        }, console.error)
    </script>
</body>

</html>

但是在另一部手机上进行测试,它无法检测到任何条形码。可能是什么问题?

我手机的 chrome 版本是 104,另一部手机是 110。这两款手机都支持所有必要的 API,例如条形码检测 API 以及媒体捕获和流 API。

考虑到问题可能出在条形码检测器上,我使用了其他库,例如:

但仍然没有得到任何结果。

还认为相机质量以某种方式导致了问题,我使用条形码生成器生成条形码并使用了图像,但它仍然没有检测到任何东西。

我还尝试使用网络工作者进行解码,以防主线程繁忙,最后,没有区别。

使用scandit条码扫描器或dynamsoft条码扫描器,我能够完美地检测条码。 在其他设备上测试后,有些设备检测没有问题,而另一些设备则没有检测到任何东西。我不知道这种不一致行为的原因是什么。

你认为可能是什么原因?您有什么解决方案建议?

JavaScript Google-Chrome 条形码

评论

0赞 Jaromanda X 11/11/2023
是否存在问题,或者您报告的是特定设备的问题?
0赞 sayar 11/11/2023
我有一个问题。我试图解决任何我认为可能导致我的问题,但似乎没有任何效果。
0赞 Jaromanda X 11/11/2023
该代码适用于一台未命名的 Chrome,该设备比当前低 9 个版本 - 并且不适用于另一台未命名的设备,Chrome 比当前低 15 个版本......因此,要么在未命名的设备 2 上更新 Chrome,要么未命名设备 2 的摄像头非常糟糕,我们都不能告诉您,您必须实际测试
0赞 Jaromanda X 11/11/2023
^^^ 我可能误解了哪部手机有效,哪些手机无效......
0赞 sayar 11/11/2023
我只在四台设备上测试了我的代码,其中两台没有问题,但另外两台要么解码条形码的速度非常慢(长达几分钟),要么根本没有检测到任何东西。我添加了 chrome 版本部分,因为我认为版本 110 中可能存在我不知道的错误。尽管如果 BarcodeDetector 有任何问题,其他库不应该工作,但他们确实工作。

答: 暂无答案