- المكونات مطلوبة
- تثبيت OpenCV في Raspberry Pi
- كيفية الكشف عن أجزاء الوجه باستخدام dlib
- برمجة Raspberry Pi لاكتشاف معالم الوجه
- اختبار أداة التعرف على أجزاء الوجه
الكشف عن معالم الوجه هي عملية الكشف عن أجزاء مختلفة من الوجه مثل الحاجبين والعينين والأنف والفم والفك. هناك العديد من التطبيقات التي تستخدم تقنيات اكتشاف معالم الوجه.
في السابق قمنا ببناء نظام التعرف على الوجوه باستخدام OpenCV ، واليوم سنستخدم نفس OpenCV مع Raspberry Pi لاكتشاف معالم الوجه. سيتم استخدام وحدة الكشف عن معالم الوجه المدربة مسبقًا من مكتبة dlib للكشف عن موقع هياكل الوجه الرئيسية على الوجه وسيتم استخدام Python OpenCV لتصور أجزاء الوجه المكتشفة.
المكونات مطلوبة
مكونات الأجهزة
- Raspberry Pi 3
- وحدة الكاميرا Pi
البرامج والخدمات عبر الإنترنت
- OpenCV
- دليب
- بايثون 3
قبل الشروع في اكتشاف Raspberry Pi 3 Facial Landmark ، أولاً ، نحتاج إلى تثبيت OpenCV و imutils و dlib و Numpy وبعض التبعيات الأخرى في هذا المشروع. يتم استخدام OpenCV هنا لمعالجة الصور الرقمية. أكثر تطبيقات معالجة الصور الرقمية شيوعًا هي اكتشاف الكائنات والتعرف على الوجوه وعداد الأشخاص.
لمعرفة المزيد حول كيفية واجهة كاميرا Pi مع Raspberry Pi ، اتبع دروسنا السابقة.
تثبيت OpenCV في Raspberry Pi
هنا سيتم استخدام مكتبة OpenCV لماسح ضوئي Raspberry Pi QR. لتثبيت OpenCV ، قم أولاً بتحديث Raspberry Pi.
sudo apt-get update
ثم قم بتثبيت التبعيات المطلوبة لتثبيت OpenCV على Raspberry Pi الخاص بك.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –y sudo apt-get install libqt4-test –y
بعد ذلك ، قم بتثبيت OpenCV في Raspberry Pi باستخدام الأمر أدناه.
تثبيت pip3 opencv-Contrib-python == 4.1.0.25
استخدمنا في السابق OpenCV مع Raspberry pi وأنشأنا الكثير من البرامج التعليمية عليه.
- تثبيت OpenCV على Raspberry Pi باستخدام CMake
- التعرف على الوجوه في الوقت الحقيقي باستخدام Raspberry Pi و OpenCV
- التعرف على لوحة الترخيص باستخدام Raspberry Pi و OpenCV
- تقدير حجم الحشد باستخدام OpenCV و Raspberry Pi
لقد أنشأنا أيضًا سلسلة من دروس OpenCV التعليمية بدءًا من مستوى المبتدئين.
تثبيت imutils : يستخدم imutils لتنفيذ بعض وظائف معالجة الصور الضرورية مثل الترجمة ، والتناوب ، وتغيير الحجم ، والهيكل العظمي ، وعرض صور Matplotlib بشكل أسهل باستخدام OpenCV. لذا قم بتثبيت imutils باستخدام الأمر أدناه:
pip3 تثبيت imutils
تثبيت dlib: dlib هو مجموعة الأدوات الحديثة التي تحتوي على خوارزميات وأدوات التعلم الآلي لمشاكل العالم الحقيقي. استخدم الأمر أدناه لتثبيت dlib.
pip3 تثبيت dlib
تثبيت NumPy : NumPy هي المكتبة الأساسية للحوسبة العلمية التي تحتوي على كائن مصفوفة قوية ذات أبعاد n ، وتوفر أدوات لدمج C ، C ++ ، إلخ.
تثبيت Pip3 numpy
كيفية الكشف عن أجزاء الوجه باستخدام dlib
سنستخدم كاشف معالم الوجه المدربين مسبقًا في مكتبة dlib للكشف عن موقع 68 (س ، ص) - تنسق تلك الخريطة لتراكيب الوجه على الوجه. تم تدريب مؤشر معالم الوجه dlib على مجموعة بيانات iBUG 300-W. فيما يلي صورة تحتوي على فهارس الإحداثيات الـ 68:
برمجة Raspberry Pi لاكتشاف معالم الوجه
يتم تقديم رمز Python الكامل للتعرف على أجزاء الوجه باستخدام كاشف معالم الوجه المدربين مسبقًا من dlib في نهاية الصفحة. نوضح هنا بعض الأجزاء المهمة من الكود من أجل فهم أفضل.
لذا ، كالعادة ، ابدأ الكود بتضمين جميع المكتبات المطلوبة.
من imutils استيراد face_utils استيراد numpy كما np استيراد argparse استيراد imutils استيراد dlib استيراد cv2 من picamera.array استيراد PiRGBArray من picamera استيراد PiCamera
ثم قم بتهيئة كائن الكاميرا واضبط الدقة على (640 ، 480) ومعدل الإطارات بمعدل 30 إطارًا في الثانية
camera = PiCamera () camera.resolution = (640 ، 480) camera.framerate = 30
الآن في السطور التالية ، استخدم محلل الوسيطة لتوفير المسار إلى مؤشر معالم الوجه.
ap = argparse.ArgumentParser () ap.add_argument ("- p"، "- shape-توقع"، مطلوب = صحيح ، مساعدة = "مسار توقع معالم الوجه") args = vars (ap.parse_args ())
في السطور التالية ، قم بتهيئة كاشف الوجه المدرب مسبقًا على HOG dlib وقم بتحميل مؤشر معالم الوجه المدربين مسبقًا.
detector = dlib.get_frontal_face_detector () المتنبئ = dlib.shape_predictor (args)
ثم استخدم وظيفة capture_continuous لبدء التقاط الإطارات من كاميرا Raspberry Pi.
للإطار في 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" لالتقاط إطار معين. ثم قم بتغيير حجم الصورة الملتقطة وتحويلها إلى تدرج رمادي.
إذا كان المفتاح == ord ("s"): image = imutils.resize (image، width = 400) gray = cv2.cvtColor (image، cv2.COLOR_BGR2GRAY)
استخدم وظيفة الكاشف في مكتبة dlib لاكتشاف الوجوه في الصورة الملتقطة.
rect = كاشف (رمادي ، 1)
التقط الصورة التي تم إجراء اكتشاف الوجه عليها ، وحدد معالم الوجه ، وقم بتحويل النقاط الـ 68 إلى مصفوفة NumPy. قم بعمل حلقة فوق كل منطقة من مناطق الوجه على حدة.
لـ (i ، rect) في التعداد (rect): الشكل = توقع (رمادي ، مستطيل) الشكل = face_utils.shape_to_np (شكل)
ثم، أخذ نسخة من الصورة الأصلية واستخدام ذلك ل حلقة رسم اسم الجزء الوجه على الصورة. سيكون لون النص أحمر ، يمكنك تغييره إلى لون آخر عن طريق تغيير قيم RGB.
لـ (name، (i، j)) في face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (استنساخ ، الاسم ، (10 ، 30) ، cv2.FONT_HERSHEY_SIMPLEX ، 0.7 ، (0 ، 0 ، 255) ، 2)
الآن سنقوم بعمل حلقة فوق أجزاء الوجه المكتشفة ونستخدم وظيفة رسم OpenCV لرسم دوائر على أجزاء الوجه هذه. يمكنك متابعة مستند OpenCV هذا لمزيد من المعلومات حول وظائف الرسم
لـ (س ، ص) في الشكل: cv2.circle (استنساخ ، (س ، ص) ، 1 ، (0 ، 0 ، 255) ، -1)
الآن في السطور التالية ، سنستخرج كل جزء وجه كصورة منفصلة عن طريق حساب المربع المحيط لإحداثيات جزء وجه معين. سيتم تغيير حجم الصورة المستخرجة إلى 250 بكسل.
(x، y، w، h) = cv2.boundingRect (np.array (])) roi = image roi = imutils.resize (roi، width = 250، inter = cv2.INTER_CUBIC)
الآن في الأسطر الأخيرة من الكود ، اعرض أجزاء الوجه بأسمائها وصورة منفصلة لذلك الجزء. استخدم مفتاح ESC لتغيير منطقة الوجه.
cv2.imshow ("ROI"، roi) cv2.imshow ("صورة" ، استنساخ) cv2.waitKey (0)
اختبار أداة التعرف على أجزاء الوجه
لاختبار المشروع ، قم بإنشاء دليل وانتقل إليه باستخدام الأوامر التالية:
مكدير الوجه جزء كاشف القرص المضغوط الوجه جزء كاشف
الآن قم بتنزيل ملف shape_predictor_68_face_landmarks.dat من هذا الرابط ، ثم قم باستخراج ونسخ ملف shape_predictor_68_face_landmarks.dat داخل هذه المكتبة ، ثم افتح ملفًا جديدًا باسم Discover.py والصق الرمز الوارد أدناه.
الآن قم بتشغيل كود python باستخدام الأمر التالي:
python3 detect.py - شكل توقع الشكل_المتوقع_68_face_landmarks.dat
سترى نافذة تعرض منظرًا مباشرًا من الكاميرا. ثم اضغط على مفتاح "S" لتحديد إطار من البث المباشر. سترى نقاطًا حمراء على منطقة فمك. استخدم مفتاح ESC لرؤية أجزاء الوجه الأخرى.
كود الثعبان الكامل والفيديو التوضيحي موضحة أدناه.