こんばんは、今週はママが出張で関西方面に離れており、夜ママがいなくても息子は寝られるのか、心配でしたが、問題なく、いつも通りの時間帯におねんねしてくれています。@kjunichiです。
OpenCV使えば
顔検出は、コンピュータビジョン界隈では超有名トピックのため、OpenCVで簡単にできるようです。
サーバサイドJavaScriptの可能性を探るのだ
node.jsで、canvasは有名ですし、processingもあります。そんな訳で、 CCV.jsのnode.js版もあるのです。
指定したフォルダ内の息子の写真から顔を切り出すソース
var fs = require('fs'); var face_detect = require('face-detect'); var Canvas = require('canvas') , Image = Canvas.Image; var gNum = 0; var gFaceDetect = false; function detectFace(filepath) { fs.readFile(filepath, function(err, squid){ if (err) throw err; var img = new Image; img.src = squid; var canvas = new Canvas(img.width, img.height); var ctx = canvas.getContext('2d'); ctx.drawImage(img, 0,0,img.width,img.height); var result = face_detect.detect_objects({ "canvas" : face_detect.grayscale(canvas), //"cascade":cascade, "interval" : 5, "min_neighbors" : 1 }); if(result.length > 0) { console.log(filepath + ' Found ' + result.length + ' faces.'); gFaceDetect = true; } for (var i = 0; i < result.length; i++){ var face = result[i]; console.log(face); // 単純に検出された座標をもとに画像データを作成する var faceCs = new Canvas(Math.floor(face.width),Math.floor(face.height)); var faceCtx = faceCs.getContext('2d'); faceCtx.drawImage(img,Math.floor(face.x),Math.floor(face.y), Math.floor(face.width),Math.floor(face.height), 0,0,Math.floor(face.width),Math.floor(face.height)); // faceCtx.drawImage(img,0,0,256,256, // 0,0,256,256); var out = fs.createWriteStream(__dirname + '/'+gNum+'.png'); gNum++; var stream = faceCs.createPNGStream(); stream.pipe(out); //faceCs.toDataURL(function(err, str) { // var out = fs.createWriteStream(__dirname + '/'+gNum+'.html'); // gNum++; // out.write(''); // }); } //myDataUrl(); }); } function myDataUrl() { canvas.toDataURL(function(err, str) { console.log(''); }); } var targetDir = 'camdata'; fs.readdir(targetDir, function (err, files) { for(var i = 0; i < files.length; i++) { console.log(files[i]); detectFace(targetDir + "/"+ files[i]); if(gFaceDetect) { return; } } } });
関連サイト
関連記事
- 以前やったNode.jsで顔検出を改良した
- npm install pgだけでは済まない件
- node.jsでhttpsも使えるHttp proxyを書いている
- node.jsが80番ポートで動かない #windows
- 公式のOpenCVでWASM版OpenCV.jsがビルドできたのでnode.jsで動かそうとした件