جدول المحتويات:

التعرف على الوجوه في الوقت الحقيقي: مشروع شامل: 8 خطوات (بالصور)
التعرف على الوجوه في الوقت الحقيقي: مشروع شامل: 8 خطوات (بالصور)

فيديو: التعرف على الوجوه في الوقت الحقيقي: مشروع شامل: 8 خطوات (بالصور)

فيديو: التعرف على الوجوه في الوقت الحقيقي: مشروع شامل: 8 خطوات (بالصور)
فيديو: كيف تعمل تقنية التعرف على الوجه؟ 2024, يوليو
Anonim
التعرف على الوجوه في الوقت الحقيقي: مشروع شامل
التعرف على الوجوه في الوقت الحقيقي: مشروع شامل

في تعليمي الأخير لاستكشاف OpenCV ، تعلمنا تتبع كائن الرؤية التلقائي. الآن سوف نستخدم PiCam الخاص بنا للتعرف على الوجوه في الوقت الفعلي ، كما ترى أدناه:

صورة
صورة

تم إنجاز هذا المشروع باستخدام مكتبة رؤية الكمبيوتر المفتوحة المصدر الرائعة هذه ، OpenCV. في هذا البرنامج التعليمي ، سنركز على Raspberry Pi (لذا ، Raspbian as OS) و Python ، لكنني أيضًا اختبرت الكود على My Mac وهو يعمل أيضًا بشكل جيد. تم تصميم OpenCV لتحقيق الكفاءة الحسابية مع التركيز القوي على تطبيقات الوقت الفعلي. لذلك ، فهو مثالي للتعرف على الوجوه في الوقت الفعلي باستخدام الكاميرا.

لإنشاء مشروع كامل على التعرف على الوجوه ، يجب أن نعمل على 3 مراحل متميزة للغاية:

  1. كشف الوجه وجمع البيانات
  2. تدريب أداة التعرف
  3. تمييز الوجوه

يستأنف مخطط الكتلة أدناه تلك المراحل:

صورة
صورة

الخطوة 1: BoM - فاتورة المواد

الأجزاء الرئيسية:

  1. Raspberry Pi V3 - 32.00 دولارًا أمريكيًا
  2. 5 ميجابكسل 1080p المستشعر OV5647 وحدة فيديو كاميرا صغيرة - 13.00 دولارًا أمريكيًا

الخطوة الثانية: تثبيت حزمة OpenCV 3

تثبيت حزمة OpenCV 3
تثبيت حزمة OpenCV 3

أنا أستخدم Raspberry Pi V3 المحدث إلى الإصدار الأخير من Raspbian (Stretch) ، لذا فإن أفضل طريقة لتثبيت OpenCV هي اتباع البرنامج التعليمي الممتاز الذي طوره Adrian Rosebrock: Raspbian Stretch: قم بتثبيت OpenCV 3 + Python على Raspberry Pi الخاص بك.

لقد جربت عدة أدلة مختلفة لتثبيت OpenCV على Pi الخاص بي. البرنامج التعليمي لأدريان هو الأفضل. أنصحك أن تفعل الشيء نفسه ، باتباع إرشاداته خطوة بخطوة.

بمجرد الانتهاء من البرنامج التعليمي لـ Adrian ، يجب أن يكون لديك بيئة افتراضية OpenCV جاهزة لتشغيل تجاربنا على Pi الخاص بك.

دعنا ننتقل إلى بيئتنا الافتراضية ونتأكد من تثبيت OpenCV 3 بشكل صحيح.

ينصح Adrian بتشغيل الأمر "source" في كل مرة تفتح فيها محطة طرفية جديدة للتأكد من أن متغيرات نظامك قد تم إعدادها بشكل صحيح.

المصدر ~ /. Profile

بعد ذلك ، دعنا ندخل إلى بيئتنا الافتراضية:

workon السيرة الذاتية

إذا رأيت النص (cv) يسبق الموجه ، فأنت في بيئة افتراضية للسيرة الذاتية:

