فهرست مطالب:

تشخیص چهره در زمان واقعی: یک پروژه پایان به پایان: 8 مرحله (همراه با تصاویر)
تشخیص چهره در زمان واقعی: یک پروژه پایان به پایان: 8 مرحله (همراه با تصاویر)

تصویری: تشخیص چهره در زمان واقعی: یک پروژه پایان به پایان: 8 مرحله (همراه با تصاویر)

تصویری: تشخیص چهره در زمان واقعی: یک پروژه پایان به پایان: 8 مرحله (همراه با تصاویر)
تصویری: مردی که از فرودگاه کابل روی بال هواپیما بلند شد. #shorts 2024, جولای
Anonim
تشخیص چهره در زمان واقعی: یک پروژه پایان به پایان
تشخیص چهره در زمان واقعی: یک پروژه پایان به پایان

در آخرین آموزش من در مورد OpenCV ، ما ردیابی شیء AUTOMATIC VISION را یاد گرفتیم. اکنون ما از PiCam خود برای تشخیص چهره در زمان واقعی استفاده می کنیم ، همانطور که در زیر مشاهده می کنید:

تصویر
تصویر

این پروژه با این "کتابخانه چشم انداز رایانه منبع باز" فوق العاده ، OpenCV انجام شد. در این آموزش ، ما روی Raspberry Pi (بنابراین ، Raspbian به عنوان سیستم عامل) و Python تمرکز می کنیم ، اما من همچنین کد را روی Mac خود آزمایش کردم و همچنین خوب کار می کند. OpenCV برای کارآیی محاسباتی و با تمرکز قوی بر برنامه های زمان واقعی طراحی شده است. بنابراین ، برای تشخیص چهره با استفاده از دوربین بسیار مناسب است.

برای ایجاد یک پروژه کامل در زمینه تشخیص چهره ، ما باید روی 3 مرحله متمایز کار کنیم:

  1. تشخیص چهره و گردآوری اطلاعات
  2. Recognizer را آموزش دهید
  3. تشخیص چهره

بلوک دیاگرام زیر آن مراحل را از سر می گیرد:

تصویر
تصویر

مرحله 1: BoM - Bill of Material

قسمت های اصلی:

  1. رزبری پای V3 - 32 دلار آمریکا
  2. سنسور 5 مگاپیکسلی سنسور 1080p OV5647 مینی دوربین فیلمبرداری - 13.00 دلار آمریکا

مرحله 2: نصب بسته OpenCV 3

نصب بسته OpenCV 3
نصب بسته OpenCV 3

من از Raspberry Pi V3 استفاده می کنم که به آخرین نسخه Raspbian (Stretch) به روز شده است ، بنابراین بهترین راه برای نصب OpenCV ، پیروی از آموزش عالی توسعه یافته توسط Adrian Rosebrock است: Raspbian Stretch: OpenCV 3 + Python را روی Raspberry Pi خود نصب کنید به

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

پس از اتمام آموزش آدریان ، باید محیط مجازی OpenCV را آماده داشته باشید تا آزمایشات ما را روی Pi خود انجام دهید.

بیایید به محیط مجازی خود برویم و تأیید کنیم که OpenCV 3 به درستی نصب شده است.

آدریان توصیه می کند هر بار که یک ترمینال جدید باز می کنید دستور "منبع" را اجرا کنید تا مطمئن شوید که متغیرهای سیستم شما به درستی تنظیم شده اند.

منبع ~/. پروفایل

بعد ، اجازه دهید وارد محیط مجازی خود شویم:

workon cv

اگر متن (cv) قبل از درخواست خود را مشاهده کردید ، در محیط مجازی cv هستید:

