آموزش رزبری پایپروژه رزبری پای

تشخیص چشم، فک، دهان با رزبری پای و OpenCV

در این پروژه پردازش تصویر با رزبری پای ما قسمت های مختلف صورت مثل ابرو، چشم، بینی، فک و دهان را تشخیص میدهیم. قبلا ما با استفاده از OpenCV سیستم تشخیص و شناسایی چهره را طراحی کرده ایم. در این پروژه از OpenCV و رزبری پای برای تشخیص نشانه های صورت استفاده خواهیم کرد. در این پروژه ما تنها به یک برد رزبری پای و یک دوربین رزبری پای نیاز داریم. همچنین به OpenCV و Dlib نیاز داریم که نصب آنها توضیح داده خواهد شد.

قبلا از شروع کار با این پروژه تشخیص نشانه های صورت، ابتدا باید OpenCV ، imutils ، dlib ، Numpy و برخی دیگر از وابستگی ها را در این پروژه نصب کنیم. OpenCV در اینجا برای پردازش تصویر دیجیتال استفاده می شود که رایج ترین برنامه پردازش تصویر دیجیتال ، تشخیص شیئ object ، تشخیص چهره و شمارنده افراد است.

فیلم زیر نحوه کار پروژه تشخیص اجزای چهره با OpenCV و رزبری پای را نشان میدهد.

اگر OpenCV را در رزبری پای خود نصب نکرده اید، آموزش نصب OpenCV در رزبری پای را مشاهده کنید.

آموزش نصب imutils

imutils برای اجرای چند عملکرد لازم پردازش تصویر مثل ترجمه ، چرخش ، تغییر اندازه ، اسکلت بندی و نمایش آسان تر تصاویر Matplotlib با OpenCV استفاده می شود. بنابراین با استفاده از دستور زیر imutils را نصب کنید:

pip3 install imutils

آموزش نصب dlib

dlib مجموعه مدرنی است که شامل الگوریتم ها و ابزارهای یادگیری ماشین برای مشکلات دنیای واقعی است. برای نصب dlib از دستور زیر استفاده کنید.

pip3 install dlib

آموزش نصب NumPy

NumPy کتابخانه اصلی محاسبات علمی است که شامل یک شی آرایه n بعدی قدرتمند است و ابزارهایی را برای ادغام C ، C ++ و غیره فراهم می کند.

Pip3 install numpy

تشخیص اجزای صورت با dlib

ما میخواهیم اجزای صورت را با استفاده از کتابخانه dlin شناسایی کنیم. با استفاده از این کتابخانه ما مختصات اجزای صورت را در تصویر بدست می آوریم.

تشخیص اجزای صورت با dlib

پیشنهاد میکنم پروژه های زیر را نیز مشاهده کنید:

کد پایتون تشخیص اجزای صورت با رزبری پای

کد پایتون کامل پروژه تشخیص اجزای صورت با کتابخانه dlib در انتهای صفحه در فایل دانلودی انتهای صفحه قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم. توجه داشته باشید کد به صورت آماده در انتهای صفحه در اختیار شماست و در این قسمت فقط ما اجزای کد را برای افزایش درک شما از پروژه شرح داده ایم.

بنابراین ، طبق معمول ، کد را با فراخوانی همه کتابخانه های مورد نیاز شروع میکنیم.

from imutils import face_utils
import numpy as np
import argparse
import imutils
import dlib
import cv2
from picamera.array import PiRGBArray
from picamera import PiCamera​

سپس شیئ دوربین را پیکربندی اولیه کرده و وضوح تصویر را (640 ، 480) و نرخ فریم را روی 30 فریم بر ثانیه تنظیم میکنیم.

camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 30

اکنون در خطوط بعدی ، از تجزیه کننده آرگومان برای ارائه مسیر پیش بینی کننده اجزای صورت استفاده میکنیم.

ap = argparse.ArgumentParser()
ap.add_argument("-p", "--shape-predictor", required=True,
            help="facial landmark predictor path")
args = vars(ap.parse_args())

سپس در خطوط بعدی، مبتنی بر HOG را که از پیش تمرین داده شده است پیکربندی میکنیم و همچنین تشخیص دهنده اجزای صورت را بارگذاری میکنیم.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(args["shape_predictor"])