(السيرة الذاتية) pi @ raspberry: ~ $يلفت Adrian الانتباه إلى أن بيئة Python الافتراضية للسيرة الذاتية مستقلة تمامًا ومعزولة عن إصدار Python الافتراضي المتضمن في تنزيل Raspbian Stretch. لذلك ، فإن أي حزم Python في دليل حزم المواقع العالمية لن تكون متاحة للبيئة الافتراضية للسيرة الذاتية. وبالمثل ، فإن أي حزم Python مثبتة في حزم الموقع للسيرة الذاتية لن تكون متاحة للتثبيت العالمي لـ Python

الآن ، أدخل مترجم بايثون الخاص بك:

الثعبان

وتأكد من أنك تقوم بتشغيل الإصدار 3.5 (أو أعلى)

داخل المترجم (ستظهر ">>>") ، قم باستيراد مكتبة OpenCV:

استيراد السيرة الذاتية 2

إذا لم تظهر أي رسائل خطأ ، فهذا يعني أن OpenCV مثبت بشكل صحيح على PYTHON VIRTUAL ENVIRONMENT.

يمكنك أيضًا التحقق من تثبيت إصدار OpenCV:

السيرة الذاتية 2. نسخة_

يجب أن يظهر الإصدار 3.3.0 (أو إصدار أعلى يمكن إصداره في المستقبل). يظهر Terminal PrintScreen أعلاه الخطوات السابقة.

الخطوة الثالثة: اختبار الكاميرا

اختبار الكاميرا الخاصة بك
اختبار الكاميرا الخاصة بك

بمجرد تثبيت OpenCV في RPi ، دعنا نختبر للتأكد من أن الكاميرا تعمل بشكل صحيح.

أفترض أن لديك PiCam مثبتًا بالفعل على Raspberry Pi الخاص بك.

أدخل رمز Python أدناه في 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. flip (frame، -1) # قلب الكاميرا عموديًا رمادي = cv2.cvtColor (frame، cv2. COLOR_BGR2GRAY) cv2.imshow ('frame'، frame) cv2.imshow ('gray'، gray) k = cv2.waitKey (30) & 0xff إذا كان k == 27: # اضغط على "ESC" لإنهاء كسر الحد الأقصى.release () cv2.destroyAllWindows ()

سوف يلتقط الكود أعلاه دفق الفيديو الذي سيتم إنشاؤه بواسطة PiCam الخاص بك ، ويعرض كلاهما ، بلون BGR والوضع الرمادي.

لاحظ أنني قمت بتدوير الكاميرا رأسيًا نظرًا لطريقة تجميعها. إذا لم تكن هذه هي حالتك ، فعلق أو احذف سطر الأوامر "flip".

يمكنك بدلاً من ذلك تنزيل الكود من GitHub: simpleCamTest.py

للتنفيذ ، أدخل الأمر:

python simpleCamTest.py

لإنهاء البرنامج ، يجب أن تضغط على مفتاح [ESC] على لوحة المفاتيح.

انقر بالماوس على نافذة الفيديو ، قبل الضغط على [ESC]

الصورة أعلاه تظهر النتيجة.

وجد بعض المصنّعين مشكلات عند محاولة فتح الكاميرا (رسائل الخطأ "فشل التأكيد"). يمكن أن يحدث ذلك إذا لم يتم تمكين الكاميرا أثناء تثبيت OpenCv وبالتالي ، لم يتم تثبيت برامج تشغيل الكاميرا بشكل صحيح. للتصحيح ، استخدم الأمر:

سودو modprobe bcm2835-v4l2

يمكنك أيضًا إضافة bcm2835-v4l2 إلى السطر الأخير من ملف / etc / modules حتى يتم تحميل برنامج التشغيل عند الإقلاع.

لمعرفة المزيد عن OpenCV ، يمكنك اتباع البرنامج التعليمي: تحميل -video-python-opencv-tutorial

الخطوة 4: اكتشاف الوجه

الكشف عن الوجه
الكشف عن الوجه
الكشف عن الوجه
الكشف عن الوجه

