إنشاء نموذج التعرف على الوجوه باستخدام التعلم العميق في بيثون

قامت إيلينا بورنوفولوكوفا المترجمة خصيصًا لـ Netology بتكييف مقال بقلم فايزان شيخ حول كيفية إنشاء نموذج للتعرف على الوجوه وفي المجالات التي يمكن تطبيقها.

مقدمة


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

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

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


التعرف على الوجوه: التطبيقات المحتملة


فيما يلي بعض المجالات المحتملة لتطبيق تقنية التعرف على الوجوه.

التعرف على الوجوه في الشبكات الاجتماعية . حل Facebook محل العلامات اليدوية للصور مع اقتراحات علامات تم إنشاؤها تلقائيًا لكل صورة تم تحميلها على النظام الأساسي. يستخدم Facebook خوارزمية التعرف على الوجوه البسيطة لتحليل البكسلات في الصورة ومقارنتها مع المستخدمين المعنيين.

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


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



إعداد النظام: متطلبات الأجهزة والبرامج


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

استخدمت الأدوات التالية التي أوصي بها لك:

  • كاميرا ويب (Logitech C920) لإنشاء نموذج التعرف على الوجه في الوقت الحقيقي على كمبيوتر محمول Lenovo E470 ThinkPad (Core i5 7th Gen). يمكنك أيضًا استخدام الكاميرا المدمجة أو كاميرا الفيديو المدمجة في الكمبيوتر المحمول مع أي نظام مناسب لتحليل الفيديو في الوقت الفعلي بدلاً من تلك التي استخدمتها.
  • يفضل استخدام معالج رسومات لمعالجة الفيديو بشكل أسرع.
  • استخدمنا نظام التشغيل Ubuntu 18.04 مع جميع البرامج اللازمة.

قبل المضي قدمًا في بناء نموذج التعرف على الوجوه ، سنحلل هذه النقاط بمزيد من التفصيل.

الخطوة 1: إعداد الأجهزة


تحقق مما إذا تم تكوين الكاميرا بشكل صحيح. مع Ubuntu ، هذا بسيط: معرفة ما إذا كان الجهاز معترف به من قبل نظام التشغيل. للقيام بذلك ، اتبع الخطوات التالية:

  1. قبل توصيل كاميرا الويب بجهاز الكمبيوتر المحمول ، تحقق من جميع أجهزة الفيديو المتصلة عن طريق كتابة ls /dev/video* في موجه الأوامر. نتيجة لذلك ، تظهر قائمة بجميع أجهزة الفيديو المتصلة بالنظام.
  2. قم بتوصيل كاميرا الويب وإصدار الأمر مرة أخرى. إذا كانت كاميرا الويب متصلة بشكل صحيح ، فسوف ينعكس الجهاز الجديد كنتيجة للأمر.
  3. يمكنك أيضًا استخدام برنامج كاميرا الويب للتحقق من التشغيل الصحيح. يمكن لأوبونتو استخدام برنامج الجبن لهذا الغرض.

الخطوة 2: إعداد البرنامج


الخطوة 2.1: تثبيت بيثون

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

الخطوة 2.2: تثبيت OpenCV

OpenCV هي مكتبة مفتوحة المصدر مصممة لإنشاء تطبيقات رؤية الكمبيوتر. يتم تثبيت OpenCV باستخدام pip :

 pip3 install opencv-python 

الخطوة 2.3: تعيين face_recognition API

face_recognition API ، والتي تعتبر واجهة برمجة تطبيقات التعرف على الوجوه الأسهل في Python في العالم. للتثبيت ، استخدم:

 pip install dlib pip install face_recognition 

التنفيذ


بعد إعداد النظام ، ننتقل إلى التنفيذ. للبدء ، سنقوم بإنشاء برنامج ومن ثم شرح ما فعلناه.

تجول


قم face_detector.py ملف face_detector.py ثم انسخ الرمز أدناه:

 # import libraries import cv2 import face_recognition # Get a reference to webcam video_capture = cv2.VideoCapture("/dev/video1") # Initialize variables face_locations = [] while True: # Grab a single frame of video ret, frame = video_capture.read() # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses) rgb_frame = frame[:, :, ::-1] # Find all the faces in the current frame of video face_locations = face_recognition.face_locations(rgb_frame) # Display the results for top, right, bottom, left in face_locations:  # Draw a box around the face  cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) # Display the resulting image cv2.imshow('Video', frame) # Hit 'q' on the keyboard to quit! if cv2.waitKey(1) & 0xFF == ord('q'):  break # Release handle to the webcam video_capture.release() cv2.destroyAllWindows() 

ثم قم بتشغيل ملف Python هذا عن طريق كتابة:

 python face_detector.py 

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


لتلخيص وشرح ما فعله الكود:

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

مثال على تطبيق التعرف على الوجوه


هذا ليس كل المرح ينتهي. سنفعل شيئًا رائعًا واحدًا: سنقوم بإنشاء مثال مكتمل للتطبيق استنادًا إلى الكود أعلاه. سنقوم بإجراء تغييرات صغيرة على الشفرة وسيكون كل شيء جاهزًا.

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



دعونا معرفة كيفية القيام بذلك. على سبيل المثال ، اخترت مقطع فيديو على YouTube مع خطاب للمتحدثين في مؤتمر DataHack Summit 2017.

أولاً ، قم باستيراد المكتبات الضرورية:

 import cv2 import face_recognition 

ثم نقرأ الفيديو وضبط الطول:

 input_movie = cv2.VideoCapture("sample_video.mp4") length = int(input_movie.get(cv2.CAP_PROP_FRAME_COUNT)) 

بعد ذلك ، نقوم بإنشاء ملف إخراج بدقة ومعدل الإطار الضروري مشابه لذلك في ملف الإدخال.

نقوم بتحميل صورة السماعة كعينة للتعرف عليها في الفيديو:

 image = face_recognition.load_image_file("sample_image.jpeg") face_encoding = face_recognition.face_encodings(image)[0] known_faces = [ face_encoding, ] 

بعد الانتهاء ، نبدأ الدورة التي ستكون:

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

دعونا نلقي نظرة على الكود الذي سينفذ هذا:

 # Initialize variables face_locations = [] face_encodings = [] face_names = [] frame_number = 0 while True: # Grab a single frame of video ret, frame = input_movie.read() frame_number += 1 # Quit when the input video file ends if not ret:  break # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses) rgb_frame = frame[:, :, ::-1] # Find all the faces and face encodings in the current frame of video face_locations = face_recognition.face_locations(rgb_frame, model="cnn") face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) face_names = [] for face_encoding in face_encodings:  # See if the face is a match for the known face(s)  match = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.50)  name = None  if match[0]:      name = "Phani Srikant"  face_names.append(name) # Label the results for (top, right, bottom, left), name in zip(face_locations, face_names):  if not name:      continue      # Draw a box around the face  cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)  # Draw a label with a name below the face  cv2.rectangle(frame, (left, bottom - 25), (right, bottom), (0, 0, 255), cv2.FILLED)       font = cv2.FONT_HERSHEY_DUPLEX  cv2.putText(frame, name, (left + 6, bottom - 6), font, 0.5, (255, 255, 255), 1) # Write the resulting image to the output video file print("Writing frame {} / {}".format(frame_number, length)) output_movie.write(frame) # All done! input_movie.release() cv2.destroyAllWindows() 

سوف أعطيك الكود هذه النتيجة:


من المحررين


دورات Netology حول الموضوع:

Source: https://habr.com/ru/post/ar434354/


All Articles