【问题标题】:quaggaJS: how to "pause" the decoderquaggaJS:如何“暂停”解码器
【发布时间】:2017-09-14 12:44:54
【问题描述】:

我正在使用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() 方法的行为:

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

出于这个原因,我正在寻找一种方法来暂停解码,因此最后一帧仍然存在并且相机尚未断开连接。

有什么建议可以实现吗?

【问题讨论】:

    标签: javascript quaggajs


    【解决方案1】:

    更好的方法是先暂停视频,然后调用 Quagga.stop(),这样 Quagga 为您创建的视频元素将被暂停并且您不会看到被涂黑的图像。此外,您还可以使用重新启动/重新扫描按钮来恢复或重新启动扫描过程。

    要获取视图元素,您可以执行以下操作:

        Quagga.onDetected(function (result) {
            var cameraFeed = document.getElementById("cameraFeedContainer")
            cameraFeed.getElementsByTagName("video")[0].pause();
            return;
        });
    

    【讨论】:

      【解决方案2】:

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

      HTML

      <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);
      });
      

      【讨论】:

        猜你喜欢
        • 2014-01-27
        • 2021-01-31
        • 1970-01-01
        • 1970-01-01
        • 2011-09-26
        • 2017-04-09
        • 2021-07-09
        • 2021-08-10
        • 1970-01-01
        相关资源
        最近更新 更多