إن المهمة الأساسية في التعرف على الوجوه هي بالطبع "اكتشاف الوجه". قبل أي شيء ، يجب أن "تلتقط" وجهًا (المرحلة 1) من أجل التعرف عليه ، عند مقارنته بوجه جديد تم التقاطه في المستقبل (المرحلة 3).

الطريقة الأكثر شيوعًا لاكتشاف وجه (أو أي كائن) ، هي استخدام "مصنف Haar Cascade"

يعد اكتشاف الكائن باستخدام المصنفات المتتالية القائمة على ميزة Haar طريقة فعالة لاكتشاف الكائنات اقترحها بول فيولا ومايكل جونز في ورقتهم ، "الكشف السريع عن الكائن باستخدام سلسلة معززة من الميزات البسيطة" في عام 2001. وهو نهج قائم على التعلم الآلي حيث يتم تدريب وظيفة التسلسل من الكثير من الصور الإيجابية والسلبية. ثم يتم استخدامه لاكتشاف الأشياء في الصور الأخرى.

هنا سنعمل مع اكتشاف الوجه. في البداية ، تحتاج الخوارزمية إلى الكثير من الصور الإيجابية (صور الوجوه) والصور السلبية (الصور بدون وجوه) لتدريب المصنف. ثم نحتاج إلى استخراج الميزات منه. الخبر السار هو أن OpenCV يأتي مع مدرب بالإضافة إلى كاشف. إذا كنت ترغب في تدريب المصنف الخاص بك على أي كائن مثل السيارة والطائرات وما إلى ذلك ، يمكنك استخدام OpenCV لإنشاء واحد. التفاصيل الكاملة معطاة هنا: Cascade Classifier Training.

إذا كنت لا ترغب في إنشاء المصنف الخاص بك ، فإن OpenCV يحتوي بالفعل على العديد من المصنفات المدربة مسبقًا للوجه والعينين والابتسامة وما إلى ذلك. يمكن تنزيل ملفات XML هذه من دليل haarcascades.

نظرية كافية ، لنقم بإنشاء جهاز كشف للوجه باستخدام OpenCV!

قم بتنزيل الملف: faceDetection.py من جيثب الخاص بي.

استيراد numpy كـ np

استيراد 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 (gray، scaleFactor = 1.2، minNeighbours = 5، minSize = (20، 20)) لـ (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] cv2.imshow ('video'، img) k = cv2.waitKey (30) & 0xff إذا كان k == 27: # اضغط على "ESC" لإنهاء كسر الحد الأقصى.release () cv2.destroyAllWindows ()

صدق أو لا تصدق ، الأسطر القليلة أعلاه من التعليمات البرمجية هي كل ما تحتاجه لاكتشاف الوجه باستخدام Python و OpenCV.

عند المقارنة بالشفرة الأخيرة المستخدمة لاختبار الكاميرا ، ستدرك أنه تمت إضافة أجزاء قليلة إليها. لاحظ السطر أدناه:

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

هذا هو السطر الذي يقوم بتحميل "المصنف" (الذي يجب أن يكون في دليل باسم "Cascades /" ، ضمن دليل مشروعك).

بعد ذلك ، سنقوم بتعيين الكاميرا الخاصة بنا وداخل الحلقة ، نقوم بتحميل فيديو الإدخال الخاص بنا في وضع التدرج الرمادي (كما رأينا من قبل).

الآن يجب أن نطلق على وظيفة المصنف الخاصة بنا ، ونمررها ببعض المعلمات المهمة جدًا ، مثل عامل المقياس وعدد الجيران والحد الأدنى لحجم الوجه المكتشف.

الوجوه = faceCascade.detectMultiScale (اللون الرمادي ، المقياس = 1.2 ، الحد الأدنى للجيران = 5 ، الحجم الأدنى = (20 ، 20))

