Créer un modèle de détection de visage dans une vidéo à l'aide de Python

Contenu

introduction

“La vision par ordinateur et l'apprentissage automatique ont vraiment commencé à décoller, mais pour la plupart des gens, toute l'idée de ce qu'un ordinateur voit lorsqu'il regarde une image est relativement sombre”. – Mike Kreiger

Le merveilleux domaine de la vision par ordinateur est devenu une ligue à part ces dernières années. Il existe un nombre impressionnant d'applications déjà largement utilisées dans le monde, Et nous commençons tout juste!

L'une de mes choses préférées dans ce domaine est l'idée que notre communauté adopte le concept open source. Même les grands géants de la technologie sont prêts à partager de nouvelles avancées et innovations avec tout le monde afin que les techniques ne continuent pas à être "une chose de riches".

L'une de ces technologies est la détection des visages, offrant une multitude d'applications potentielles dans des cas d'utilisation réels (s'il est utilisé correctement et de manière éthique). Dans ce billet, je vais vous montrer comment créer un algorithme de détection de visage capable à l'aide d'outils open source. Voici une démo pour vous enthousiasmer et préparer le terrain pour ce qui vous attend:

Alors es-tu prêt? Continuez à lire alors!

Noter: Si vous voulez comprendre les complexités de la vision par ordinateur, ce cours: Vision par ordinateur utilisant l'apprentissage en profondeur – c'est l'endroit parfait pour commencer.

Table des matières

  • Applications potentielles de la détection de visage
  • Configuration du système: Exigences matérielles / Logiciel
    • configuration matérielle
    • Paramétrage du logiciel
  • Approfondir la mise en œuvre de Python
    • Tutoriel simple
    • Cas d'utilisation de la détection de visage

Applications prometteuses de la détection de visage

Permettez-moi de vous montrer quelques exemples étonnants d'applications où les techniques de détection de visage sont couramment utilisées. Je suis sûr que vous avez dû rencontrer ces cas d'utilisation à un moment donné et que vous n'avez pas réalisé quelle technique était utilisée dans les coulisses.

Par exemple, Facebook a remplacé le marquage manuel des images par des suggestions de balises générées automatiquement pour chaque image téléchargée sur la plate-forme.. Facebook utilise un algorithme de détection de visage simple pour analyser les pixels des visages dans l'image et les comparer avec les utilisateurs concernés.. Nous allons apprendre à construire nous-mêmes un modèle de détection de visage, mais avant d'entrer dans les détails techniques de cela, Jetons un coup d'œil à d'autres cas d'utilisation.

Nous nous habituons à déverrouiller nos téléphones avec la dernière fonctionnalité de « déverrouillage du visage ».. Ceci est un très petit exemple de la façon dont une technique de détection de visage est utilisée pour protéger les données personnelles.. La même chose peut être mise en pratique à plus grande échelle, permettre aux caméras de capturer des images et de détecter des visages.

https://www.youtube.com/watch?v=bYrRQQX2PvY

Il existe d'autres applications de détection de visage moins reconnues dans la publicité, soins médicaux, Banque, etc. La plupart des entreprises, ou même dans de nombreuses conférences, vous êtes censé porter une carte d'identité pour entrer. Mais, Et si nous pouvions trouver un moyen pour que vous n'ayez pas besoin de carte d'identité pour accéder? La détection des visages permet de rendre cette procédure simple et fluide. La personne regarde simplement la caméra et elle détectera automatiquement si elle doit être autorisée à entrer ou non.

Une autre application intéressante de la détection de visage pourrait être de compter le nombre de personnes qui assistent à 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 les images des participants et nous donner le nombre total de personnes. Cela peut aider à automatiser la procédure et à économiser une tonne d'effort manuel.. Plutôt utile, non?

Vous pouvez créer beaucoup plus d'applications comme celles-ci; n'hésitez pas à les partager dans la section commentaire ci-dessous.

Dans ce billet, Je me concentrerai sur l'application pratique de la détection des visages et sur le fonctionnement réel des algorithmes qu'elle contient.. Si vous souhaitez en savoir plus sur eux, lee est à jeun.

Configuration du système: Exigences matérielles / Logiciel

Maintenant que vous connaissez les applications potentielles que vous pouvez créer avec les techniques de détection de visage, Voyons comment nous pouvons mettre cela en pratique en utilisant les outils open source à notre disposition. C'est l'avantage que nous avons avec notre communauté: la volonté de partager et d'ouvrir le code source est inégalée dans n'importe quelle industrie.

Pour ce poste spécifiquement, c'est ce que j'ai utilisé et je recommande d'utiliser:

  • Une webcam (Logitech C920) pour construire un détecteur de visage en temps réel sur un ordinateur portable Lenovo E470 ThinkPad (Core i5 7e génération). Vous pouvez également utiliser la caméra intégrée de votre ordinateur portable, ou caméra de vidéosurveillance, sur tout système adapté à l'analyse vidéo en temps réel, au lieu de la configuration que j'utilise
  • L'utilisation d'un GPU pour un traitement vidéo plus rapide est toujours un bonus
  • Côté logiciel, nous avons utilisé le système d'exploitation Ubuntu 18.04 avec tous les logiciels prérequis installés

