使用NodeJS访问WebCam

有没有人有尝试通过节点访问摄像头的任何经验? 我似乎无法find任何此前的尝试。

扩大一点 – 我有一个nodeJS服务器运行,我想能够访问同一个盒子上的摄像头节点正在运行(真的,我更多地使用节点作为客户端实现)。 我想做的一些事情 – 从networking摄像头获取图像,或者,如果我可以获取networking摄像头的stream,并将其传输到另一个服务器并stream向其他客户端,则会非常棒;)

有谁知道这可以做到吗?

谢谢

对于使用networking摄像机,我不认为有任何特定的Node.js,无论您使用什么语言或服务器,概念都是一样的。 所涉及的硬件和硬件的接口是应该定义您的解决scheme的。

最简单的情况是提供通过networking摄像头包含的软件定期保存到磁盘的单个快照,或者您可以进行系统调用 ,调用本地进程或程序以按需保存快照。 然后,您可以使用Node.js来定期刷新最新的快照。

或者,您可以使用针对操作系统( DirectShow , Windows Image Acquisition , IKPictureTaker , V4L2等)定制的控制器直接与networking摄像头硬件进行连接 ,并使用Node.js作为传输机制创build实时videostream 。

如果您的摄像头具有networking接口并已提供stream媒体服务器,则可以使用nginx或Apache来查看反向代理解决scheme。 这里是一个解决scheme ,其中nginx被用来代理由VLC格式化的networking摄像头stream。

这是一个创造性的解决scheme,通过采用单独的帧,编码图像数据以及使用websockets将图像数据推送到客户端页面上的canvas元素来捕获videostream ,使用Node.js作为中间服务器。

我还没有深入,但你可以使用Python来做到这一点与OpenCV。

然后你可以使用node-python从Node调用python。

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html

https://www.npmjs.com/package/node-python

或者,如果一切都在Windows上运行,您可以使用.Net和C#与摄像机对话,然后使用edge.js进行.Net调用。

Edge.Js现在通过Mono支持linux,你只需要运行一个Linux发行版,它可以提供单声道软件包,或者自己构build单声道。

有可能使用OpenCV和Node来访问你的相机…本文将给你一个基本的概述。 https://community.risingstack.com/opencv-tutorial-computer-vision-with-node-js/

另一种方法是在npm存储库上通过摄像头进行search,你会发现很多处理networking摄像头的模块。

在节点应用程序访问networking是非常简单的,我们只需要使用html5 getUserMedia()方法来做到这一点,扩展部分是很容易的这里是完整的代码请节点我使用快速框架:

第1步。我正在访问networking摄像头的我的layout.jade文件

extends layout block content div(class="container" id="Cool" ng-app="mainApp" ng-controller="formController") h2.blue.red#header("property"="pValue") Capture your image from webcam div.row div.col-md-6 video#video(autoplay='') div.col-md-6 canvas#canvas(width='640', height='480') div button#snap Capture button#new New button(id="upload" ng-click="uploadImage()") Upload script(type="text/javascript"). // Put event listeners into place window.addEventListener("DOMContentLoaded", function() { // Grab elements, create settings, etc. var canvas = document.getElementById("canvas"), context = canvas.getContext("2d"), video = document.getElementById("video"), videoObj = { "video": true }, errBack = function(error) { console.log("Video capture error: ", error.code); }; // Put video listeners into place if(navigator.getUserMedia) { // Standard navigator.getUserMedia(videoObj, function(stream) { video.src = stream; video.play(); }, errBack); } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed navigator.webkitGetUserMedia(videoObj, function(stream){ video.src = window.URL.createObjectURL(stream); video.play(); }, errBack); } else if(navigator.mozGetUserMedia) { // WebKit-prefixed navigator.mozGetUserMedia(videoObj, function(stream){ video.src = window.URL.createObjectURL(stream); video.play(); }, errBack); } // Trigger photo take document.getElementById("snap").addEventListener("click", function() { context.drawImage(video, 0, 0, 640, 480); // Littel effects //$('#video').fadeOut('slow'); $('#canvas').fadeIn('slow'); //$('#snap').hide(); //$('#new').show(); // Allso show upload button //$('#upload').show(); }); // Capture New Photo document.getElementById("new").addEventListener("click", function() { //$('#video').fadeIn('slow'); //$('#canvas').fadeOut('slow'); //$('#snap').show(); //$('#new').hide(); }); // Upload image to sever document.getElementById("upload").addEventListener("click", function(){ var dataUrl = canvas.toDataURL(); console.log(dataUrl); }); }, false); var mainApp = angular.module("mainApp", []); mainApp.controller("formController", function($scope, $http) { $scope.uploadImage = function () { var request = $http({ method: "post", url: "/captureImage", data: { base64: document.getElementById("canvas").toDataURL() }, headers: { 'Content-Type': 'application/json' } }); request.success(function (data) { console.log(data); }); request.error(function(serverResponse, status, headers, config) { alert("failure"); }); }; }); 

第二步:我的路线文件,我手中或保存我上传的图像

 router.get('/captureImage', function(req, res, next) { res.render('captureImage', { title: 'Capture Image and upload' }); }); router.post('/captureImage', function(req, res, next) { //console.log("FormData "+ req.body.base64); var base64Data = req.body.base64.replace(/^data:image\/png;base64,/, ""); fs.writeFile("uploads/out.png", base64Data, 'base64', function(err) { if(err){ console.log(err); }else{ res.send(JSON.stringify({'status': 1, 'msg': 'Image Uploaded'})); } }); }); 

要获得完整的教程,请点击链接使用NodeJS访问WebCam并保存点击图像 – TrinityTuts