أين،

  • الرمادي هو إدخال الصورة بتدرج الرمادي.
  • scaleFactor هي المعلمة التي تحدد مقدار تقليل حجم الصورة في كل مقياس صورة. يتم استخدامه لإنشاء هرم المقياس.
  • minNeighbours هي معلمة تحدد عدد الجيران الذي يجب أن يكون لكل مستطيل مرشح للاحتفاظ به. الرقم الأعلى يعطي ايجابيات خاطئة أقل.
  • minSize هو الحد الأدنى لحجم المستطيل الذي يمكن اعتباره وجهًا.

ستكتشف الوظيفة الوجوه في الصورة. بعد ذلك ، يجب أن "نحدد" الوجوه في الصورة ، على سبيل المثال ، باستخدام مستطيل أزرق. يتم ذلك باستخدام هذا الجزء من الكود:

لـ (س ، ص ، ث ، ح) في الوجوه:

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]

إذا تم العثور على وجوه ، فإنه يعرض مواضع الوجوه المكتشفة كمستطيل مع الزاوية اليسرى لأعلى (س ، ص) ويكون عرضه "w" وارتفاعه ==> (x ، y ، w ، ح). يرجى الاطلاع على الصورة أعلاه.

بمجرد أن نحصل على هذه المواقع ، يمكننا إنشاء "ROI" (مستطيل مرسوم) للوجه وتقديم النتيجة مع وظيفة imshow ().

قم بتشغيل برنامج Python Script أعلاه في بيئة Python الخاصة بك ، باستخدام Rpi Terminal:

بيثون faceDetection.py

النتيجة:

صورة
صورة

يمكنك أيضًا تضمين المصنفات لـ "اكتشاف العيون" أو حتى "اكتشاف الابتسامة". في هذه الحالات ، سوف تقوم بتضمين وظيفة المصنف ورسم المستطيل داخل حلقة الوجه ، لأنه لن يكون من المنطقي اكتشاف عين أو ابتسامة خارج الوجه.

لاحظ أنه في Pi ، فإن وجود العديد من المصنفات في نفس الكود سيؤدي إلى إبطاء المعالجة ، بمجرد أن تستخدم طريقة الكشف هذه (HaarCascades) قدرًا كبيرًا من القوة الحسابية. على سطح المكتب ، من الأسهل تشغيله.

ستجد على جيثب أمثلة أخرى:

faceEyeDetection.py

faceSmileDetection.py

faceSmileEyeDetection.py

وفي الصورة أعلاه تستطيع أن ترى النتيجة.

يمكنك أيضًا اتباع البرنامج التعليمي أدناه لفهم اكتشاف الوجه بشكل أفضل:

Haar Cascade Object Detection Face & Eye OpenCV Python Tutorial

الخطوة 5: جمع البيانات

جمع البيانات
جمع البيانات
جمع البيانات
جمع البيانات

بادئ ذي بدء ، يجب أن أشكر رامز رجا على عمله الرائع في التعرف على الوجوه على الصور:

التعرف على الوجه باستخدام OPENCV و PYTHON: دليل المبتدئين

وكذلك Anirban Kar ، الذي طور برنامجًا تعليميًا شاملاً للغاية باستخدام الفيديو:

التعرف على الوجه - 3 أجزاء

أوصي حقًا بإلقاء نظرة على كلا الدرسين.

بقول ذلك ، فلنبدأ المرحلة الأولى من مشروعنا. ما سنفعله هنا ، هو البدء من الخطوة الأخيرة (اكتشاف الوجه) ، سنقوم ببساطة بإنشاء مجموعة بيانات ، حيث سنخزن لكل معرف ، مجموعة من الصور باللون الرمادي مع الجزء الذي تم استخدامه لاكتشاف الوجه.

أولاً ، قم بإنشاء دليل حيث تقوم بتطوير مشروعك ، على سبيل المثال ، FacialRecognitionProject:

مشروع التعرف على الوجه mkdir

في هذا الدليل ، إلى جانب البرامج النصية للبيثون الثلاثة التي سننشئها لمشروعنا ، يجب أن نكون قد حفظنا فيها مصنف الوجه. يمكنك تنزيله من جيثب الخاص بي: haarcascade_frontalface_default.xml