(cv) pi@تمشک: ~ $آدریان توجه می کند که محیط مجازی cv پایتون کاملاً مستقل است و از نسخه پیش فرض پایتون که در بارگیری Raspbian Stretch گنجانده شده است ، جدا شده است. بنابراین ، هر بسته پایتون در فهرست جهانی بسته های سایت برای محیط مجازی cv در دسترس نخواهد بود. به طور مشابه ، هر بسته پایتون نصب شده در سایت-بسته های cv در دسترس نصب جهانی پایتون نخواهد بود

اکنون ، مترجم پایتون خود را وارد کنید:

پایتون

و تأیید کنید که نسخه 3.5 (یا بالاتر) را اجرا می کنید

در داخل مترجم (">>>" ظاهر می شود) ، کتابخانه OpenCV را وارد کنید:

واردات cv2

اگر هیچ پیام خطایی ظاهر نشد ، OpenCV به درستی روی محیط مجازی PYUR شما نصب شده است.

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

cv2._ نسخه_

3.3.0 باید ظاهر شود (یا نسخه برتر که می تواند در آینده منتشر شود). Terminal PrintScreen بالا مراحل قبلی را نشان می دهد.

مرحله 3: آزمایش دوربین خود

دوربین خود را آزمایش کنید
دوربین خود را آزمایش کنید

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

من فرض می کنم که شما یک PiCam از قبل بر روی Raspberry Pi خود نصب کرده اید.

کد پایتون زیر را در IDE خود وارد کنید:

وارد کردن numpy به عنوان np

import cv2 cap = cv2. VideoCapture (0) cap.set (3، 640) # set Width cap.set (4، 480) # set Height while (True): ret، frame = cap.read () frame = cv2. تلنگر (قاب ، -1) # تلنگر دوربین به صورت عمودی خاکستری = cv2.cvtColor (قاب ، cv2. COLOR_BGR2GRAY) cv2.imshow ("قاب" ، قاب) cv2.imshow ("خاکستری" ، خاکستری) k = cv2.waitKey (30) & 0xff if k == 27: # برای خروج از break cap.release () cv2.destroyAllWindows () "ESC" را فشار دهید

کد بالا جریان ویدئویی را که توسط PiCam شما ایجاد می شود ضبط می کند و هر دو را در رنگ BGR و حالت خاکستری نمایش می دهد.

توجه داشته باشید که من دوربین خود را به دلیل نحوه مونتاژ آن به صورت عمودی چرخاندم. اگر مورد شما نیست ، خط فرمان "تلنگر" را کامنت کنید یا حذف کنید.

متناوباً می توانید کد را از GitHub من بارگیری کنید: simpleCamTest.py

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

python simpleCamTest.py

برای اتمام برنامه ، باید کلید [ESC] را روی صفحه کلید خود فشار دهید.

قبل از فشار دادن [ESC] روی پنجره ویدیو موس خود را کلیک کنید

تصویر بالا نتیجه را نشان می دهد.

برخی از سازندگان هنگام باز کردن دوربین با مشکلاتی روبرو شدند (پیام های خطای "تأیید نشد"). اگر دوربین در هنگام نصب OpenCv فعال نبوده و درایورهای دوربین به درستی نصب نشده اند ، این اتفاق می افتد. برای تصحیح از دستور زیر استفاده کنید:

sudo modprobe bcm2835-v4l2

همچنین می توانید bcm2835-v4l2 را به آخرین خط فایل ماژول های /etc /اضافه کنید تا راننده در بوت بارگیری شود.

برای کسب اطلاعات بیشتر در مورد OpenCV ، می توانید آموزش را دنبال کنید: loading -video-python-opencv-tutorial

مرحله 4: تشخیص چهره

شناسایی چهره
شناسایی چهره
شناسایی چهره
شناسایی چهره

البته اساسی ترین وظیفه در تشخیص چهره ، "تشخیص چهره" است. قبل از هر چیزی ، شما باید یک چهره (فاز 1) را برای تشخیص آن ، در مقایسه با یک چهره جدید که در آینده (فاز 3) مقایسه شده است ، "ضبط" کنید.

متداول ترین روش برای تشخیص چهره (یا هر اشیاء) ، استفاده از "طبقه بندی کننده آبشار هار" است.

تشخیص شی با استفاده از طبقه بندی کننده های آبشار مبتنی بر ویژگی Haar یک روش تشخیص شیء م effectiveثر است که توسط پل ویولا و مایکل جونز در مقاله خود با عنوان "تشخیص سریع شی با استفاده از آبشار تقویت شده از ویژگی های ساده" در سال 2001 پیشنهاد شده است. این یک روش مبتنی بر یادگیری ماشین است که در آن عملکرد آبشار از بسیاری از تصاویر مثبت و منفی آموزش داده شده است. سپس از آن برای تشخیص اجسام در تصاویر دیگر استفاده می شود.

در اینجا ما با تشخیص چهره کار خواهیم کرد. در ابتدا ، الگوریتم برای آموزش طبقه بندی کننده به تعداد زیادی تصویر مثبت (تصاویر چهره) و تصاویر منفی (تصاویر بدون چهره) نیاز دارد. سپس باید ویژگی ها را از آن استخراج کنیم. خبر خوب این است که OpenCV همراه با یک مربی و همچنین یک آشکارساز است. اگر می خواهید طبقه بندی کننده خود را برای هر شی مانند ماشین ، هواپیما و غیره آموزش دهید ، می توانید از OpenCV برای ایجاد یک مورد استفاده کنید. جزئیات کامل آن در اینجا آورده شده است: آموزش طبقه بندی آبشار.

اگر نمی خواهید طبقه بندی کننده خود را ایجاد کنید ، OpenCV قبلاً شامل طبقه بندی کننده های از پیش آموزش دیده برای صورت ، چشم ، لبخند و غیره است. این فایل های XML را می توان از فهرست haarcascades بارگیری کرد.

نظریه کافی است ، بیایید یک آشکارساز چهره با OpenCV ایجاد کنیم!

فایل: faceDetection.py را از GitHub من بارگیری کنید.

وارد کردن numpy به عنوان np

import cv2 faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) cap.set (3، 640) # set Width cap.set (4، 480) # set Height while True: ret ، img = cap.read () img = cv2.flip (img، -1) خاکستری = cv2.cvtColor (img، cv2. COLOR_BGR2GRAY) چهره = faceCascade.detectMultiScale (خاکستری ، scaleFactor = 1.2 ، minNeighbors = 5 ، minSize = (20 ، 20)) برای (x ، y ، w ، h) در صورتها: cv2 مستطیل (img ، (x ، y) ، (x+w ، y+h) ، (255 ، 0 ، 0) ، 2) roi_gray = خاکستری [y: y+h، x: x+w] roi_color = img [y: y+h، x: x+w] cv2.imshow ('ویدئو'، img) k = cv2.wait کلید (30) & 0xff if k == 27: # برای خروج از break cap.release () cv2.destroyAllWindows () "ESC" را فشار دهید

باور کنید یا نه ، چند خط کد بالا تنها چیزی است که برای تشخیص چهره با استفاده از پایتون و OpenCV نیاز دارید.

وقتی با آخرین کدی که برای آزمایش دوربین استفاده می کنید مقایسه کنید ، متوجه می شوید که قسمت های کمی به آن اضافه شده است. به خط زیر توجه کنید:

faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml')

این خطی است که "طبقه بندی کننده" را بارگیری می کند (که باید در فهرست راهنمای "Cascades/" ، در فهرست پروژه شما باشد).

سپس ، دوربین خود را تنظیم کرده و در داخل حلقه ، فیلم ورودی خود را در حالت مقیاس خاکستری بارگذاری می کنیم (همان چیزی که قبلاً دیدیم).

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

چهره = faceCascade.detectMultiScale (خاکستری ، scaleFactor = 1.2 ، دقیقه همسایگان = 5 ، دقیقه اندازه = (20 ، 20))