سپس از تابع capture_continuous برای شروع ضبط فریم ها از دوربین رزبری پای استفاده میکنیم.

for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
        image = frame.array
        cv2.imshow("Frame", image)
        key = cv2.waitKey(1) & 0xFF
        rawCapture.truncate(0)

برای گرفتن یک قاب خاص از دکمه “S” استفاده کنید. سپس تصویر گرفته شده را تغییر اندازه میدهیم و آن را سیاه و سفید میکنیم.

if key == ord("s"):
       image = imutils.resize(image, width=400)
       gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

از عملکرد کتابخانه dlib برای شناسایی اجزای چهره در تصویر گرفته شده استفاده میکنیم.

rects = detector(gray, 1)

پس از ثبت تصویر، اجزای صورت را مشخص میکنیم و 68 نقطه را به یک آرایه NumPy تبدیل میکنیم.

for (i, rect) in enumerate(rects):
          shape = predictor(gray, rect)
          shape = face_utils.shape_to_np(shape)

سپس ، یک کپی از تصویر اصلی میگیریم و از آن برای حلقه استفاده میکنیم تا نام قسمت صورت را روی تصویر بکشیم. رنگ متن قرمز خواهد بود ، می توانید با تغییر مقادیر RGB آن را به رنگ دیگری تغییر دهید.

 for (name, (i, j)) in face_utils.FACIAL_LANDMARKS_IDXS.items():
          clone = image.copy()
          cv2.putText(clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX,
                                    0.7, (0, 0, 255), 2)

اکنون قسمت های صورت شناسایی شده را حلقه (loop) می کنیم و با استفاده از عملکرد OpenCV دایره هایی را روی این قسمت های صورت ترسیم می کنیم.

for (x, y) in shape[i:j]:
               cv2.circle(clone, (x, y), 1, (0, 0, 255), -1)

اکنون در خطوط بعدی ، با محاسبه جعبه محدود کننده مختصات یک قسمت چهره خاص ، هر قسمت چهره را به عنوان یک تصویر جداگانه استخراج خواهیم کرد. اندازه تصویر استخراج شده به 250 پیکسل تغییر می کند.

(x, y, w, h) = cv2.boundingRect(np.array([shape[i:j]]))
 roi = image[y:y + h, x:x + w]
 roi = imutils.resize(roi, width=250, inter=cv2.INTER_CUBIC)

حال در خطوط آخر کد ، قسمت های صورت را با نام آنها و تصویر جداگانه ای از آن قسمت نمایش میدهیم. برای تغییر ناحیه صورت از کلید ESC استفاده میکنیم.

cv2.imshow("ROI", roi)
cv2.imshow("Image", clone)
cv2.waitKey(0)

فیلم تشخیص اجزای چهره با رزبری پای

برای آزمایش پروژه ، یک دایرکتوی ایجاد کنید و با استفاده از دستورات زیر به آن بروید :

mkdir face-part-detector
cd face-part-detector

اکنون فایل shape_predictor_68_face_landmarks.dat را از این لینک بارگیری کنید و سپس فایل shape_predictor_68_face_landmarks.dat را در داخل این دایرکتوری استخراج و کپی کنید و سپس یک فایل جدید به نام detect.py باز کرده و کد پروژه را در آن جای گذاری کنید.

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

python3 detect.py --shape-predictor shape_predictor_68_face_landmarks.dat

پنجره ای مشاهده خواهید کرد که نمای مستقیمی از دوربین شما را نشان می دهد. سپس کلید “S” را فشار دهید تا یک فریم انتخاب شود. نقاط قرمز را در ناحیه دهان خود مشاهده خواهید کرد. برای دیدن سایر قسمتهای صورت از کلید ESC استفاده کنید.

مقاله پیشنهادی: تشخیص صدا با رزبری پای

تشخیص اجزای چهره با رزبری پای

موارد موجود در فایل : سورس کامل

5 (11 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

2 نظر

  1. چطور میتوانم فایل های پروژه را دانلود کنم لطفا رهنمایی کنید

    1. سلام عزیز
      روی لینک آخر مطلب کلیک کنید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *