Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ③ Erstellen Sie verschiedene Photoshop-Videos

0. Einleitung

Dies ist eine Fortsetzung der vorherigen Zeit (Teil 2 Photoshop-Erstellung von Standbildern). Wenden Sie die vorherige Standbildüberlagerung auf das Gesicht des Videos an. Ich habe auf die folgende Seite verwiesen. [Serie] "CV-Programmierung mit Python und OpenCV" 9 .: OpenCV-Python® Videoeingabe / -ausgabe und Maus- / Tastaturrückruf mit HighGUI

1. Videoeingang / -ausgang

Lassen Sie uns zunächst das Video eingeben und ausgeben. Laden Sie das Video einfach und geben Sie es unverändert aus. Unten ist der Code

export_movie.py


#coding=utf-8

import cv2

def export_movie():


    #Geben Sie das einzugebende Video und den Ausgabepfad an.
    target = "target/test_input.mp4"
    result = "result/test_output.m4v" 

    #Laden von Videos und Abrufen von Videoinformationen
    movie = cv2.VideoCapture(target) 
    fps    = movie.get(cv2.CAP_PROP_FPS)
    height = movie.get(cv2.CAP_PROP_FRAME_HEIGHT)
    width  = movie.get(cv2.CAP_PROP_FRAME_WIDTH)

    #Geben Sie MP4V als Format an
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
    
    #Öffnen Sie die Ausgabedatei
    out = cv2.VideoWriter(result, int(fourcc), fps, (int(width), int(height)))
   
    #Lesen Sie den ersten Frame
    if movie.isOpened() == True:
        ret,frame = movie.read()
    else:
        ret = False

    #Exportieren Sie weiterhin Frames, während Sie Frames erfolgreich lesen
    while ret:
        
        #Schreiben Sie den Leserahmen
        out.write(frame)

        #Laden Sie den nächsten Frame
        ret,frame = movie.read()


if __name__ == '__main__':
    export_movie()

Super einfach

2. Ergebnis

Obwohl sich die Kapazität fast verdreifacht hat, konnte ich das Ausgabevideo abspielen. Es scheint, dass der Code-Code in diesem Bereich ordnungsgemäß eingeführt werden muss. Da ist kein Ton.

3. Verschiedene Photoshop-Videoerstellung

Da es mir gelungen ist, das Video einzugeben und auszugeben, werde ich endlich ein anderes Photoshop-Video erstellen. Sie müssen jedoch nur die Gesichtserkennung und Überlagerung durchführen, bevor Sie das Video ausgeben. Aus Videodateien gelesene Frames können wie Bilddateien behandelt werden. Außerdem hat sich das Ende der Funktion overlayOnPart geändert, sodass das Rückgabebild nicht den Alphakanal enthält (Transparenz). Unten ist der Code.

overlay_movie.py


#coding=utf-8

import cv2
import datetime
import numpy as np
from PIL import Image

def overlay_movie():

    #Geben Sie das einzugebende Video und den Ausgabepfad an.
    target = "target/test_input.mp4"
    result = "result/test_output.m4v"  #.Ich erhalte eine Fehlermeldung, wenn ich m4v nicht verwende

    #Laden von Videos und Abrufen von Videoinformationen
    movie = cv2.VideoCapture(target) 
    fps    = movie.get(cv2.CAP_PROP_FPS)
    height = movie.get(cv2.CAP_PROP_FRAME_HEIGHT)
    width  = movie.get(cv2.CAP_PROP_FRAME_WIDTH)

    #Geben Sie MP4V als Format an
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
    
    #Öffnen Sie die Ausgabedatei
    out = cv2.VideoWriter(result, int(fourcc), fps, (int(width), int(height)))

    #Ermitteln Sie die Merkmalsmenge des Kaskadenklassifikators
    cascade_path = "haarcascades/haarcascade_frontalface_alt.xml"
    cascade = cv2.CascadeClassifier(cascade_path)

    #Overlay-Bild wird geladen
    ol_imgae_path = "target/warai_otoko.png "    
    ol_image = cv2.imread(ol_imgae_path,cv2.IMREAD_UNCHANGED)
        
    #Lesen Sie den ersten Frame
    if movie.isOpened() == True:
        ret,frame = movie.read()
    else:
        ret = False

    #Exportieren Sie weiterhin Frames, während Sie Frames erfolgreich lesen
    while ret:
        
        #In Graustufen konvertieren
        frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        #Gesichtserkennung durchführen
        facerecog = cascade.detectMultiScale(frame_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))

        if len(facerecog) > 0:
            #Fügen Sie dem erkannten Gesicht ein Bild hinzu
            for rect in facerecog:

                #Passen Sie die Bildgröße an den Erkennungsbereich an
                resized_ol_image = resize_image(ol_image, rect[2], rect[3])
                    
                #Overlay-Bilderstellung
                frame = overlayOnPart(frame, resized_ol_image, rect[0],rect[1])

        #Schreiben Sie den Leserahmen
        out.write(frame)

        #Laden Sie den nächsten Frame
        ret,frame = movie.read()

        #Ausgabefortschritt alle 100 Frames, um den Fortschritt zu überprüfen
        if movie.get(cv2.CAP_PROP_POS_FRAMES)%100 == 0:
            date = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")
            print(date + 'Aktuelle Anzahl der Frames:'+str(int(movie.get(cv2.CAP_PROP_POS_FRAMES))))

        #Weil es lang ist, endet es im mittleren Rahmen
