هل تساءلت يومًا عن كيفية تطبيق Snapchat لمرشحات مختلفة بدقة على وجهك؟ هل يقوم هاتفك الذكي بأداء السحر عند فتحه باستخدام ميزات وجهك؟ لا ، أنت فقط تشاهد ميزة اكتشاف الوجه أثناء العمل.
اكتشاف الوجه هو تقنية ذكاء اصطناعي يمكنها التعرف على الوجوه البشرية في صورة رقمية أو مقطع فيديو. اكتشف كيف يمكنك إنشاء برنامج لاكتشاف الوجه في الوقت الفعلي في أقل من 25 سطرًا من التعليمات البرمجية باستخدام خوارزمية Haar Cascade الأسطورية.
ما هو Haar Cascade؟
Haar Cascade هي خوارزمية لاكتشاف الكائنات قدمها Paul Viola و Michael Jones لاكتشاف الوجوه في الصور أو مقاطع الفيديو. يتم تدريب وظيفة التسلسل باستخدام العديد من الصور الإيجابية والسلبية التي يمكن استخدامها لاحقًا لتحديد أي كائن أو وجه في وسائط أخرى. تتوفر هذه الملفات المدربة في ملف مستودع OpenCV GitHub.
باستخدام نهج النافذة المنزلقة ، تتكرر نافذة ذات حجم ثابت فوق صورة من اليسار إلى اليمين ، ومن أعلى إلى أسفل. في كل مرحلة ، تتوقف النافذة وتصنف إذا كانت المنطقة تحتوي على وجه أم لا.
OpenCV ، أداة رؤية حاسوبية ، تعمل مع نموذج Haar Cascade مدرب مسبقًا لتصنيف الميزات. تتحقق كل مرحلة من خمس ميزات: ميزتان للحواف وميزات خطيتان وميزة واحدة من أربعة مستطيلات.
عند الملاحظة ، تظهر منطقة العين أغمق من منطقة الخد بينما تبدو منطقة الأنف أكثر إشراقًا من منطقة العين. يمكنك تصور هذه الميزات بالطريقة أدناه.
باستخدام هذه الميزات وحساب وحدات البكسل ، تحدد الخوارزمية أكثر من 100000 نقطة بيانات. يمكنك بعد ذلك استخدام خوارزمية Adaboost لتحسين الدقة وتجاهل الميزات غير ذات الصلة. على مدى العديد من التكرارات ، يقلل هذا الأسلوب من معدل الخطأ ويزيد من وزن الميزة حتى تحقق دقة مقبولة.
ومع ذلك ، تتوقف تقنية النافذة المنزلقة إذا فشلت حالة اختبار معينة وكانت مكلفة من الناحية الحسابية. لحل هذه المشكلة ، يمكنك تطبيق مفهوم Cascade of Classifiers. بدلاً من تطبيق جميع الميزات في نافذة واحدة ، يقوم هذا النهج بتجميعها وتطبيقها على مراحل.
إذا فشلت النافذة في المرحلة الأولى ، تتجاهلها العملية ، وإلا فإنها تستمر. يؤدي هذا إلى انخفاض كبير في عدد العمليات التي يجب إجراؤها ويجعلها قابلة للاستخدام في تطبيقات الوقت الفعلي.
سير عمل اكتشاف الوجه
اتبع هذه الخوارزمية لبناء برنامج اكتشاف الوجه الخاص بك:
- قم بتحميل خوارزمية Haar Cascade Frontal Face.
- قم بتهيئة الكاميرا.
- اقرأ الإطارات من الكاميرا.
- تحويل الصور الملونة إلى درجات رمادية.
- احصل على إحداثيات الوجه.
- ارسم مستطيلاً وضع الرسالة المناسبة.
- اعرض الخرج.
ما هو OpenCV؟
OpenCV عبارة عن مكتبة مفتوحة المصدر لرؤية الكمبيوتر والتعلم الآلي. يحتوي على أكثر من 2500 خوارزمية محسّنة لتطبيقات مختلفة. يتضمن ذلك اكتشاف الوجه / الكائن ، والتعرف عليه ، والتصنيف ، وغير ذلك الكثير.
خصوصية بيانات وجهك هو مصدر قلق منفصل. تستخدم مئات الشركات البارزة مثل Google و IBM و Yahoo OpenCV في تطبيقاتها. أظهر بعض الأشخاص الذين يهدفون إلى الحفاظ على خصوصية بياناتهم هناك طرق لتجنب التعرف على الوجه.
لتثبيت OpenCV في Python ، استخدم الأمر:
نقطة ثَبَّتَ opencv- الثعبان
كيفية بناء برنامج اكتشاف الوجه باستخدام بايثون
اتبع هذه الخطوات لبناء جهاز كشف الوجه:
يتوفر رمز المثال هذا ، جنبًا إلى جنب مع ملف خوارزمية Haar Cascade ، في ملف مستودع جيثب وهو مجاني لك لاستخدامه بموجب ترخيص MIT.
- تحميل Haar Cascade Frontal Face افتراضي XML ملف ووضعه في نفس موقع برنامج بايثون الخاص بك.
- قم باستيراد مكتبة OpenCV.
# استيراد المكتبات المطلوبة
يستورد السيرة الذاتية 2 - قم بتخزين ملف خوارزمية Haar Cascade Frontal Face لسهولة الرجوع إليه.
# تحميل ملف خوارزمية حالة هار في متغير alg
alg = "haarcascade_frontalface_default.xml" - استخدم فئة CascadeClassifier لتحميل ملف XML في OpenCV.
# تمرير الخوارزمية إلى OpenCV
haar_cascade = cv2.CascadeClassifier (alg) - التقط الفيديو من الكاميرا. مرر 0 إلى التقاط الفيديو() وظيفة لاستخدام الكاميرا الأساسية الخاصة بك. إذا قمت بتوصيل كاميرا خارجية ، فيمكنك استخدام الأرقام المتتالية 1 و 2 وما إلى ذلك لاستخدامها بدلاً من ذلك.
# التقاط تغذية الفيديو من الكاميرا
cam = cv2.VideoCapture (0) - قم بإعداد حلقة لا نهائية لقراءة إطار إدخال الكاميرا بإطار. ال يقرأ() تقوم الدالة بإرجاع معلمتين. القيمة الأولى من النوع المنطقي تشير إلى ما إذا كانت العملية ناجحة أم لا. تحتوي المعلمة الثانية على الإطار الفعلي الذي ستعمل معه. قم بتخزين هذا الإطار في ملف IMG عامل.
بينماحقيقي:
_، img = cam.read () - قم بتعيين النص الافتراضي ليظهر بتنسيق لم يتم الكشف عن الوجه. عند الكشف عنها ، قم بتحديث قيمة هذا المتغير.
نص = "لم يتم الكشف عن الوجه"
- المدخلات الواردة من العالم الحقيقي ملونة ، بتنسيق BGR. BGR تعني الأزرق والأخضر والأحمر. هذا يخلق الكثير من المعالجة لتطبيقات رؤية الكمبيوتر. لتقليل هذا ، استخدم تنسيق تدرج الرمادي.
تمرير الإطار وتنسيق رمز التحويل ، COLOR_BGR2GRAY، ل اللون () لتغيير كل إطار من إطارات الفيديو من الألوان إلى التدرج الرمادي.# تحويل كل إطار من BGR إلى Grayscale
GrayImg = cv2.cvtColor (img، cv2.COLOR_BGR2GRAY) - يستخدم DiscoverMultiScale () لاكتشاف الوجوه. تأخذ هذه الطريقة ثلاث معلمات كمدخلات. الأول هو الصورة المصدر ، اللون الرمادي. المعلمة الثانية هي scaleFactor. هذا يحدد مقدار ما يجب عليك تقليل حجم الصورة في كل مقياس صورة. استخدم القيمة الافتراضية 1.3 كعامل تغيير الحجم. كلما زاد عامل المقياس ، قل عدد الخطوات ، وكان التنفيذ أسرع. ومع ذلك ، هناك أيضًا احتمال أكبر بفقدان الوجوه. المعلمة الثالثة هي minNeighbours. يحدد هذا عدد الجيران الذي يجب أن يحتفظ به كل مستطيل مرشح. كلما ارتفعت القيمة ، قلت فرصة الحصول على نتيجة إيجابية خاطئة ، ولكن هذا يعني أيضًا فقدان آثار وجه غير واضحة.
# اكتشاف الوجوه باستخدام Haar Cascade
الوجه = haar_cascade.detectMultiScale (greyImg، 1.3، 4) - عندما تكتشف وجهًا ، تحصل على أربعة إحداثيات. يمثل x إحداثي x ، ويمثل y إحداثي y ، ويمثل w العرض ، ويمثل h الارتفاع. قم بتحديث النص إلى تم اكتشاف الوجه وارسم مستطيلاً باستخدام هذه الإحداثيات. لون المستطيل أخضر (BGR) بسماكة 2 بكسل.
# ارسم مستطيلاً حول الوجه وقم بتحديث النص إلى Face Detected
من أجل (س ، ص ، ث ، ح) في الوجه:
نص = "تم اكتشاف الوجه"
السيرة الذاتية 2.مستطيل(IMG, (x, ذ), (x + ث, ذ + ح), (0, 255, 0), 2) - اختياريا طباعة النص على وحدة الإخراج. اعرض النص على الشاشة باستخدام الإطار الملتقط كمصدر ، النص كما تم الحصول عليه في النص أعلاه ، الخط نمط FONT_HERSHEY_SIMPLEX وعامل مقياس الخط 1 واللون الأزرق وسمك ثنائي البكسل ونوع خط AA.
# عرض النص على الصورة
مطبعة(نص)
image = cv2.putText (img، text، (50، 50)، cv2.FONT_HERSHEY_SIMPLEX، 1، (255، 0، 0)، 2، cv2.LINE_AA) - اعرض النافذة بالعنوان الكشف عن الوجه والصورة. استخدم ال مفتاح الانتظار () طريقة لعرض النافذة لمدة 10 مللي ثانية والتحقق من الضغط على مفتاح. إذا ضغط المستخدم على ملف خروج key (ASCII Value 27) ، اخرج من الحلقة.
# اعرض نافذة الإخراج واضغط على مفتاح الهروب للخروج
cv2.imshow ("الكشف عن الوجه"، صورة)
مفتاح = cv2.waitKey (10)إذا كان المفتاح == 27:
استراحة - أخيرًا ، حرر كائن الكاميرا من برنامج python وأغلق جميع النوافذ.
كام.يطلق()
السيرة الذاتية 2.destroyAllWindows()
اكتشاف الوجه باستخدام Python أثناء العمل
عندما يتم عرض الوجه ، يجب أن ترى الإخراج مثل هذا:
في حالة عدم وجود وجه ، سترى رسالة مثل هذه:
حدود اكتشاف الوجه باستخدام خوارزمية Haar Cascade
في حين أن هذه الخوارزمية خفيفة الوزن ، مع حجم نموذج صغير ، وتعمل بسرعة ، إلا أن هناك بعض القيود:
- في فيديو الوقت الفعلي ، يجب أن يكون الوجه في خط رؤية الكاميرا. إذا كان الوجه بعيدًا جدًا أو قريبًا جدًا أو مائلًا جدًا ، تفشل الخوارزمية في التقاط الميزات.
- إنها خوارزمية للوجه الأمامي ، لذا لا يمكنك اكتشاف المناظر الجانبية.
- نتائج إيجابية خاطئة عالية. غالبًا ما يكتشف مناطق مثل الوجوه على الرغم من عدم وجود وجه.
- يحتاج إلى ظروف إضاءة مثالية. تؤدي الإضاءة الزائدة أو الخافتة إلى إعاقة دقة الخوارزمية.
التطبيقات العديدة لاكتشاف الوجه
يحتوي اكتشاف الوجه على مجموعة واسعة من التطبيقات في عالم اليوم. يمكنك استخدامه للتعرف على الوجوه في الهواتف الذكية والمنازل والمركبات ونقاط التفتيش الخاصة بالهجرة. يعد اكتشاف الوجه شائعًا بالفعل في مراقبة الدوائر التلفزيونية المغلقة وفلاتر الوسائط الاجتماعية والتتبع التلقائي للوجه في التصوير السينمائي.
إنها مجرد بداية لهذه التكنولوجيا الرائعة. مع التقدم ، قد نتمكن من التعرف على الأطفال المفقودين ، والقبض على المجرمين ، ومنع الجرائم مثل سرقة الهوية.