جایی که،

  • خاکستری تصویر مقیاس خاکستری است.
  • scaleFactor پارامتری است که میزان اندازه تصویر را در هر مقیاس تصویر کاهش می دهد. برای ایجاد هرم مقیاس استفاده می شود.
  • minNeighbors پارامتری است که مشخص می کند هر مستطیل کاندید باید چند همسایه داشته باشد تا آن را حفظ کند. عدد بالاتر مثبت کاذب کمتری می دهد.
  • minSize حداقل اندازه مستطیل است که یک صورت در نظر گرفته می شود.

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

برای (x ، y ، w ، h) در صورت:

cv2. rectangle (img، (x، y)، (x+w، y+h)، (255، 0، 0)، 2) roi_gray = خاکستری [y: y+h، x: x+w] roi_color = img [y: y+h، x: x+w]

اگر صورتها پیدا شوند ، موقعیت چهره های شناسایی شده را به صورت مستطیل با گوشه سمت چپ به بالا (x ، y) و دارای "w" به عنوان عرض و "h" به عنوان ارتفاع ==> (x ، y ، w ، ح) لطفا تصویر بالا را ببینید.

هنگامی که این مکان ها را بدست آوردیم ، می توانیم یک "ROI" (مستطیل کشیده) برای صورت ایجاد کنیم و نتیجه را با تابع imshow () ارائه دهیم.

اسکریپت پایتون بالا را با استفاده از ترمینال Rpi روی محیط پایتون خود اجرا کنید:

python faceDetection.py

نتیجه:

تصویر
تصویر

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

توجه داشته باشید که در Pi ، داشتن چندین طبقه بندی کننده در یک کد ، پردازش را کند می کند ، هنگامی که این روش تشخیص (HaarCascades) از مقدار زیادی قدرت محاسباتی استفاده می کند. در دسکتاپ ، اجرای آن راحت تر است.

در GitHub من نمونه های دیگری خواهید یافت:

faceEyeDetection.py

faceSmileDetection.py

faceSmileEyeDetection.py

و در تصویر بالا ، نتیجه را مشاهده می کنید.

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

آموزش تشخیص چهره و چشم OpenCV پایتون آبشار Haar Cascade Object

مرحله 5: جمع آوری داده ها

جمع آوری اطلاعات
جمع آوری اطلاعات
جمع آوری اطلاعات
جمع آوری اطلاعات

اول از همه ، باید از رامیز راجا بخاطر کار بزرگش در زمینه تشخیص چهره در عکسها تشکر کنم:

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

و همچنین Anirban Kar ، که یک آموزش بسیار جامع با استفاده از فیلم تهیه کرد:

تشخیص چهره - 3 قسمت

من واقعاً توصیه می کنم که به هر دو آموزش نگاهی بیندازید.

با بیان این ، بیایید مرحله اول پروژه خود را آغاز کنیم. آنچه ما در اینجا انجام می دهیم ، شروع از آخرین مرحله (تشخیص چهره) است ، ما به سادگی یک مجموعه داده ایجاد می کنیم ، جایی که برای هر شناسه ، گروهی از عکسها را به رنگ خاکستری با قسمتی که برای تشخیص چهره استفاده می شود ، ذخیره می کنیم.

ابتدا ، یک دایرکتوری ایجاد کنید که در آن پروژه خود را توسعه می دهید ، به عنوان مثال ، FacialRecognitionProject:

mkdir FacialRecognitionProject

در این فهرست ، علاوه بر 3 اسکریپت پایتون که برای پروژه خود ایجاد می کنیم ، باید طبقه بندی کننده صورت را روی آن ذخیره کرده باشیم. می توانید آن را از GitHub من بارگیری کنید: haarcascade_frontalface_default.xml

بعد ، یک زیرشاخه ایجاد کنید که در آن نمونه های صورت خود را ذخیره کرده و نام آن را "مجموعه داده" بگذارید:

مجموعه داده mkdir

