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

13 خرداد 1398, خواندن در 2 دقیقه

در قسمت قبل , بیشتر درمورد 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 درصد دقت دارد.

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
امیررضا سیستانه ای @reza.sys
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو