ساخت وبکم تشخیص چهره با 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 - قسمت اول

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

آموزش ساخت یک زبان برنامه نویسی - بخش دوم

در مورد lexer، واضح بود که من می‌خواهم از کد مختص خود استفاده کنم. یک lexer چنان برنامه ناچیزی است که عدم نوشتن lexer مختص خود، به مانند عدم نوشتن lef...

آموزش ساخت برنامه موبایل توسط React Native – قسمت دوم

در قسمت قبل با ساختار و نحوه راه اندازی React Native آشنا شدیم, در این قسمت میخواهیم بیشتر روی کار عملی تمرکز کنیم و پروژه رو جلو ببریم.

آموزش ساخت برنامه موبایل توسط React Native – قسمت اول

در این سری آموزش‌ها میخوایم درباره ساخت اپلیکیشن های native برای ios و اندروید یاد بگیریم. اما این کار رو توسط فریمورک محبوب React Native Javascript ا...