Explorons ces points un peu plus en détail pour nous assurer que tout est correctement configuré avant de construire notre modèle de détection de visage..

Paso 1: configuration matérielle

La première chose à faire est de vérifier si la webcam est correctement configurée. Une astuce simple dans Ubuntu: vérifier si le système d'exploitation a enregistré l'appareil. Vous pouvez suivre les étapes ci-dessous:

  1. Avant de connecter la WebCam à l'ordinateur portable, vérifiez tous les périphériques vidéo connectés en accédant à l'invite de commande et en tapant ls / développeur / vidéo *. Cela imprimera les périphériques vidéo déjà connectés au système.
  2. Connectez la WebCam et exécutez à nouveau la commande.Si la WebCam a été connectée avec succès, la commande affichera un nouvel appareil.
  3. Une autre chose que vous pouvez faire est d'utiliser n'importe quel logiciel de webcam pour vérifier si la webcam fonctionne correctement.. Vous pouvez utiliser “Du fromage” dans Ubuntu pour cela.
    Ici, nous pouvons voir que la webcam est configurée correctement. Et c'est tout pour le côté matériel !!

Paso 2: configuration du logiciel

Paso 2.1: installer python

Le code de cet article a été créé avec la version 3.5 de Python. Même s'il existe plusieurs alternatives pour installer Python, Je recommanderais d'utiliser Anaconda, la distribution Python la plus populaire pour la science des données. Voici un lien pour installer Anaconda dans votre système.

Paso 2.2: Installer OpenCV

OpenCV (Vision par ordinateur Open Source) est une bibliothèque destinée à créer des applications de vision par ordinateur. Possède de nombreuses fonctions pré-écrites pour les tâches de traitement d'image. Pour installer OpenCV, faire une installation pip de la bibliothèque:

pip3 installer opencv-python

Paso 2.3: Installer l'API face_recognition;

En conclusion, nous utiliserons La reconnaissance faciale, désignée comme l'API d'accréditation faciale la plus simple au monde pour Python. Installer:
pip installer dlib
pip installer face_recognition

Approfondissons la mise en œuvre

Maintenant que vous avez configuré votre système, il est enfin temps de plonger dans la mise en œuvre réelle. Premier, nous allons rapidement construire notre programme, plus tard, nous le décomposerons pour comprendre ce que nous avons fait.

Tutoriel simple

Premier, créer un fichier face_detector.py et copiez plus tard le code ci-dessous:

# importer des bibliothèques
importer cv2
importer reconnaissance de visage

# Obtenez une référence à la webcam 
capture vidéo = cv2.Capture vidéo("/dev/vidéo1")

# Initialiser les variables
face_locations = []

tandis que Vrai:
    # Capturez une seule image de la vidéo
    droit, Cadre = capture vidéo.lire()

    # Convertir l'image de la couleur BGR (qu'OpenCV utilise) à la couleur RVB (que face_recognition utilise)
    rgb_frame = Cadre[:, :, ::-1]

    # Trouver tous les visages dans l'image actuelle de la vidéo
    face_locations = reconnaissance de visage.face_locations(rgb_frame)

    # Afficher les résultats
    pour Haut, droit, bas, la gauche dans face_locations:
        # Dessinez une boîte autour du visage
        cv2.rectangle(Cadre, (la gauche, Haut), (droit, bas), (0, 0, 255), 2)

    # Afficher l'image résultante
    cv2.imshow('Vidéo', Cadre)

    # Appuyez sur « q » sur le clavier pour quitter!
    si cv2.waitKey(1) & 0xFF == mots('q'):
        Pause

# Relâchez la poignée de la webcam
capture vidéo.Libération()
cv2.détruireToutesFenêtres()

Ensuite, exécutez ce fichier python en tapant:

python face_detector.py

Si tout fonctionne bien, une nouvelle fenêtre apparaîtra avec la détection de visage en temps réel en cours d'exécution.

Pour resumer, c'est ce que notre code ci-dessus a fait:

  1. Premiers États-Unis défini le matériel dans lequel l'analyse vidéo sera effectuée
  2. De ce, NOUS capturé la vidéo temps réel, image par image
  3. Ensuite nous traité chaque image Oui extrait les emplacements de toutes les faces sur l'image
  4. En conclusion nous rendu ces images sous forme vidéo, ainsi que les emplacements des visages

Simple, ce n'est pas comme ça? Si vous voulez entrer dans les détails plus granulaires, J'ai inclus les commentaires dans chaque section de code. Vous pouvez toujours revenir en arrière et revoir ce que nous avons fait.

Cas d'utilisation de la détection de visage

