Créez diverses vidéos Photoshop avec Python + OpenCV ③ Créez diverses vidéos Photoshop

0. Introduction

Ceci est une continuation de la fois précédente (Partie 2 Création de photoshop d'images fixes). Appliquez la superposition d'image fixe précédente au visage de la vidéo. Je me suis référé au site suivant. [Series] "Programmation CV utilisant python et OpenCV" 9th: OpenCV-python② Entrée / sortie vidéo et rappel souris / clavier avec highGUI

1. Entrée / sortie vidéo

Tout d'abord, entrons et sortons la vidéo. Chargez simplement la vidéo et sortez-la telle quelle. Ci-dessous le code

export_movie.py


#coding=utf-8

import cv2

def export_movie():


    #Spécifiez la vidéo à entrer et le chemin de sortie.
    target = "target/test_input.mp4"
    result = "result/test_output.m4v" 

    #Charger des vidéos et obtenir des informations sur la vidéo
    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)

    #Spécifiez MP4V comme format
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
    
    #Ouvrez le fichier de sortie
    out = cv2.VideoWriter(result, int(fourcc), fps, (int(width), int(height)))
   
    #Lire la première image
    if movie.isOpened() == True:
        ret,frame = movie.read()
    else:
        ret = False

    #Continuer à exporter des cadres tout en lisant avec succès les cadres
    while ret:
        
        #Ecrire le cadre de lecture
        out.write(frame)

        #Chargez l'image suivante
        ret,frame = movie.read()


if __name__ == '__main__':
    export_movie()

Super facile

2. Résultat

Bien que la capacité ait presque triplé, j'ai pu lire la vidéo de sortie. Il semble que le code de code doit être introduit correctement dans ce domaine. Il n'y a pas de son.

3. Création de vidéos Photoshop diverses

Depuis que j'ai réussi à entrer et sortir la vidéo, je vais enfin créer une vidéo Photoshop diverse. Cependant, il vous suffit d'effectuer la reconnaissance faciale et la superposition avant de sortir la vidéo. Les images lues à partir de fichiers vidéo peuvent être traitées de la même manière que les fichiers image. En outre, la fin de la fonction overlayOnPart a changé de sorte que l'image de retour n'inclut pas le canal alpha (transparence). Ci-dessous le code.

overlay_movie.py


#coding=utf-8

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