#        if movie.get(cv2.CAP_PROP_POS_FRAMES) > 1000:
#            break

    print("Erledigt")
    

def resize_image(image, height, width):
    
    #Holen Sie sich die Originalgröße
    org_height, org_width = image.shape[:2]
    
    #Schrumpfen, um der größeren Größe zu entsprechen
    if float(height)/org_height > float(width)/org_width:
        ratio = float(height)/org_height
    else:
        ratio = float(width)/org_width
    
    resized = cv2.resize(image,(int(org_height*ratio),int(org_width*ratio)))
    
    return resized    

#Kombinieren Sie Bilder mit PIL
def overlayOnPart(src_image, overlay_image, posX, posY):

    #Ermitteln Sie die Größe des Überlagerungsbilds
    ol_height, ol_width = overlay_image.shape[:2]

    #Konvertieren Sie OpenCV-Bilddaten in PIL
    #Konvertieren Sie von BGRA zu RGBA
    src_image_RGBA = cv2.cvtColor(src_image, cv2.COLOR_BGR2RGB)
    overlay_image_RGBA = cv2.cvtColor(overlay_image, cv2.COLOR_BGRA2RGBA)
    
    #In PIL konvertieren
    src_image_PIL=Image.fromarray(src_image_RGBA)
    overlay_image_PIL=Image.fromarray(overlay_image_RGBA)

    #Wechseln Sie zum Compositing in den RGBA-Modus
    src_image_PIL = src_image_PIL.convert('RGBA')
    overlay_image_PIL = overlay_image_PIL.convert('RGBA')

    #Bereiten Sie einen transparenten Campus derselben Größe vor
    tmp = Image.new('RGBA', src_image_PIL.size, (255, 255,255, 0))
    #Überschreiben Sie den vorbereiteten Campus
    tmp.paste(overlay_image_PIL, (posX, posY), overlay_image_PIL)
    #Kombinieren Sie Original und Campus und speichern Sie
    result = Image.alpha_composite(src_image_PIL, tmp)
    
    # COLOR_FARBE von RGBA2BGRA_In RGBA2BGR geändert. Wenn der Alphakanal enthalten ist, wird er nicht richtig im Video ausgegeben.
    return  cv2.cvtColor(np.asarray(result), cv2.COLOR_RGBA2BGR)
               
if __name__ == '__main__':
    overlay_movie()

Es wird immer länger.

4. Ergebnis


2016/03/11 21:57:04 Aktuelle Anzahl der Frames: 100.0 2016/03/11 21:57:16 Aktuelle Anzahl der Frames: 200.0 2016/03/11 21:57:28 Aktuelle Anzahl der Frames: 300.0 ・ ・ ・ 2016/03/11 22:08:59 Aktuelle Anzahl der Frames: 7100.0 Erledigt


