[PYTHON] Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (2: Rahmenanalyse von Videos, um Kandidatenbilder zu erhalten)

Letztes Mal stellte vor, wie Kandidatenbilder mithilfe der Bing Image Search-API gesammelt werden. Dieses Mal werde ich vorstellen, wie Videos durch Frame-Analyse analysiert und gesammelt werden.

Entwicklungsumgebung verwendet dieses Mal

Vorteile des Extrahierens von Kandidatenbildern aus Videos

Das Video ist im Grunde der gleiche Mechanismus wie der Para-Para-Cartoon, und die Bewegung wird durch Umschalten des Standbilds innerhalb kurzer Zeit ausgedrückt. Zu diesem Zeitpunkt ist das Standbild, aus dem das Video besteht, das Einzelbild, und die Anzahl der Einzelbilder pro Zeiteinheit, aus der das Video besteht, beträgt Sie wird als Bildrate bezeichnet und in Einheiten von fps ausgedrückt (wie viele Bildbilder pro Sekunde verwendet werden).

Mit anderen Worten, wenn Sie das Einzelbild der Szene extrahieren, in der das Gesicht aus dem Video reflektiert wird, können Sie einige Kandidatenbilder sogar aus dem Video mit der kurzen Szene sichern. Darüber hinaus werden viele Videos wie DVDs mit dem Gesicht des Motivs aufgenommen, das in die Kamera schaut, und viele von ihnen haben geeignete Korrekturen wie die Lichtmenge. Einer der Vorteile ist, dass es eine hohe Wahrscheinlichkeit gibt, dass ein zum Lernen geeignetes Gesichtsbild aus den aus dem Video extrahierten Kandidatenbildern extrahiert werden kann.

Dieses Mal möchte ich mit OpenCV, das ich zuletzt verwendet habe, ein Einzelbild extrahieren, das ein Kandidatenbild aus dem Video ist.

Holen Sie sich mit QuickTime Player aufgenommene Videos

Dieses Mal werde ich das Video mit dem kostenlosen Tool QuickTime Player aufnehmen.

Das Aufnehmen des Videos ist möglicherweise unpraktisch, aber das von QuickTime Player aufgenommene und ausgegebene Video im .mov-Format bietet den Vorteil, dass die Datei mit OpenCV reibungslos gelesen werden kann. (Wenn Sie bereits ein Video haben, das von OpenCV gelesen werden kann, überspringen Sie diesen Schritt.)

Wenn Sie alle Einzelbilder aus Langzeitvideos wie DVDs extrahieren, ist die Anzahl enorm und das Gesicht wird möglicherweise nicht in allen Einzelbildern richtig wiedergegeben. Durch teilweises Erfassen der Videoszene, in der das Gesicht vom Video reflektiert wird, besteht das Ziel darin, das Rahmenbild, in dem das Gesicht reflektiert wird, effizient zu extrahieren. Wenn diese Methode verwendet wird, können Kandidatenbilder aus bewegten Bildern extrahiert werden, die im Web veröffentlicht wurden.

※※※ Hinweis ※※※ ** Das diesmal aufgenommene Video ist für das maschinelle Lernen vorgesehen. ** ** ** ** Bitte verteilen Sie aufgenommene Videos nicht weiter. ** ** ** ** Auch beim Aufnehmen von Videos usw., die im Internet veröffentlicht wurden ** ** Bitte berühren Sie nicht die Allgemeinen Geschäftsbedingungen jeder Video-Site, auf der das Video veröffentlicht wird! ** ** **

Ausführliche Erläuterungen zur Erfassungsmethode finden Sie unter "Aufzeichnen des Bildschirms" auf Offizielle Website. Ich werde die Erklärung hier weglassen. Wenn Sie QuickTime Player herunterladen und installieren müssen, gehen Sie zu hier. Das aufgenommene Video enthält keinen Ton, diesmal jedoch kein Problem, da kein Ton benötigt wird.

Erfassen Sie mit OpenCV ein Einzelbild als Kandidatenbild aus einem aufgenommenen Video

Extrahieren Sie nach dem Generieren des aufgenommenen Videos das Einzelbild, das ein Kandidatenbild ist. Das folgende Codebeispiel extrahiert ein Rahmenbild und speichert es als Kandidatenbild.

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

import cv2


def movie_to_image(num_cut):

    video_path = '/hoge/hoge.mov'   #Erfasster Videopfad (einschließlich Dateiname)
    output_path = '/hoge/save/'  #Ordnerpfad zur Ausgabe
    
    #Aufgenommenes Video lesen (Aufnahmestruktur erzeugen)
    capture = cv2.VideoCapture(video_path)

    img_count = 0  #Anzahl der gespeicherten Kandidatenbilder
    frame_count = 0  #Anzahl der geladenen Einzelbilder

	#Schleife, solange ein Rahmenbild vorhanden ist
    while(capture.isOpened()):
    	 #Holen Sie sich ein Einzelbild
        ret, frame = capture.read()
        if ret == False:
            break

        #Speichert die angegebene Anzahl von Einzelbildern, indem Sie sie ausdünnen
        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

    #Open Capture-Struktur
    capture.release()


if __name__ == '__main__':    
	
	#Rahmenbildextraktion mit der Ausdünnungszahl 10
	movie_to_image(int(10))
			

Die Zahl zum Ausdünnen des Rahmenbilds wird als Argument für die Methode "movie_to_image" angegeben. Wie oben erläutert, ist bei einem Langzeitvideo die Anzahl enorm, wenn Sie alle Einzelbilder als Kandidatenbilder speichern. Wenn die Bewegung im Video extrem langsam ist, werden viele Gesichtsrahmenbilder mit fast derselben Komposition erzeugt. In einigen Fällen können Sie es nicht mögen. Durch Ausdünnen der dort zu speichernden Rahmenbilder werden diese Probleme teilweise gelöst.

Im Fall eines Videos mit einer Bildrate von 29,97 fps Wenn Sie die Ausdünnungszahl auf "30" setzen, können Sie im Abstand von 1 Sekunde etwa ein Einzelbild im Video erhalten.

Echtzeit-Kandidatenbildaufnahme mit einer Webkamera

Im obigen Code wurde ein Kandidatenbild aus der aufgenommenen Videodatei generiert, jedoch mit einer geringfügigen Änderung dieses Codes Sie können Kandidatenbilder auch in Echtzeit generieren, während Sie ein Video mit einer Webkamera oder dergleichen aufnehmen.

Um beispielsweise die Kamera zu verwenden, die standardmäßig mit dem MacBook Air geliefert wird, Sie müssen lediglich den obigen Code wie folgt ändern.

	#capture = cv2.VideoCapture(video_path)
	
	#Geben Sie die Kameragerätnummer an
	capture = cv2.VideoCapture(0)

Sie können auch eine über USB angeschlossene Webkamera verwenden. Abhängig von der Kamera wird das Gerät möglicherweise nicht erkannt und Sie können es möglicherweise nicht verwenden.

Wenn bis zu einem gewissen Grad keine Maschinenspezifikation vorhanden ist, kann die Echtzeitverarbeitung während der Aufnahme möglicherweise nicht aufholen. Das Problem ist tendenziell stärker ausgeprägt, insbesondere beim Speichern der gesamten Anzahl von Frames. In diesem Fall lösen Sie das Problem bitte, indem Sie die Ausdünnungszahl anpassen.     Das Obige ist einfach, aber es war eine Erklärung eines Beispiels für das Sammeln von Kandidatenbildern durch Rahmenanalyse eines Videos.

Recommended Posts

Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (2: Rahmenanalyse von Videos, um Kandidatenbilder zu erhalten)
So senden Sie ein visualisiertes Bild der in Python erstellten Daten an Typetalk
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
Darstellung der Verteilung der Bakterienzusammensetzung aus Qiime2-Analysedaten in einem Box-Whisker-Diagramm
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
Sammeln von Daten zum maschinellen Lernen
[Teil 1] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 3] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Teil 2] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
Menschen merken sich gelerntes Wissen im Gehirn, wie man gelerntes Wissen im maschinellen Lernen auswendig lernt
Papier: Intrazerebrale Verarbeitung von Musik
Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (3: Gesichtsbildgenerierung aus Kandidatenbildern Teil 1)
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Bildausrichtung: von SIFT bis Deep Learning
"Deep Learning von Grund auf neu" mit Haskell (unvollendet)
Einfacher Code, der in Kaggles Titanic: Maschinelles Lernen aus Katastrophen eine Punktzahl von 0,81339 ergibt
Bedeutet Memo, wenn versucht wird, maschinelles Lernen mit 50 Bildern durchzuführen
Vorverarbeitung beim maschinellen Lernen 1 Datenanalyseprozess
Grundlegende Datenrahmenoperationen, die von Anfängern in einer Woche Python-Lernen geschrieben wurden
Vollständige Offenlegung der beim maschinellen Lernen verwendeten Methoden
Zusammenfassung der beim maschinellen Lernen verwendeten Bewertungsfunktionen
Aufgezeichnete Umgebung für die Datenanalyse mit Python
Geschichte rund um die Datenanalyse durch maschinelles Lernen
So bereiten Sie die Umgebung mit Courseras fortgeschrittenem Kurs für maschinelles Lernen auf Google Colab vor
Aufteilen von Trainingsdaten für maschinelles Lernen in objektive Variablen und andere in Pandas
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
Liste des Python-Codes, der bei der Big-Data-Analyse verwendet wird
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
Grundlagen von PyTorch (2) - Wie erstelle ich ein neuronales Netzwerk?
So nehmen Sie ein aufgenommenes Bild aus einem Video auf (OpenCV)
Erstellen einer virtuellen Anaconda-Umgebung für die Verwendung mit Azure Machine Learning und Verknüpfen mit Jupyter
So zeichnen Sie interaktiv eine Pipeline für maschinelles Lernen mit scikit-learn und speichern sie in HTML
Beispiele und Gegenmaßnahmen für "Ein Wert versucht, auf einer Kopie eines Slice aus einem Datenrahmen festgelegt zu werden." Warnung bei Pandas
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Zusammenfassung zum Schreiben von in gRPC verwendeten .proto-Dateien
Aufgeblasenes Lernbild
Datensatz für maschinelles Lernen
Deep Learning Bilderkennung 1 Theorie
Lernnotizen zur Python-Datenanalyse
Konvertierung von Bilddatentypen [Python]