【译】如何使用Vue捕获网络摄像头视频

几个月前,我一直关注着比特币的爆发并且在GDAX网站上注册账号。在注册验证的过程中,网站提示要通过计算机的网络摄像头提交我自己的一张照片作为照片ID。这是一个很酷的做法,让我思考一个问题:在网络浏览器上集成网络摄像头使用需要怎么做?

事实上,有一些HTML5的API可用于通过JavaScript与网络摄像头进行交互。

下面,我们来看下如何创建一个VueJS的Web应用,在Web浏览器上通过网络摄像头直接捕获。

使用Vue CLI创建Vue项目

为了使项目更易于的理解,我们将从头开始搭建项目。为方便起见,我们使用Vue CLI脚手架来构建项目。(安装Vue CLI 详见官网)

安装好CLI之后,执行以下命令:

vue init webpack camera-project

在脚手架处理的过程中会提示一些问题。对于这个特别的项目,如果你选择了包含编译器和运行时或只有运行时,都无关重要。我们不会创建多个组件,所以路由对于这个项目不是必要的。

此时,我们可以开始开发应用了。

为图像捕获编写应用逻辑和接口

对于这个特定的项目,我们有一些目标。我们希望能够把网络摄像头流传输到UI并且按需捕获帧。下面是一张我们所希望实现的功能的截图。

每次我们捕获一张图片,将会加到下面小的列表中。如果有需要,我们可以通过HTTP API将捕获图片发送到数据库。
所以,我们要怎么实现这些项目的目标?

打开项目的src/App.vue文件,加入以下内容开始:

<template>
    <div id="app">
    </div>
</template>

<script>
    export default {
        name: 'app',
        data() {
            return {
                video: {},
                canvas: {},
                captures: []
            }
        },
        mounted() { },
        methods: { }
    }
</script>

<style>
    body: {
        background-color: #F0F0F0;
    }
    #app {
        text-align: center;
        color: #2c3e50;
        margin-top: 60px;
    }
    #video {
        background-color: #000000;
    }
    #canvas {
        display: none;
    }
    li {
        display: inline;
        padding: 5px;
    }
</style>

该template块暂时先保留为空。相反,我们先看看script标签部分的内容。
我们需要初始化一些用于UI的变量,这可以通过data方法完成。video变量将绑定到一个video元素,canvas变量将绑定到一个canvas元素,而captures数组则用于存储已捕获的图像列表。

mouted方法将会在应用加载完使触发调用。此方法内容如下:

mounted() {
    this.video = this.$refs.video;
    if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
        navigator.mediaDevices.getUserMedia({ video: true }).then(stream => {
            this.video.src = window.URL.createObjectURL(stream);
            this.video.play();
        });
    }
},

我们需要和UI中的HTML元素进行交互,可以使用Vue.js的refs,而不是试图直接访问DOM。你将会很快看到,但HTML元素将会有ref属性,值为video。

一旦我们获取了元素的引用,就可以检测来确保该值是否支持媒体捕获。如果支持媒体捕获,我们将可以从网络摄像头获取流并把流加载到HTML Video元素中。

事实上,以上代码的灵感来自David Walsh的教程,使用HTML5控制摄像头和视频,我只是用refs和Vue改写了。

下面来到我们的methods中,将会有一个capture方法,代码如下:

methods: {
    capture() {
        this.canvas = this.$refs.canvas;
        var context = this.canvas.getContext("2d").drawImage(this.video, 0, 0, 640, 480);
        this.captures.push(canvas.toDataURL("image/png"));
    }
}

同样地,我们将refs用于HTML元素,一旦我们获得了canvas元素的引用,就可以获得Video元素的图像,将其转换成一张图片,并且放到captures数组中。

那么,与JavaScript逻辑对应的HTML是怎么样的?
在项目的src/App.vue文件中,我们来看下template块的内容:

<template>
    <div id="app">
        <div><video ref="video" id="video" width="640" height="480" autoplay></video></div>
        <div><button id="snap" v-on:click="capture()">Snap Photo</button></div>
        <canvas ref="canvas" id="canvas" width="640" height="480"></canvas>
        <ul>
            <li v-for="c in captures">
                <img v-bind:src="c" height="50" />
            </li>
        </ul>
    </div>
</template>

还记得之前提到过的refs吗?这就是分配的地方

<div>
    <video ref="video" id="video" width="640" height="480" autoplay></video>
</div>

video标签有ref="video",同样canvas标签也类似。

当按钮按下时,该capture方法会调用。captures变量循环遍历,每张图片渲染到屏幕上。
还可以,对吧?

结论

刚刚了解了如何使用Vue.js Web应用程序中的Web浏览器从Web摄像头捕获图像。大多数繁重的工作都是通过HTML5 JavaScript API完成的,但Vue.js使得事情变得非常简单。
在这篇特定的文章中使用了一些重要的Vue.js概念。refHTML元素的属性允许我们从JavaScript访问它们。通过v-bind:src在标签上使用,我们能够显示我们捕获的图像。