بعد ذلك ، أنشئ دليلًا فرعيًا حيث سنخزن عينات الوجه لدينا ونطلق عليها اسم "مجموعة البيانات":

مجموعة بيانات mkdir

وقم بتنزيل الكود من جيثب الخاص بي: 01_face_dataset.py

استيراد السيرة الذاتية 2

import os cam = cv2. VideoCapture (0) cam.set (3، 640) # set video width cam.set (4، 480) # set video height face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # لكل شخص ، أدخل معرف وجه رقمي واحد face_id = إدخال ('\ n أدخل معرف المستخدم ، اضغط ==>') طباعة ("\ n [INFO] تهيئة التقاط الوجه. انظر إلى الكاميرا وانتظر …") # تهيئة عدد الوجوه الفردي لأخذ العينات = 0 while (True): ret، img = cam.read () img = cv2.flip (img، -1) # قلب صورة الفيديو عموديًا رمادي = cv2.cvtColor (img، cv2. COLOR_BGR2GRAY) faces = face_detector.detectMultiScale (الرمادي ، 1.3 ، 5) لـ (x ، y ، w ، h) في الوجوه: cv2.rectangle (img، (x، y)، (x + w، y + h)، (255، 0، 0)، 2) count + = 1 # احفظ الصورة الملتقطة في مجلد مجموعات البيانات cv2.imwrite ("مجموعة البيانات / المستخدم." + str (face_id) + '.' + str (count) + ".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 إنها طباعة تنظيف ("\ n [INFO] برنامج الخروج وأشياء التنظيف") cam.release () cv2.destroyAllWindows ()

الكود مشابه جدًا للرمز الذي رأيناه لاكتشاف الوجه. ما أضفناه هو "أمر إدخال" لالتقاط معرف المستخدم ، والذي يجب أن يكون عددًا صحيحًا (1 ، 2 ، 3 ، إلخ)

face_id = input ('\ n أدخل معرف المستخدم ، اضغط ==>')

ولكل إطار من الإطارات الملتقطة ، يجب أن نحفظه كملف في دليل "مجموعة البيانات":

cv2.imwrite ("مجموعة البيانات / المستخدم" + str (face_id) + '.' + str (count) + ".jpg" ، رمادي [y: y + h ، x: x + w])

لاحظ أنه لحفظ الملف أعلاه ، يجب أن تقوم باستيراد المكتبة "os". سيتبع اسم كل ملف الهيكل:

User.face_id.count.jpg

على سبيل المثال ، بالنسبة لمستخدم لديه face_id = 1 ، سيكون نموذج الملف الرابع في مجموعة البيانات / الدليل شيئًا مثل:

User.1.4.jpg

كما هو موضح في الصورة أعلاه من Pi الخاص بي. في الكود الخاص بي ، أقوم بالتقاط 30 عينة من كل معرف. يمكنك تغييره في آخر "أليف". يتم استخدام عدد العينات لكسر الحلقة حيث يتم التقاط عينات الوجه.

قم بتشغيل نص Python والتقاط بعض المعرفات. يجب عليك تشغيل البرنامج النصي في كل مرة تريد فيها تجميع مستخدم جديد (أو تغيير الصور لمستخدم موجود بالفعل).

الخطوة السادسة: المدرب

مدرب
مدرب

في هذه المرحلة الثانية ، يجب أن نأخذ جميع بيانات المستخدم من مجموعة البيانات الخاصة بنا و "المدرب" أداة التعرف على OpenCV. يتم ذلك مباشرة عن طريق وظيفة OpenCV محددة. ستكون النتيجة ملف.yml سيتم حفظه في دليل "المدرب /".

لذلك ، لنبدأ في إنشاء دليل فرعي حيث سنخزن البيانات المدربة:

mkdir المدرب

قم بتنزيل نص python الثاني من GitHub: 02_face_training.py

استيراد السيرة الذاتية 2

