[PYTHON] Comment créer un ensemble de données d'image de visage utilisé dans l'apprentissage automatique (2: Analyse d'image de la vidéo pour obtenir des images candidates)

Dernière fois a présenté comment collecter des images candidates à l'aide de l'API Bing Image Search. Cette fois, je vais vous présenter comment analyser et collecter des vidéos par analyse d'images.

Environnement de développement utilisé cette fois

Avantages de l'extraction d'images de candidats à partir de vidéos

La vidéo est essentiellement le même mécanisme que le dessin animé para-para, et le mouvement est exprimé en changeant l'image fixe dans un court laps de temps. À ce stade, l'image fixe qui compose la vidéo est l'image d'image, et le nombre d'images d'image par unité de temps qui compose la vidéo est Elle s'appelle la fréquence d'images et est exprimée en unités de fps (combien d'images d'images sont utilisées par seconde).

En d'autres termes, si vous extrayez l'image de cadre de la scène où le visage est reflété de la vidéo, vous pouvez sécuriser certaines images candidates même de la vidéo avec la courte scène. En outre, de nombreuses vidéos telles que des DVD sont prises avec le visage du sujet regardant l'appareil photo, et beaucoup d'entre elles sont également appropriées pour corriger la quantité de lumière. L'un des avantages est qu'il existe une forte possibilité qu'une image de visage appropriée pour l'apprentissage puisse être extraite des images candidates extraites de la vidéo.

Cette fois, j'aimerais extraire une image cadre qui est une image candidate de la vidéo en utilisant OpenCV que j'ai utilisé la dernière fois.

Obtenez une vidéo capturée avec QuickTime Player

Cette fois, je vais capturer la vidéo à l'aide de l'outil gratuit QuickTime Player.

Vous pouvez trouver peu pratique de capturer la vidéo, mais la vidéo au format .mov capturée et sortie par QuickTime Player a l'avantage que le fichier peut être lu sans problème avec OpenCV. (Si vous avez déjà une vidéo qui peut être lue par OpenCV, ignorez cette étape.)

De plus, lors de l'extraction de toutes les images d'image à partir de vidéos de longue durée telles que des DVD, le nombre est énorme et le visage peut ne pas être correctement reflété dans toutes les images d'image. Par conséquent, en capturant partiellement la scène vidéo dans laquelle le visage est réfléchi à partir de la vidéo, le but est d'extraire efficacement l'image de trame dans laquelle le visage est réfléchi. De plus, si cette méthode est utilisée, les images candidates peuvent être extraites d'images animées publiées sur le Web.

※※※ Mise en garde ※※※ ** La vidéo capturée cette fois est destinée à être utilisée dans l'apprentissage automatique. ** ** ** Veuillez ne pas redistribuer les vidéos capturées. ** ** ** De plus, lors de la capture de vidéos, etc. publiées sur le Web ** ** Veuillez ne pas toucher aux termes et conditions de chaque site vidéo où la vidéo est publiée! ** **

En ce qui concerne la méthode de capture, des explications détaillées sont publiées dans «Enregistrement de l'écran» du Site officiel. Je vais omettre l'explication ici. Si vous devez télécharger et installer QuickTime Player, veuillez vous rendre sur ici. Il n'y a pas de son dans la vidéo capturée, mais cette fois il n'y a pas de problème car aucun son n'est nécessaire.

Acquérir une image d'image comme image candidate à partir d'une vidéo capturée avec OpenCV

Après avoir généré la vidéo capturée, extrayez-en l'image de trame qui est une image candidate. Voici un exemple de code qui extrait une image de cadre et l'enregistre en tant qu'image candidate.

# -*- coding: utf-8 -*-

import cv2


def movie_to_image(num_cut):

    video_path = '/hoge/hoge.mov'   #Chemin de la vidéo capturée (y compris le nom du fichier)
    output_path = '/hoge/save/'  #Chemin du dossier vers la sortie
    
    #Lire la vidéo capturée (générer la structure de capture)
    capture = cv2.VideoCapture(video_path)

    img_count = 0  #Nombre d'images de candidats enregistrées
    frame_count = 0  #Nombre d'images de cadre chargées

	#Boucle tant qu'il y a une image cadre
    while(capture.isOpened()):
    	 #Obtenez une image de cadre
        ret, frame = capture.read()
        if ret == False:
            break

        #Enregistre le nombre spécifié d'images de cadre en les éclaircissant
        if frame_count % num_cut == 0:
            img_file_name = output_path + str(img_count) + ".jpg "
            cv2.imwrite(img_file_name, frame)
            img_count += 1
            
        frame_count += 1

    #Structure de capture ouverte
    capture.release()


if __name__ == '__main__':    
	
	#Extraction d'image de cadre avec le nombre d'amincissement défini sur 10
	movie_to_image(int(10))
			

Le nombre pour éclaircir l'image du cadre est donné comme argument à la méthode movie_to_image. Comme expliqué ci-dessus, dans le cas d'une vidéo de longue durée, si vous enregistrez toutes les images de trame comme images candidates, le nombre sera énorme. En outre, si le mouvement dans la vidéo est extrêmement lent, il générera plusieurs images de cadre de visage avec presque la même composition. Dans certains cas, vous pouvez ne pas l'aimer. En réduisant dans une certaine mesure les images de cadre à y enregistrer, ces problèmes sont résolus.

Par conséquent, dans le cas d'une vidéo avec une fréquence d'images de 29,97 ips, Si vous définissez le nombre d'éclaircie sur "30", vous pouvez obtenir environ une image à 1 seconde d'intervalle dans la vidéo.

Acquisition d'images de candidats en temps réel à l'aide d'une webcam

Dans le code ci-dessus, une image candidate a été générée à partir du fichier vidéo capturé, mais avec un léger changement dans ce code Vous pouvez également générer des images candidates en temps réel lors de la prise de vue d'une vidéo avec une caméra Web ou autre.

Par exemple, pour utiliser l'appareil photo intégré de série avec le MacBook Air, Tout ce que vous avez à faire est de modifier le code ci-dessus comme suit.

	#capture = cv2.VideoCapture(video_path)
	
	#Donnez le numéro de l'appareil photo
	capture = cv2.VideoCapture(0)

Vous pouvez également utiliser une caméra Web connectée via USB, mais selon la caméra, l'appareil peut ne pas être reconnu et vous ne pourrez peut-être pas l'utiliser.

De plus, s'il n'y a pas de spécifications de la machine dans une certaine mesure, le traitement en temps réel pendant la prise de vue peut ne pas être en mesure de rattraper son retard. Le problème a tendance à être plus prononcé, en particulier lors de l'enregistrement du nombre total d'images. Dans ce cas, veuillez le résoudre en ajustant le nombre d'éclaircie.     Ce qui précède est simple, mais il s'agissait d'une explication d'un exemple de collecte d'images candidates par analyse d'images d'une vidéo.

Recommended Posts

Comment créer un ensemble de données d'image de visage utilisé dans l'apprentissage automatique (2: Analyse d'image de la vidéo pour obtenir des images candidates)
Comment envoyer une image visualisée des données créées en Python à Typetalk
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
Comment représenter la distribution de la composition bactérienne à partir des données d'analyse Qiime2 dans un diagramme de moustaches
Comment créer une grande quantité de données de test dans MySQL? ??
Comment collecter des données d'apprentissage automatique
[Partie 1] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 3] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 2] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
Les gens mémorisent les connaissances acquises dans le cerveau, comment mémoriser les connaissances acquises dans l'apprentissage automatique
Papier: Traitement intracérébral de la musique
Comment créer un ensemble de données d'image de visage utilisé dans l'apprentissage automatique (3: Génération d'images de visage à partir d'images candidates, partie 1)
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Alignement d'image: du SIFT au deep learning
"Deep Learning from scratch" avec Haskell (inachevé)
Code simple qui donne un score de 0,81339 dans Kaggle's Titanic: Machine Learning from Disaster
Signifie mémo lorsque vous essayez de faire de l'apprentissage automatique avec 50 images
Prétraitement dans l'apprentissage automatique 1 Processus d'analyse des données
Opérations de base sur les blocs de données écrites par des débutants au cours d'une semaine d'apprentissage de Python
Divulgation complète des méthodes utilisées dans l'apprentissage automatique
Résumé des fonctions d'évaluation utilisées dans l'apprentissage automatique
Environnement enregistré pour l'analyse des données avec Python
Histoire de l'analyse de données par apprentissage automatique
Comment préparer l'environnement pour Google Colab avec le cours avancé d'apprentissage automatique de Coursera
Comment diviser les données de formation en machine learning en variables objectives et autres dans Pandas
Créer un ensemble de données d'images à utiliser pour la formation
Liste du code Python utilisé dans l'analyse de Big Data
Les débutants en apprentissage automatique essaient de créer un arbre de décision
Bases de PyTorch (2) -Comment créer un réseau de neurones-
Comment prendre une image capturée à partir d'une vidéo (OpenCV)
Comment créer un environnement virtuel Anaconda à utiliser avec Azure Machine Learning et comment créer un lien avec Jupyter
Comment dessiner de manière interactive un pipeline d'apprentissage automatique avec scikit-learn et l'enregistrer au format HTML
Exemples et contre-mesures pour "Une valeur tente d'être définie sur une copie d'une tranche d'une trame de données." Avertissement chez les pandas
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Comment développer dans un environnement virtuel Python [Memo]
Comment obtenir une liste d'exceptions intégrées pour python
Résumé de l'écriture des fichiers .proto utilisés dans gRPC
Image d'apprentissage gonflée
Ensemble de données pour l'apprentissage automatique
Reconnaissance d'image par apprentissage profond 1 théorie
Notes d'apprentissage sur l'analyse des données Python
Conversion de type de données d'image [Python]