我使用quaggaJS (https://github.com/serratus/quaggaJS)来读取web应用程序中的条形码。它工作得很好,这是我的初始化代码:
Quagga.init({
inputStream: {
name: "Live",
type: "LiveStream",
constraints: {
width: 1280,
height: 720,
facingMode: "environment"
}
},
decoder: {
readers: ["code_39_reader"],
debug: {
drawBoundingBox: true,
showFrequency: false,
drawScanline: true,
showPattern: true
},
multiple: false
},
locator: {
halfSample: true,
patchSize: "medium"
}
}, function (err) {
if (err) {
alert(err);
return;
}
Quagga.registerResultCollector(resultCollector);
Quagga.start();
});在这里,处理onDetected事件:
Quagga.onDetected(function (data) {
Quagga.stop(); // <-- I want to "pause"
// dialog to ask the user to accept or reject
});那是什么意思?当它识别一个条形码时,我需要询问用户他是否想接受或拒绝解码的值-因此重复这个过程。
这样他就能真正看到他刚刚捕捉到的东西了。
Quagga.stop()在大多数情况下都能工作,但不可靠,因为有时画布会变黑。我想这是由于stop()方法的行为所致:
解码器不再处理任何图像。此外,如果初始化时请求了相机流,则此操作也会断开摄像机的连接.
由于这个原因,我正在寻找一种方式暂停解码,所以最后一帧仍然在那里,相机还没有断开。
有什么建议如何做到这一点吗?
发布于 2020-05-11 10:09:46
一种更好的方法是首先暂停视频,然后调用Quagga.stop(),这样Quagga为您创建的视频元素就会暂停,您就不会看到昏暗的图像。此外,还可以使用重新启动/重新扫描按钮来恢复扫描过程,或者更确切地说,重新启动扫描过程。
要获得视图元素,可以执行如下操作:
Quagga.onDetected(function (result) {
var cameraFeed = document.getElementById("cameraFeedContainer")
cameraFeed.getElementsByTagName("video")[0].pause();
return;
});发布于 2020-01-24 12:29:46
您可以通过Quagga.canvas.dom.image获得图像帧。这样,你就可以覆盖视频流了。
<div class="scanArea">
<div id="interactive" class="viewport"></div>
<div class="scanArea__freezedFrame"></div>
</div>CSS
.scanArea {
position: relative;
}
.scanArea__freezedFrame {
position: absolute;
left: 0;
top: 0;
}JavaScript
Quagga.onDetected(function(result) {
var canvas = Quagga.canvas.dom.image;
var $img = $('<img/>');
$img.attr("src", canvas.toDataURL());
$('.scanArea__freezedFrame').html($img);
});https://stackoverflow.com/questions/43476213
复制相似问题