استيراد numpy كـ np من PIL استيراد صورة نظام التشغيل # مسار لقاعدة بيانات صورة الوجه = أداة التعرف على "مجموعة البيانات" = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") ؛ # وظيفة للحصول على الصور وبيانات التسمية getImagesAndLabels (المسار): imagePaths = [os.path.join (المسار ، f) لـ f في os.listdir (المسار)] faceSamples = ids = لـ imagePath في imagePaths: PIL_img = Image.open (imagePath).convert ('L') # قم بتحويله إلى تدرج رمادي img_numpy = np.array (PIL_img، 'uint8') id = int (os.path.split (imagePath) [- 1]. Split (".") [1]) faces = detector.detectMultiScale (img_numpy) لـ (x، y، w، h) في الوجوه: faceSamples.append (img_numpy [y: y + h، x: x + w]) ids.append (المعرف) يُرجع الوجه ، العينات ، طباعة المعرفات ("\ n [INFO] وجوه التدريب. سيستغرق بضع ثوان. انتظر …") الوجوه ، المعرفات = getImagesAndLabels (المسار) ، أداة التعرف. (الوجوه ، np.array (ids)) # احفظ النموذج في trainer / trainer. ("\ n [INFO] {0} وجوه تم تدريبها. الخروج من البرنامج".format (len (np.unique (ids))))

تأكد مما إذا كان لديك مكتبة PIL مثبتة على Rpi الخاص بك. إذا لم يكن كذلك ، فقم بتشغيل الأمر أدناه في Terminal:

وسادة تثبيت نقطة

سوف نستخدم أداة التعرف على الوجوه LBPH (LOCAL BINARY PATTERNS HISTOGRAMS) كأداة التعرف ، المتضمنة في حزمة OpenCV. نقوم بذلك في السطر التالي:

أداة التعرف = cv2.face. LBPHFaceRecognizer_create ()

ستلتقط الوظيفة "getImagesAndLabels (المسار)" جميع الصور في الدليل: "مجموعة البيانات /" ، وتعيد صفيفتين: "المعرفات" و "الوجوه". باستخدام هذه المصفوفات كمدخلات ، سنقوم "بتدريب أداة التعرف الخاصة بنا":

أداة التعرف (الوجوه والمعرفات)

نتيجة لذلك ، سيتم حفظ ملف باسم "trainer.yml" في دليل المدرب الذي أنشأناه مسبقًا.

هذا كل شيء! لقد قمت بتضمين آخر بيان طباعة حيث عرضته للتأكيد ، عدد وجوه المستخدم التي دربناها.

في كل مرة تقوم فيها بتنفيذ المرحلة 1 ، يجب أيضًا تشغيل المرحلة 2

الخطوة 7: أداة التعرف

أداة التعرف
أداة التعرف
أداة التعرف
أداة التعرف

الآن ، وصلنا إلى المرحلة النهائية من مشروعنا. هنا ، سنلتقط وجهًا جديدًا على الكاميرا الخاصة بنا ، وإذا كان هذا الشخص قد تم التقاط وجهه وتدريبه من قبل ، فسيقوم أداة التعرف لدينا "بالتنبؤ" بإعادة معرفه وفهرس ، موضحًا مدى ثقة أداة التعرف في هذه المباراة.

لنقم بتنزيل برنامج python من المرحلة الثالثة من GitHub: 03_face_recognition.py.

استيراد السيرة الذاتية 2