و کد را از GitHub من بارگیری کنید: 01_face_dataset.py

واردات cv2

import os cam = cv2. VideoCapture (0) cam.set (3، 640) # set video width cam.set (4، 480) # set height video face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # برای هر نفر ، یک شناسه چهره ای عددی وارد کنید face_id = ورودی ('\ n نام کاربری را وارد کنید فشار دهید ==>') چاپ ("\ n [INFO] آغازگر تصویربرداری. به دوربین نگاه کنید و منتظر بمانید …") # تعداد اولیه شمارش تعداد نمونه گیری فردی 0 خاکستری 1.3) count + = 1 # تصویر گرفته شده را در پوشه مجموعه داده cv2.imwrite ("مجموعه داده/کاربر" + str (face_id) + '.' + str (تعداد) + ".jpg" ، خاکستری [y: y +) ذخیره کنید) h، x: x+w]) cv2.imshow ('image'، img) k = cv2.waitKey (100) & 0xff # برای خروج از ویدیو 'ESC' را فشار دهید اگر k == 27: break elif count> = 30: # 30 نمونه صورت بگیرید و وقفه ویدیویی را متوقف کنید # Do ab it of printup print ("\ n [INFO] Exiting Program and cleanup stuff") cam.release () cv2.destroyAllWindows ()

این کد بسیار شبیه کدی است که برای تشخیص چهره دیدیم. آنچه اضافه کردیم ، "فرمان ورودی" برای گرفتن شناسه کاربر بود ، که باید یک عدد صحیح باشد (1 ، 2 ، 3 و غیره)

face_id = ورودی ('\ n نام کاربری را وارد کنید پایانی را فشار دهید ==>')

و برای هر یک از فریم های گرفته شده ، باید آن را به عنوان یک فایل در فهرست "مجموعه داده" ذخیره کنیم:

cv2.imwrite ("مجموعه داده/کاربر." + str (face_id) + '.' + str (تعداد) + ".jpg" ، خاکستری [y: y + h ، x: x + w])

توجه داشته باشید که برای ذخیره فایل فوق ، باید کتابخانه "os" را وارد کرده باشید. نام هر فایل از ساختار زیر پیروی می کند:

User.face_id.count.jpg

به عنوان مثال ، برای یک کاربر با face_id = 1 ، چهارمین فایل نمونه در مجموعه داده/ فهرست چیزی شبیه به موارد زیر است:

User.1.4.jpg

همانطور که در عکس بالا از Pi من نشان داده شده است. روی کد من ، 30 نمونه از هر شناسه ضبط می کنم. می توانید آن را در آخرین "elif" تغییر دهید. از تعداد نمونه ها برای شکستن حلقه ای که نمونه های صورت گرفته می شوند استفاده می شود.

اسکریپت پایتون را اجرا کرده و چند Ids ضبط کنید. شما باید هر بار که می خواهید کاربر جدیدی را جمع کنید ، اسکریپت را اجرا کنید (یا عکسهای موجود را تغییر دهید).

مرحله ششم: مربی

مربی
مربی

در مرحله دوم ، ما باید تمام داده های کاربر را از مجموعه داده خود بگیریم و OpenCV Recognizer را آموزش دهیم. این امر مستقیماً توسط یک تابع OpenCV خاص انجام می شود. نتیجه یک فایل.yml خواهد بود که در فهرست "trainer/" ذخیره می شود.

بنابراین ، بیایید شروع به ایجاد یک دایرکتوری فرعی کنیم که در آن داده های آموزش داده شده را ذخیره می کنیم:

مربی mkdir

دومین اسکریپت پایتون را از GitHub من بارگیری کنید: 02_face_training.py

واردات cv2