Es wurde in der Umgebung des Core i5-4670 3,40 GHz-Speichers mit 16 GB für das Video mit einer Bildgröße von 718 × 480, 24 fps und 5:00 ausgeführt. Es hat eine ganze Weile gedauert, aber ich konnte ein anderes Photoshop-Video ausgeben. 動画認識結果.JPG

5. Schließlich

Dies ist jedoch unvollständig. Wenn Sie mehrere Gesichter haben, können Sie alle überschreiben. 複数人.JPG

Sogar ein Gesicht, das fälschlicherweise erkannt wird, wird zufällig überschrieben. 誤認識.JPG

Nächstes Mal werde ich versuchen, dieses Problem zu lösen. Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ④ Beheben von Problemen

Recommended Posts

Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ③ Erstellen Sie verschiedene Photoshop-Videos
Erstellen Sie verschiedene Photoshop-Videos mit Python + OpenCV. ④ Beheben Sie Probleme
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ② Erstellen Sie Photoshop-Standbilder
Erstellen Sie mit Python eine Datei im Photoshop-Format (.psd)
"Apple-Verarbeitung" mit OpenCV3 + Python3
Bildbearbeitung mit Python OpenCV
Kameraerfassung mit Python + OpenCV
Erstellen Sie ein 3D-GIF mit Python3
[Python] Verwenden von OpenCV mit Python (Basic)
Gesichtserkennung mit Python + OpenCV
Erstellen Sie ein Verzeichnis mit Python
Verwenden von OpenCV mit Python @Mac
Erstellen Sie mit python wxpython + openCV ein einfaches Videoanalysetool
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Erstellen Sie Awaitable mit der Python / C-API
Neuronales Netzwerk mit OpenCV 3 und Python 3
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Erstellen Sie eine virtuelle Umgebung mit Python!
Einfache Python + OpenCV-Programmierung mit Canopy
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Schneiden Sie das Gesicht mit Python + OpenCV aus
Gesichtserkennung mit Kamera mit opencv3 + python2.7
Laden Sie das GIF-Bild mit Python + OpenCV
Finden Sie Bildähnlichkeit mit Python + OpenCV
Verwenden Sie OpenCV mit Python 3 in Window
Zeichnen Sie eine Illustration mit Python + OpenCV
Verfolgen Sie Baseballbälle mit Python + OpenCV
Graphbasierte Segmentierung mit Python + OpenCV
Zeichnen Sie einen Pfeil (Vektor) mit opencv / python
Grundlegendes Studium von OpenCV mit Python
Erstellen Sie eine gestreifte Illusion mit Gammakorrektur für Python3 und openCV3
Mit Python und OpenCV lassen Sie Unschärfevideos wie Festkommakameras aussehen
Gesichtserkennung mit Python + OpenCV (invariante Rotation)
Erstellen Sie mit Class einen Python-Funktionsdekorator
Erstellen Sie mit python3 eine Wortwolke aus Ihrem Tweet
Erstellen Sie mit Python + PIL ein Dummy-Image.
Speichern Sie Videos Frame für Frame mit Python OpenCV
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen wir mit Python eine kostenlose Gruppe
Erstellen Sie schnell eine Excel-Datei mit Python #python
Bilder mit Pupil, Python und OpenCV aufnehmen
Ich habe versucht, mit Python + opencv nicht realistisch zu rendern
Bildverarbeitung mit Python & OpenCV [Tonkurve]
Erstellen Sie mit Docker eine Python + uWSGI + Nginx-Umgebung
Bildaufnahme von der Kamera mit Python + OpenCV
[python, openCV] base64 Gesichtserkennung in Bildern
Erstellen Sie eine Excel-Datei mit Python + Ähnlichkeitsmatrix
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Erstellen Sie eine OpenCV3 + python3-Umgebung unter OSX
[Python] Bilder mit OpenCV lesen (für Anfänger)
[Python] Erstellen Sie schnell eine API mit Flask
Erstellen Sie eine englische Wort-App mit Python
Bis Sie opencv mit Python verwenden können
Leichte Bildverarbeitung mit Python x OpenCV
Glättung kantengespeichert mit Python + OpenCV (BilateralFilter, NLMeansFilter)
Erstellen Sie mit Python + OpenCV Ihre eigene virtuelle Kamera und wenden Sie Originaleffekte an
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python