Création d'un modèle de reconnaissance faciale à l'aide du deep learning en Python

La traductrice Elena Bornovolokova spécialement pour Netology a adapté un article de Fayzan Shaykh sur la façon de créer un modèle de reconnaissance faciale et dans quels domaines il peut être appliqué.

Présentation


Ces dernières années, la vision par ordinateur a gagné en popularité et s'est démarquée dans une direction distincte. Les développeurs créent de nouvelles applications utilisées dans le monde entier.
Dans ce sens, je suis attiré par le concept d'open source. Même les géants de la technologie sont prêts à partager de nouvelles découvertes et innovations avec tout le monde, afin que la technologie ne reste pas le privilège des riches.

L'une de ces technologies est la reconnaissance faciale. Lorsqu'elle est utilisée correctement et de manière éthique, cette technologie peut être appliquée dans de nombreux domaines de la vie.

Dans cet article, je vais vous montrer comment créer un algorithme de reconnaissance faciale efficace à l'aide d'outils open source. Avant de passer à ces informations, je veux que vous vous prépariez et que vous vous inspiriez en regardant cette vidéo:


Reconnaissance faciale: applications potentielles


Voici quelques domaines d'application potentiels de la technologie de reconnaissance faciale.

Reconnaissance faciale dans les réseaux sociaux . Facebook a remplacé le balisage manuel des images par des suggestions de balises générées automatiquement pour chaque image téléchargée sur la plateforme. Facebook utilise un algorithme de reconnaissance faciale simple pour analyser les pixels de l'image et la comparer avec leurs utilisateurs respectifs.

Reconnaissance faciale en sécurité . Un exemple simple d'utilisation de la technologie de reconnaissance faciale pour protéger les données personnelles est le déverrouillage de votre smartphone «en face». Cette technologie peut également être implémentée dans le système d'accès: une personne regarde la caméra et détermine si elle doit y entrer ou non.


Reconnaissance faciale pour compter le nombre de personnes . La technologie de reconnaissance faciale peut être utilisée pour compter le nombre de personnes assistant à un événement (comme une conférence ou un concert). Au lieu de compter manuellement les participants, nous installons une caméra qui peut capturer des images des visages des participants et donner le nombre total de visiteurs. Cela vous aidera à automatiser le processus et à gagner du temps.



Configuration du système: configuration matérielle et logicielle requise


Considérez comment nous pouvons utiliser la technologie de reconnaissance faciale en contactant les outils open source à notre disposition.

J'ai utilisé les outils suivants que je vous recommande:

  • Webcam (Logitech C920) pour la création d'un modèle de reconnaissance faciale en temps réel sur un ordinateur portable Lenovo E470 ThinkPad (Core i5 7e génération). Vous pouvez également utiliser l'appareil photo ou le caméscope intégré de votre ordinateur portable avec tout système approprié pour l'analyse vidéo en temps réel au lieu de ceux que j'ai utilisés.
  • Il est préférable d'utiliser un processeur graphique pour un traitement vidéo plus rapide.
  • Nous avons utilisé le système d'exploitation Ubuntu 18.04 avec tous les logiciels nécessaires.

Avant de poursuivre la construction de notre modèle de reconnaissance faciale, nous analyserons ces points plus en détail.

Étape 1: configuration matérielle


Vérifiez si la caméra est correctement configurée. Avec Ubuntu, c'est simple: voyez si l'appareil est reconnu par le système d'exploitation. Pour ce faire, procédez comme suit:

  1. Avant de connecter la webcam à l'ordinateur portable, vérifiez tous les périphériques vidéo connectés en tapant ls /dev/video* à l'invite de commande. Par conséquent, une liste de tous les périphériques vidéo connectés au système apparaît.
  2. Connectez la webcam et relancez la commande. Si la webcam est connectée correctement, le nouveau périphérique sera reflété à la suite de la commande.
  3. Vous pouvez également utiliser le logiciel de webcam pour vérifier son bon fonctionnement. Ubuntu peut utiliser le programme Cheese pour cela.

Étape 2: configuration du logiciel


Étape 2.1: installer Python

Le code de cet article a été écrit en utilisant Python (version 3.5). Pour installer Python, je recommande d'utiliser Anaconda , une distribution Python populaire pour le traitement et l'analyse des données.

Étape 2.2: Installez OpenCV

OpenCV est une bibliothèque open source conçue pour créer des applications de vision par ordinateur. L'installation d'OpenCV se fait à l'aide de pip :

 pip3 install opencv-python 

Étape 2.3: définir l'API face_recognition

Nous utiliserons l' face_recognition API , qui est considérée comme l'API de reconnaissance de visage Python la plus simple au monde. Pour installer, utilisez:

 pip install dlib pip install face_recognition 

Implémentation


Après avoir configuré le système, nous procédons à la mise en œuvre. Pour commencer, nous allons créer un programme puis expliquer ce que nous avons fait.

Procédure pas à pas


Créez un fichier face_detector.py , puis copiez le code ci-dessous:

 # 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() 

Exécutez ensuite ce fichier Python en tapant:

 python face_detector.py 

Si tout fonctionne correctement, une nouvelle fenêtre s'ouvrira avec le mode de reconnaissance des visages lancé en temps réel.


Pour résumer et expliquer ce que notre code a fait:

  1. Tout d'abord, nous avons indiqué le matériel sur lequel la vidéo sera analysée.
  2. Nous avons ensuite réalisé une capture vidéo en temps réel image par image.
  3. Ensuite, chaque image a été traitée et l' emplacement de tous les visages dans l'image a été extrait .
  4. En conséquence, ces images ont été reproduites sous forme de vidéo avec une indication de l'emplacement des visages.

Exemple d'application de reconnaissance faciale


Ce n'est pas tout le plaisir qui se termine. Nous ferons encore une chose sympa: nous allons créer un exemple d'application à part entière basé sur le code ci-dessus. Nous apporterons de petites modifications au code et tout sera prêt.

Supposons que vous souhaitiez créer un système automatisé à l'aide d'un caméscope pour suivre où se trouve actuellement l'enceinte. Selon sa position, le système fait pivoter la caméra de sorte que le haut-parleur reste toujours au centre du cadre.
La première étape consiste à créer un système qui identifie la ou les personnes dans la vidéo et se concentre sur l'emplacement du locuteur.



Voyons comment procéder. À titre d'exemple, j'ai sélectionné une vidéo sur YouTube avec un discours des intervenants de la conférence DataHack Summit 2017.

Tout d'abord, importez les bibliothèques nécessaires:

 import cv2 import face_recognition 

Ensuite, nous lisons la vidéo et définissons la durée:

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

Après cela, nous créons un fichier de sortie avec la résolution et la fréquence d'images nécessaires similaires à celles du fichier d'entrée.

Nous chargeons l'image du haut-parleur comme échantillon pour la reconnaître sur la vidéo:

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

Une fois terminé, nous entamons le cycle qui sera:

  • Extraire l'image de la vidéo.
  • Trouvez tous les visages et identifiez-les.
  • Créez une nouvelle vidéo qui combinera le cadre d'origine avec l'emplacement du visage de l'orateur avec une signature.

Regardons le code qui exécutera ceci:

 # 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() 

Le code vous donnera ce résultat:


Des éditeurs


Cours de netologie sur le sujet:

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


All Articles