import numpy as np from PIL import Image import os # Path for face image path path = 'dataset' nasizer = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml")؛ # تابع برای دریافت تصاویر و برچسب گذاری داده ها getImagesAndLabels (path): imagePaths = [os.path.join (path، f) for f in os.listdir (path)] faceSamples = ids = for imagePath in imagePaths: PIL_img = Image.open (imagePath).convert ('L') # تبدیل آن به مقیاس خاکستری img_numpy = np.array (PIL_img، 'uint8') id = int (os.path.split (imagePath) [-1]. تقسیم (".") [1]) چهره = detector.detectMultiScale (img_numpy) برای (x ، y ، w ، h) در صورت: faceSamples.append (img_numpy [y: y+h، x: x+w]) ids.append (id) return faceSamples ، ids print ("\ n [INFO] چهره های آموزشی. چند ثانیه طول می کشد. منتظر بمانید …") چهره ها ، ids = getImagesAndLabels (path) nasizer.train (face، np.array (ids)) # مدل را در trainer/trainer.yml αναγνω کنید. بنویسید ('trainer/trainer.yml') # nasizer.save () بر روی Mac کار کرده است ، اما نه روی Pi # شماره چهره های آموزش دیده را چاپ کرده و برنامه را چاپ کنید ("\ n [INFO] {0} چهره های آموزش دیده. خروج از برنامه".format (len (np.unique (ids))))

تأیید کنید که کتابخانه PIL را روی Rpi خود نصب کرده اید. اگر نه ، دستور زیر را در ترمینال اجرا کنید:

بالش نصب پیپ

ما به عنوان یک تشخیص دهنده از LBPH (LOCAL BINARY PATTERNS HISTOGRAMS) Face Recognizer استفاده می کنیم که در بسته OpenCV موجود است. ما این کار را در خط زیر انجام می دهیم:

شناسه = cv2.face. LBPHFaceRecognizer_create ()

تابع "getImagesAndLabels (path)" ، تمام عکس های موجود در فهرست را می گیرد: "dataset/" ، و 2 آرایه را برمی گرداند: "Ids" و "face". با استفاده از آن آرایه ها به عنوان ورودی ، ما "تشخیص دهنده خود را آموزش می دهیم":

تشخیص دهنده (چهره ها ، شناسه ها)

در نتیجه ، فایلی با نام "trainer.yml" در فهرست trainer که قبلاً توسط ما ایجاد شده است ذخیره می شود.

خودشه! من آخرین دستور چاپی را که در آن برای تأیید نمایش داده بودم ، شامل تعداد چهره کاربر که آموزش داده ایم ، قرار دادم.

هر بار که فاز 1 را انجام می دهید ، فاز 2 نیز باید اجرا شود

مرحله 7: تشخیص دهنده

تشخیص دهنده
تشخیص دهنده
تشخیص دهنده
تشخیص دهنده

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

بیایید اسکریپت فاز 3 پایتون را از GitHub من بارگیری کنیم: 03_face_recognition.py.

واردات cv2