Le plaisir ne s'arrête pas là! Une autre chose cool que nous pouvons faire: créer un cas d'utilisation complet autour du code ci-dessus. Et vous n'avez pas besoin de recommencer à zéro. Nous pouvons apporter quelques petites modifications au code et nous sommes prêts à partir..

Supposer, par exemple, vous souhaitez créer un système automatisé basé sur une caméra pour suivre en temps réel où se trouve l'orateur. Selon votre poste, le système fait pivoter la caméra pour que le haut-parleur soit toujours au milieu de la vidéo.

Comment faisons-nous ça? La première étape consiste à créer un système qui identifie les personnes dans la vidéo et se concentre sur l'emplacement de l'orateur..

Voyons comment nous pouvons mettre cela en pratique. Pour ce poste, j'ai pris un vidéo de Youtube montrant un orateur s'exprimant lors de la conférence DataHack Summit 2017.

Premier, nous importons les bibliothèques essentielles:

importer cv2
importer face_recognition

Ensuite, lire la vidéo et obtenir la durée:

input_movie = cv2.VideoCapture("sample_video.mp4")
longueur = entier(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 requises, ce qui équivaut au fichier d'entrée.

Téléchargez un exemple d'image de l'orateur pour l'identifier dans la vidéo:

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

visages_connus = [
face_encoding,
]

Tout cela terminé, maintenant nous exécutons une boucle qui fera ce qui suit:

  • Extraire une image de la vidéo
  • Trouvez tous les visages et identifiez-les
  • Créez une nouvelle vidéo pour faire correspondre le cadre d'origine avec l'emplacement du visage de l'orateur annoté

Voyons le code pour cela:

# Initialiser les variables
face_locations = []
face_encodings = []
visage_noms = []
Numéro de cadre = 0

tandis que Vrai:
    # Capturez une seule image de la vidéo
    droit, Cadre = input_movie.lire()
    Numéro de cadre += 1

    # Quitter lorsque le fichier vidéo d'entrée se termine
    si ne pas droit:
        Pause

    # Convertir l'image de la couleur BGR (qu'OpenCV utilise) à la couleur RVB (que face_recognition utilise)
    rgb_frame = Cadre[:, :, ::-1]

    # Trouver tous les visages et encodages de visage dans l'image actuelle de la vidéo
    face_locations = reconnaissance de visage.face_locations(rgb_frame, maquette="cnn")
    face_encodings = reconnaissance de visage.face_encodings(rgb_frame, face_locations)

    visage_noms = []
    pour face_encoding dans face_encodings:
        # Voir si le visage correspond au visage connu(s)
        rencontre = reconnaissance de visage.comparer_faces(visages_connus, face_encoding, tolérance=0.50)

        Nom = Rien
        si rencontre[0]:
            Nom = "Phani Srikant"

        visage_noms.ajouter(Nom)

    # Étiqueter les résultats
    pour (Haut, droit, bas, la gauche), Nom dans Zip *: français(face_locations, visage_noms):
        si ne pas Nom:
            Continuez

        # Dessinez une boîte autour du visage
        cv2.rectangle(Cadre, (la gauche, Haut), (droit, bas), (0, 0, 255), 2)

        # Dessinez une étiquette avec un nom sous le visage
        cv2.rectangle(Cadre, (la gauche, bas - 25), (droit, bas), (0, 0, 255), cv2.REMPLI)
        Police de caractère = cv2.FONT_HERSHEY_DUPLEX
        cv2.mettreTexte(Cadre, Nom, (la gauche + 6, bas - 6), Police de caractère, 0.5, (255, 255, 255), 1)

    # Écrire l'image résultante dans le fichier vidéo de sortie
    imprimer("Cadre d'écriture {} / {}".format(Numéro de cadre, longueur))
    sortie_film.écrivez(Cadre)

# Terminé!
input_movie.Libération()
cv2.détruireToutesFenêtres()

Le code vous donnerait une sortie comme celle-ci:

Quelle bonne chose la détection de visage est vraiment. 🙂

Projets

Il est maintenant temps de franchir le pas et de jouer avec d'autres ensembles de données réelles.. Ensuite, Êtes-vous prêt à relever le défi? Accélérez votre parcours d'apprentissage en profondeur avec les problèmes de pratique suivants:

conclusion

Toutes nos félicitations! Vous savez maintenant comment créer un système de détection de visage pour divers cas d'utilisation potentiels.. L'apprentissage en profondeur est un domaine fascinant et je suis très heureux de voir où nous allons maintenant..

Dans ce billet, Nous avons appris comment tirer parti des outils open source pour créer des systèmes de détection de visage en temps réel utiles dans le monde réel. Je vous encourage à créer plusieurs de ces applications et à essayer par vous-même. crème, il y a beaucoup à apprendre et c'est très amusant!

Comme toujours, n'hésitez pas à nous contacter si vous avez des questions / suggestion dans la section commentaire ci-dessous.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.