def overlay_movie():

    #Spécifiez la vidéo à entrer et le chemin de sortie.
    target = "target/test_input.mp4"
    result = "result/test_output.m4v"  #.J'obtiens une erreur si je n'utilise pas m4v

    #Charger des vidéos et obtenir des informations sur la vidéo
    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)

    #Spécifiez MP4V comme format
    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
    
    #Ouvrez le fichier de sortie
    out = cv2.VideoWriter(result, int(fourcc), fps, (int(width), int(height)))

    #Acquérir la quantité de caractéristiques du classificateur en cascade
    cascade_path = "haarcascades/haarcascade_frontalface_alt.xml"
    cascade = cv2.CascadeClassifier(cascade_path)

    #Chargement de l'image de superposition
    ol_imgae_path = "target/warai_otoko.png "    
    ol_image = cv2.imread(ol_imgae_path,cv2.IMREAD_UNCHANGED)
        
    #Lire la première image
    if movie.isOpened() == True:
        ret,frame = movie.read()
    else:
        ret = False

    #Continuer à exporter des cadres tout en lisant avec succès les cadres
    while ret:
        
        #Convertir en échelle de gris
        frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        #Effectuer la reconnaissance faciale
        facerecog = cascade.detectMultiScale(frame_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))

        if len(facerecog) > 0:
            #Ajouter une image au visage reconnu
            for rect in facerecog:

                #Redimensionner l'image pour l'adapter à la plage de reconnaissance
                resized_ol_image = resize_image(ol_image, rect[2], rect[3])
                    
                #Créer une image de superposition
                frame = overlayOnPart(frame, resized_ol_image, rect[0],rect[1])

        #Ecrire le cadre de lecture
        out.write(frame)

        #Chargez l'image suivante
        ret,frame = movie.read()

        #Progression de la sortie toutes les 100 images pour vérifier la progression
        if movie.get(cv2.CAP_PROP_POS_FRAMES)%100 == 0:
            date = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")
            print(date + 'Nombre actuel d'images:'+str(int(movie.get(cv2.CAP_PROP_POS_FRAMES))))

        #Parce qu'il est long, il se termine dans le cadre du milieu
#        if movie.get(cv2.CAP_PROP_POS_FRAMES) > 1000:
#            break

    print("Terminé")
    

def resize_image(image, height, width):
    
    #Obtenez la taille d'origine
    org_height, org_width = image.shape[:2]
    
    #Rétrécir pour s'adapter à la plus grande taille
    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    

#Combinez des images à l'aide de PIL
def overlayOnPart(src_image, overlay_image, posX, posY):

    #Obtenir la taille de l'image de superposition
    ol_height, ol_width = overlay_image.shape[:2]

    #Convertir les données d'image OpenCV en PIL
    #Convertir de BGRA en RGBA
    src_image_RGBA = cv2.cvtColor(src_image, cv2.COLOR_BGR2RGB)
    overlay_image_RGBA = cv2.cvtColor(overlay_image, cv2.COLOR_BGRA2RGBA)
    
    #Convertir en PIL
    src_image_PIL=Image.fromarray(src_image_RGBA)
    overlay_image_PIL=Image.fromarray(overlay_image_RGBA)

    #Passer en mode RGBA pour la composition
    src_image_PIL = src_image_PIL.convert('RGBA')
    overlay_image_PIL = overlay_image_PIL.convert('RGBA')

    #Préparez un campus transparent de la même taille
    tmp = Image.new('RGBA', src_image_PIL.size, (255, 255,255, 0))
    #Écraser le campus préparé
    tmp.paste(overlay_image_PIL, (posX, posY), overlay_image_PIL)
    #Combinez l'original et le campus et économisez
    result = Image.alpha_composite(src_image_PIL, tmp)
    
    # COLOR_COULEUR de RGBA2BGRA_Changé en RGBA2BGR. Si le canal alpha est inclus, il ne sera pas correctement transmis à la vidéo.
    return  cv2.cvtColor(np.asarray(result), cv2.COLOR_RGBA2BGR)
               
if __name__ == '__main__':
    overlay_movie()

Cela devient de plus en plus long.

4. Résultat


2016/03/11 21:57:04 Nombre actuel de vues: 100.0 2016/03/11 21:57:16 Nombre actuel de vues: 200.0 2016/03/11 21:57:28 Nombre actuel de vues: 300.0 ・ ・ ・ 2016/03/11 22:08:59 Nombre actuel d'images: 7100.0 Terminé


Il a été exécuté dans l'environnement de la mémoire Core i5-4670 3,40 GHz 16 Go pour la vidéo de taille d'image 718 × 480, 24fps, 5:00. Cela a pris un certain temps, mais j'ai pu sortir une vidéo Photoshop diverse. 動画認識結果.JPG

5. Enfin

Cependant, ceci est incomplet. Si vous avez plusieurs visages, vous pouvez tous les écraser, 複数人.JPG

Même un visage qui est reconnu par erreur sera écrasé au hasard. 誤認識.JPG

La prochaine fois, je viserai à résoudre ce problème. Création de diverses vidéos Photoshop avec Python + OpenCV ④ Résolution des problèmes

Recommended Posts

Créez diverses vidéos Photoshop avec Python + OpenCV ③ Créez diverses vidéos Photoshop
Créez diverses vidéos Photoshop avec Python + OpenCV ④ Traitez les problèmes
Créez diverses vidéos Photoshop avec Python + OpenCV ② Créez une image fixe Photoshop
Créer un fichier au format Photoshop (.psd) avec python
"Traitement Apple" avec OpenCV3 + Python3
Édition d'image avec python OpenCV
Capture de caméra avec Python + OpenCV
Créer un gif 3D avec python3
[Python] Utilisation d'OpenCV avec Python (basique)
Détection de visage avec Python + OpenCV
Créer un répertoire avec python
Utiliser OpenCV avec Python @Mac
Créez un outil d'analyse vidéo simple avec python wxpython + openCV
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Créer Awaitable avec l'API Python / C
Réseau neuronal avec OpenCV 3 et Python 3
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
[Python] Utilisation d'OpenCV avec Python (détection des bords)
Créez un environnement virtuel avec Python!
Programmation facile Python + OpenCV avec Canopy
Essayez la reconnaissance faciale avec python + OpenCV
Découpez le visage avec Python + OpenCV
Reconnaissance faciale avec caméra avec opencv3 + python2.7
Charger une image gif avec Python + OpenCV
Trouver la similitude d'image avec Python + OpenCV
Utiliser OpenCV avec Python 3 dans Window
Dessinez une illustration avec Python + OpenCV
Suivre les balles de baseball avec Python + OpenCV
Segmentation basée sur un graphique avec Python + OpenCV
Dessinez une flèche (vecteur) avec opencv / python
Etude de base d'OpenCV avec Python
Créez une illusion rayée avec correction gamma pour Python3 et openCV3
Faites en sorte que les vidéos floues ressemblent à des caméras à point fixe avec Python et OpenCV
Détection de visage avec Python + OpenCV (rotation invariante)
Créer un décorateur de fonction Python avec Class
Créez wordcloud à partir de votre tweet avec python3
Créez une image factice avec Python + PIL.
Enregistrer la vidéo image par image avec Python OpenCV
[Python] Créez un environnement virtuel avec Anaconda
Créons un groupe gratuit avec Python
Créez rapidement un fichier Excel avec Python #python
Capturer des images avec Pupil, python et OpenCV
J'ai essayé le rendu non réaliste avec Python + opencv
Traitement d'image avec Python et OpenCV [Tone Curve]
Créer un environnement Python + uWSGI + Nginx avec Docker
Acquisition d'images depuis une caméra avec Python + OpenCV
[python, openCV] base64 Reconnaissance faciale dans les images
Créer un fichier Excel avec Python + matrice de similarité
Créer un compteur de fréquence de mots avec Python 3.4
Créer un environnement OpenCV3 + python3 sur OSX
[Python] Lire des images avec OpenCV (pour les débutants)
[Python] Créez rapidement une API avec Flask
Créez une application de mots anglais avec python
Jusqu'à ce que vous puissiez utiliser opencv avec python
Traitement d'image léger avec Python x OpenCV
Lissage des bords enregistrés avec python + OpenCV (BilateralFilter, NLMeansFilter)
Créez votre propre caméra virtuelle avec Python + OpenCV et appliquez des effets originaux
Hello World et détection de visage avec OpenCV 4.3 + Python