تشخیص چشم، فک، دهان با رزبری پای و 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 شناسایی کنیم. با استفاده از این کتابخانه ما مختصات اجزای صورت را در تصویر بدست می آوریم.
پیشنهاد میکنم پروژه های زیر را نیز مشاهده کنید:
- پروژه شناسایی چهره با OpenCV و رزبری پای
- تشخیص فاصله اجتماعی با رزبری پای و OpenCV
- تشخیص پلاک خودرو با رزبری پای و پردازش تصویر OpenCV
- تشخیص حرکت دوربین مدار بسته با رزبری پای (هشدار و OpenCV)
کد پایتون تشخیص اجزای صورت با رزبری پای
کد پایتون کامل پروژه تشخیص اجزای صورت با کتابخانه 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 استفاده کنید.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
چطور میتوانم فایل های پروژه را دانلود کنم لطفا رهنمایی کنید
سلام عزیز
روی لینک آخر مطلب کلیک کنید