原文链接

https://x-team.com/blog/webcam-capture-vue/

Review

以上是简单翻译的一篇文件,主要是使用HTML5API与摄像头进行交互,本篇文件内容相对简单,只是大概了解到摄像头捕获图像转成图片的功能。目前在Web开发场景,一般会使用到拍照上传等功能,对于视频人脸识别等场景也会有用到,所以搜到这篇文章做了大概了解。

原文地址:https://www.cnblogs.com/GeniusLyzh/p/10589938.html

时间: 2024-07-31 09:14:52

【译】如何使用Vue捕获网络摄像头视频的相关文章

Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). 回顾:Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上) 连接网络摄像头 正如上文所提,我们选用一款简单的D-Link DCS-7010L网络摄像头.关键原因在于它支持RTSP协议,因此服务

Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)

本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). 从技术上来讲,使用网络摄像头进行在线广播并不需要WebRTC.摄像头本身就是一台服务器,它能够连接到路由器并在线传输视频内容.那么,为什么我们还需要WebRTC呢? 这至少有两方面原因: 1.随着观看网络广播的观众越来越多,网络带宽会逐渐不足.如果

基于opencv网络摄像头在ubuntu下的视频获取

 基于opencv网络摄像头在ubuntu下的视频获取 1  工具 原料 平台 :UBUNTU12.04 安装库  Opencv-2.3 2  安装编译运行步骤 安装编译opencv-2.3  参考http://blog.csdn.net/xiabodan/article/details/23547847 3  测试代码 编译 g++ cameraCaptrue.cpp -o test `pkg-config --libs --cflags opencv` cameraCaptrue.cpp

在Windows IoT上使用网络摄像头

在树莓派上可以使用它官方标配的摄像头,但是这个摄像头似乎不能被Windows IoT识别和使用.但是,可以在树莓派的USB口上插入任意型号的摄像头,就可以实现树莓派的拍摄功能. 关于摄像头的寻找和拍摄,我将其封装成一个类,如下: public class WebCamHelper { public MediaCapture mediaCapture; private bool initialized = false; /// <summary> /// 异步初始化网络摄像头 /// </

在 HTML5 中捕获音频和视频

简介 长久以来,音频/视频捕获都是网络开发中的"圣杯".多年来,我们总是依赖于浏览器插件(Flash 或 Silverlight)实现这一点.快来看看吧! 现在轮到 HTML5 大显身手了.也许看起来不是很显眼,但是 HTML5 的崛起引发了对设备硬件访问的激增.地理位置 (GPS).Orientation API(加速计).WebGL(GPU) 和 Web Audio API(视频硬件)都是很好的例子.这些功能非常强大,展示了基于系统底层硬件功能之上的高级 JavaScript AP

Ip camera(网络摄像头)

1 Ip camera简介 Ip camera是一款使用普通摄像头进行网络视频传输的软件.整个系统分为Ip camera客户端和Ip camera server服务器端.系统支持两种方式的视频传输,一种是在局域网内(或有固定公网IP)Ip camera把视频传输到有固定IP的Ip camera server机器上:另一种是注册用户后,Ip camera通过Internet把视频传输Ip camera server机器上. 2 软件下载 Ip camera 1.2 Ip camera server

(转)摄像头视频采集压缩及传输

引言:摄像头基本的功能还是视频传输,那么它是依靠怎样的原理来实现的呢?所谓视频传输:    就是将图片一张张传到屏幕,由于传输速度很快,所以可以让大家看到连续动态的画面,就像放电影一样.一般当画面的传输数量达到每秒24帧时,画面就有了连续性.下边我们将介绍摄像头视频采集压缩及传输的整个过程.一.摄像头的工作原理(获取视频数据)摄像头的工作原理大致为:景物通过镜头(LENS)生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(

OpenCV 之 网络摄像头

 1  RTSP RTSP (Real Time Streaming Protocol),是一种语法和操作类似 HTTP 协议,专门用于音频和视频的应用层协议. 和 HTTP 类似,RTSP 也使用 URL 地址. 海康网络摄像头的 RTSP URL 格式如下: rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream1) username 用户名,常用 admin 2) password 密码,

OMCS ——卓尔不群的网络语音视频框架

作为.NET平台上的开发人员,要开发出一个像样视频聊天系统或视频会议系统,非常艰难,这不仅仅是因为.NET对多媒体的支持比较有限,还因为网络语音视频这块涉及到了很多专业方面的技术,而.NET在这些方面的沉淀更是稀少.OMCS的出现将使得这一状况完全改观,它把所有底层的.复杂的.繁琐的细节都封装在了内部,提供给您一个易用而又强大的接口. OMCS网络语音视频框架是集成了语音.视频.远程桌面.电子白板等多种媒体于一身的网络多媒体框架,实现了多媒体设备[麦克风.摄像头.桌面.电子白板]的采集.编码.网