import numpy به عنوان np وارد کردن سیستم تشخیص os = cv2.face. LBPHFaceRecognizer_create () cognizer.read ('trainer/trainer.yml') cascadePath = "haarcascade_frontalface_default.xml" faceCascade = cv2. CascadeClassifier (cascadePath)؛ font = cv2. FONT_HERSHEY_SIMPLEX #iniciate id counter id = 0 # نام مربوط به ids: example ==> Marcelo: id = 1 ، etc names = ['Noone'، 'Marcelo'، 'Paula'، 'Ilza'، 'Z '،' W '] # شروع و شروع به ضبط ویدئو در زمان واقعی cam = cv2. VideoCapture (0) cam.set (3، 640) # set video widht cam.set (4، 480) # تنظیم ارتفاع ویدئو # تعیین حداقل اندازه پنجره به عنوان چهره شناخته می شود تلنگر عمودی خاکستری = cv2.cvtColor (img، cv2. COLOR_BGR2GRAY) چهره = faceCascade.detectMultiScale (خاکستری ، scaleFactor = 1.2 ، minNeighbours = 5 ، minSize = (int (minW) ، int (minH)) ،) برای (x ، y ، w ، h) در چهره ها: cv2 مستطیل (img ، (x ، y) ، (x+w ، y+h) ، (0 ، 255 ، 0) ، 2) id ، اعتماد = تشخیص دهنده. پیش بینی (خاکستری [y: y+h، x: x+w]) # بررسی کنید آیا اعتماد به نفس آنها کمتر است 100 ==> "0" مطابقت کامل دارد اگر (اطمینان <100): id = names [id] اعتماد = "{0}٪ ".format (دور (100 - اطمینان)) دیگر: id =" ناشناخته "اعتماد =" {0}٪ ". فرمت (دور (100 - conf () x+5 ، y+h-5) ، فونت ، 1 ، (255 ، 255 ، 0) ، 1) cv2.imshow ('camera'، img) k = cv2.waitKey (10) & 0xff # 'ESC' را فشار دهید برای خروج از ویدئو در صورت k == 27: break # کمی چاپ پاکسازی ("\ n [INFO] Exiting Program and cleanup stuff") cam.release () cv2.destroyAllWindows ()

ما در اینجا یک آرایه جدید قرار می دهیم ، بنابراین "نام" را به جای شناسه های شماره دار نمایش می دهیم:

نام = ['هیچکدام' ، 'مارسلو' ، 'پائولا' ، 'ایلزا' ، 'Z' ، 'W']

بنابراین ، به عنوان مثال: مارسلو کاربر را با id = 1؛ پائولا: id = 2 و غیره

در مرحله بعد ، ما چهره ای را تشخیص می دهیم ، همان کاری که قبلاً با طبقه بندی haasCascade انجام دادیم. با داشتن یک چهره شناسایی شده می توانیم مهمترین عملکرد را در کد بالا فراخوانی کنیم:

شناسه ، اطمینان = تشخیص. پیش بینی (قسمت خاکستری صورت)

() شناسایی (پیش بینی) ، به عنوان پارامتر قسمتی از صورت را که مورد تجزیه و تحلیل قرار می گیرد ، در نظر می گیرد و صاحب احتمالی خود را باز می گرداند ، که نشان دهنده شناسه آن و میزان اطمینان فرد تشخیص دهنده در رابطه با این مسابقه است.

توجه داشته باشید که شاخص اطمینان در صورت مطابقت کامل ، صفر خواهد بود

و سرانجام ، اگر تشخیص دهنده بتواند چهره ای را پیش بینی کند ، ما یک متن با شناسه احتمالی روی تصویر قرار می دهیم و میزان "احتمال" در درصد درست بودن مطابقت چقدر است ("احتمال" = 100 - شاخص اطمینان). در غیر این صورت ، برچسب "ناشناخته" روی صورت قرار می گیرد.

در زیر یک-g.webp

تصویر
تصویر

در تصویر بالا ، برخی آزمایشات انجام شده با این پروژه را نشان می دهم ، که در آن از عکس ها نیز برای تأیید کارکرد تشخیص دهنده استفاده کرده ام.

مرحله 8: نتیجه گیری

نتیجه
نتیجه

مثل همیشه ، امیدوارم این پروژه بتواند به دیگران کمک کند تا به دنیای هیجان انگیز الکترونیک راه پیدا کنند!

برای اطلاعات بیشتر و کد نهایی ، لطفاً از سپرده گذاری GitHub من دیدن کنید: OpenCV-Face-Recognition

برای پروژه های بیشتر ، لطفاً از وبلاگ من دیدن کنید: MJRoBot.org

در زیر نگاهی اجمالی به آموزش های آینده ، که در آن "مسیر خودکار چهره و سایر روش ها برای تشخیص چهره" را بررسی می کنیم:

تصویر
تصویر

سلودوس از جنوب جهان!

شما را در دستورالعمل بعدی من می بینم!

متشکرم،

مارسلو

توصیه شده: