首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >quaggaJS:如何“暂停”解码器

quaggaJS:如何“暂停”解码器
EN

Stack Overflow用户
提问于 2017-04-18 15:23:55
回答 2查看 3K关注 0票数 9

我使用quaggaJS (https://github.com/serratus/quaggaJS)来读取web应用程序中的条形码。它工作得很好,这是我的初始化代码:

代码语言:javascript
复制
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事件:

代码语言:javascript
复制
Quagga.onDetected(function (data) {
    Quagga.stop();  // <-- I want to "pause"
    // dialog to ask the user to accept or reject
});

那是什么意思?当它识别一个条形码时,我需要询问用户他是否想接受或拒绝解码的值-因此重复这个过程。

这样他就能真正看到他刚刚捕捉到的东西了。

Quagga.stop()在大多数情况下都能工作,但不可靠,因为有时画布会变黑。我想这是由于stop()方法的行为所致:

解码器不再处理任何图像。此外,如果初始化时请求了相机流,则此操作也会断开摄像机的连接.

由于这个原因,我正在寻找一种方式暂停解码,所以最后一帧仍然在那里,相机还没有断开。

有什么建议如何做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2020-05-11 10:09:46

一种更好的方法是首先暂停视频,然后调用Quagga.stop(),这样Quagga为您创建的视频元素就会暂停,您就不会看到昏暗的图像。此外,还可以使用重新启动/重新扫描按钮来恢复扫描过程,或者更确切地说,重新启动扫描过程。

要获得视图元素,可以执行如下操作:

代码语言:javascript
复制
    Quagga.onDetected(function (result) {
        var cameraFeed = document.getElementById("cameraFeedContainer")
        cameraFeed.getElementsByTagName("video")[0].pause();
        return;
    });
票数 1
EN

Stack Overflow用户

发布于 2020-01-24 12:29:46

您可以通过Quagga.canvas.dom.image获得图像帧。这样,你就可以覆盖视频流了。

代码语言:javascript
复制
<div class="scanArea">
    <div id="interactive" class="viewport"></div>
    <div class="scanArea__freezedFrame"></div>
</div>

CSS

代码语言:javascript
复制
.scanArea {
    position: relative;
}
.scanArea__freezedFrame {
    position: absolute;
    left: 0;
    top: 0;
}

JavaScript

代码语言:javascript
复制
Quagga.onDetected(function(result) {
    var canvas = Quagga.canvas.dom.image;
    var $img = $('<img/>');
    $img.attr("src", canvas.toDataURL());
    $('.scanArea__freezedFrame').html($img);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43476213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档