ノード アプリケーションで Web にアクセスするのは非常に簡単で、それを行うには html5 getUserMedia() メソッドを使用するだけです。リーミング部分は非常に簡単です。ここに完全なコードがあります。
ステップ 1. Web カメラにアクセスしている 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");
});
};
});
ステップ 2.アップロードした画像を渡すか保存するルート ファイル
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'}));
}
});
});
完全なチュートリアルについては、リンクAccessing WebCam with NodeJS をたどり、クリック画像を保存してください - TrinityTuts