ساخت وبکم تشخیص چهره با Node.js و OpenCV - قسمت پایانی

گردآوری و تالیف : امیررضا سیستانه ای
تاریخ انتشار : 18 بهمن 1396
دسته بندی ها : نود جی اس

در قسمت قبل , بیشتر درمورد Computer Vision ها و نحوه ی نصب و راه اندازی کتابخانه ی OpenCV صحبت کردیم و درنهایت یک تست کوچک برای تشخیص چهره ی تصاویر انجام دادیم. در این قسمت می خواهیم قابلیت تشخیص چهره رو برای وبکم بصورت زنده تست کنیم. 

اولین چیزی که احتیاج داریم اینه که به وبکم متصل بشیم و تصویر رو بصورت زنده مشاهده کنیم. این کد رو در فایلی با اسم camera.js وارد کنید :

var cv = require('opencv');
try {
  var camera = new cv.VideoCapture(0);
  var window = new cv.NamedWindow('Video', 0)
  setInterval(function() {
    camera.read(function(err, im) {
      if (err) throw err;
      console.log(im.size())
      if (im.size()[0] > 0 && im.size()[1] > 0){
                if (err) throw err;
                window.show(im);
      }
      window.blockingWaitKey(0, 50);
    });
  }, 20); 
} catch (e){
  console.log("Couldn't start camera:", e)
}

کد رو با استفاده از دستور زیر اجرا کنید :

node camera.js

الان شما باید یک پنجره جدید که از وبکم تصویر رو نشون میده, داشته باشید. شبیه تصویر زیر :

بریم سراغ کدنویسی این بخش :

var camera = new cv.VideoCapture(0);
var window = new cv.NamedWindow('Video', 0)

اینجا ما میخواهیم به وبکم دسترسی پیدا کرده و یک پنجره جدید برای نمایش ویدیو ایجاد کنیم.

حالا برای اینکه تصویر زنده رو بجای تصویر قبلی نشون بدیم باید پنجره رو با آخرین تصویری که از وبکم گرفتیم رفرش کنیم. برای اینکار از تابع interval استفاده میکنیم و پنجره رو هر 20 میلی ثانیه رفرش میکنیم :

 setInterval(function() {
    camera.read(function(err, im) {
      if (err) throw err;
      console.log(im.size())
      if (im.size()[0] > 0 && im.size()[1] > 0){
                if (err) throw err;
                window.show(im);
      }
      window.blockingWaitKey(0, 50);
    });
  }, 20);

تصویر اولیه بعنوان 0*0 پیکسل آمده از این رو نباید اون رو نمایش بدیم. یک شرط if برامون این کارو انجام میده.

از اونجایی که ما میدونیم چطور تشخیص چهره از تصاویر رو انجام بدیم و چطور تصاویر زنده رو از وبکم دریافت کنیم, بیایید این دو رو با هم ترکیب کنیم و سیستم تشخیص چهره از وبکم رو بسازیم.

این کد تشخیص چهره از وبکم هست :

فایل camera.js

var cv = require('opencv');

try {
  var camera = new cv.VideoCapture(0);
  var window = new cv.NamedWindow('Video', 0)
  // face detection properties
  var rectColor = [0, 255, 0]; 
   var rectThickness = 2;

  setInterval(function() {
    camera.read(function(err, im) {
      if (err) throw err;
      console.log(im.size())
      if (im.size()[0] > 0 && im.size()[1] > 0){
                im.detectObject(cv.FACE_CASCADE, {}, function(err, faces) {
                if (err) throw err;
                for (var i = 0; i < faces.length; i++) {
                        face = faces[i];
                        im.rectangle([face.x, face.y], [face.width, face.height], rectColor, rectThickness);
                 }
                window.show(im);
                });
      }
      window.blockingWaitKey(0, 50);
    });
  }, 20); 
} catch (e){
  console.log("Couldn't start camera:", e)
}

حالا کد رو اجرا کنید :

node camera.js

این خروجی ماست :

همانطور که گفتیم دقیق نیست اما 80 درصد دقت دارد.

منبع

مقالات پیشنهادی

ساخت وبکم تشخیص چهره با Node.js و OpenCV - قسمت اول

بخش دیداری کامپیوتر بدین صورت تعریف شده: "چیزی که باعث میشه کامپیوترها مثل انسان ها ببینند و چیزهایی رو متوجه شوند". درک این راحته اما در عمل بسیار پی...

نحوه ساخت افزونه مرورگر با vue - بخش دوم

در بخش اول این مقاله در مورد قدم های ابتدای راه اندازی افزونه ها صحبت کردیم که میتوانید بخش اول را در نحوه ساخت افزونه مرورگر با vue - بخش اول مطالعه...

هک css - ساخت یک Dropdowns تنها با checkbox

در این آموزش سریع ، ما یک نگاه به تنها روش ساخت Dropdowns کردیم بعد تصمصیم گرفتیم به دنبال یک راه دیگه برای ساخت Dropdowns بگردیم که به یک روش هوشمندا...

نحوه ساخت افزونه مرورگر با vue - بخش اول

در این مقاله، نحوه ساخت یک افزونه ساده Firefox را با استفاده از فریم‌وورک معروف JavaScript، یعنی Vue نشان خواهم داد.