استيراد numpy كـ np import os أداة التعرف = cv2.face. LBPHFaceRecognizer_create () Recognizer.read ('trainer / trainer.yml') cascadePath = "haarcascade_frontalface_default.xml" faceCascade = cv2. CascadeClassifier (cascadePath) ؛ font = cv2. FONT_HERSHEY_SIMPLEX #iniciate id counter id = 0 # أسماء مرتبطة بالمعرفات: example ==> Marcelo: id = 1، etc names = ['None'، 'Marcelo'، 'Paula'، 'Ilza'، 'Z '،' W '] # التهيئة والبدء في كاميرا التقاط الفيديو في الوقت الفعلي = cv2. VideoCapture (0) cam.set (3 ، 640) # set video widht cam.set (4 ، 480) # set video height # Define min window size ليتم التعرف عليه كوجه minW = 0.1 * cam.get (3) minH = 0.1 * cam.get (4) بينما صحيح: ret ، img = cam.read () img = cv2.flip (img، -1) # قلب رأسيًا رمادي = cv2.cvtColor (img، cv2. COLOR_BGR2GRAY) وجوه = faceCascade.detectMultiScale (رمادي ، scaleFactor = 1.2 ، minNeighbours = 5 ، minSize = (int (minW) ، int (minH)) ،) لـ (x، y ، w، h) في الوجوه: cv2.rectangle (img، (x، y)، (x + w، y + h)، (0، 255، 0)، 2) id، trust = Recognizer.predict (gray [y: y + h، x: x + w]) # تحقق مما إذا كانت الثقة أقل منها 100 ==> "0" تطابق تام إذا (الثقة <100): id = names [id] trust = "{0}٪ ".format (round (100 - trust)) else: id =" unknown "trust =" {0}٪ ". format (round (100 - conf idence)) cv2.putText (img، str (id)، (x + 5، y-5)، font، 1، (255، 255، 255)، 2) cv2.putText (img ، str (ثقة) ، (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] برنامج الخروج وأشياء التنظيف") cam.release () cv2.destroyAllWindows ()

نقوم هنا بتضمين مصفوفة جديدة ، لذلك سنعرض "أسماء" ، بدلاً من المعرفات المرقمة:

أسماء = ['None'، 'Marcelo'، 'Paula'، 'Ilza'، 'Z'، 'W']

لذلك ، على سبيل المثال: سوف يقوم Marcelo بالمستخدم مع id = 1 ؛ باولا: معرف = 2 ، إلخ.

بعد ذلك ، سوف نكتشف وجهًا ، كما فعلنا من قبل مع مصنف haasCascade. بعد اكتشاف وجه يمكننا استدعاء الوظيفة الأكثر أهمية في الكود أعلاه:

المعرف ، الثقة = أداة التعرف ، التنبؤ (الجزء الرمادي من الوجه)

ستتخذ أداة Recognizer.predict () كمعامل جزءًا تم التقاطه من الوجه ليتم تحليله وسيعيد مالكه المحتمل ، مشيرًا إلى معرفه ومدى ثقة أداة التعرف فيما يتعلق بهذه المطابقة.

لاحظ أن مؤشر الثقة سيعود "صفر" إذا كان سيعتبر تطابقًا مثاليًا

وأخيرًا ، إذا تمكنت أداة التعرف من توقع وجه ، فإننا نضع نصًا فوق الصورة بالمعرف المحتمل ومقدار "الاحتمال" بالنسبة المئوية لصحة المطابقة ("الاحتمال" = 100 - مؤشر الثقة). إذا لم يكن الأمر كذلك ، فسيتم وضع ملصق "غير معروف" على الوجه.

أدناه صورة-g.webp

صورة
صورة

في الصورة أعلاه ، أعرض بعض الاختبارات التي تم إجراؤها باستخدام هذا المشروع ، حيث استخدمت أيضًا الصور للتحقق مما إذا كان أداة التعرف تعمل أم لا.

الخطوة 8: الخاتمة

استنتاج
استنتاج

كما هو الحال دائمًا ، آمل أن يساعد هذا المشروع الآخرين في العثور على طريقهم إلى عالم الإلكترونيات المثير!

للحصول على التفاصيل والرمز النهائي ، يرجى زيارة مستودع GitHub الخاص بي: OpenCV-Face-Recognition

لمزيد من المشاريع ، يرجى زيارة مدونتي: MJRoBot.org

فيما يلي لمحة عن برنامج تعليمي مستقبلي ، حيث سنستكشف "المسار التلقائي للوجه والطرق الأخرى لاكتشاف الوجه":

صورة
صورة

Saludos من جنوب العالم!

نراكم في بلدي التعليمات القادمة!

شكرا لك،

مارسيلو

موصى به: