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.
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.
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.
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.
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