[PYTHON] Essayez de convertir des vidéos de caméra Web / caméra vidéo en temps réel avec OpenCV

introduction

OpenCV (Open Source Computer Vision Library) est une collection de bibliothèques de traitement vidéo / image sous licence BSD. Il existe de nombreux algorithmes tels que le filtrage d'image, la correspondance de modèles, la reconnaissance d'objets, l'analyse vidéo et l'apprentissage automatique.

Exemple de suivi de mouvement avec OpenCV (OpenCV Google Summer of Code 2015) https://www.youtube.com/watch?v=OUbUFn71S4s

Cliquez ici pour l'installation et une utilisation facile http://qiita.com/olympic2020/items/d5d475a446ec9c73261e

Cliquez ici pour filtrer les images fixes Essayez la détection des bords avec OpenCV

Cliquez ici pour traiter les fichiers vidéo Essayez de convertir des vidéos en temps réel avec OpenCV

Cette fois, je vais essayer de traiter les vidéos qui ont une entrée en temps réel, comme les caméras Web et les caméras vidéo.

Lissage

Le lissage est un filtre utilisé pour déterminer la zone des caractères et la zone des objets en mouvement à suivre. A titre d'exemple, le lissage est effectué dans le flux suivant pour déterminer la zone.

blur.png

OpenCV prend en charge les lissages suivants:

programme

Cette fois, créons un programme qui effectue un lissage gaussien sur l'entrée vidéo en temps réel, affiche les fenêtres et enregistre les fichiers.

sebcam.py


import cv2

# cv2.cv.CV_FOURCC
def cv_fourcc(c1, c2, c3, c4):
    return (ord(c1) & 255) + ((ord(c2) & 255) << 8) + \
        ((ord(c3) & 255) << 16) + ((ord(c4) & 255) << 24)


if __name__ == '__main__':
    #Définition constante
    ESC_KEY = 27     #Touche Echap
    INTERVAL= 33     #Temps d'attente
    FRAME_RATE = 30  # fps
    
    ORG_WINDOW_NAME = "org"
    GAUSSIAN_WINDOW_NAME = "gaussian"

    GAUSSIAN_FILE_NAME = "gaussian.avi"

    DEVICE_ID = 0

    #Acquisition d'image de la caméra
    cap = cv2.VideoCapture(DEVICE_ID)

    #Préparation du fichier vidéo enregistré
    end_flag, c_frame = cap.read()
    height, width, channels = c_frame.shape
    rec = cv2.VideoWriter(GAUSSIAN_FILE_NAME, \
                          cv_fourcc('X', 'V', 'I', 'D'), \
                          FRAME_RATE, \
                          (width, height), \
                          True)

    #Préparation de la fenêtre
    cv2.namedWindow(ORG_WINDOW_NAME)
    cv2.namedWindow(GAUSSIAN_WINDOW_NAME)

    #Boucle de traitement de conversion
    while end_flag == True:
        #Lissage gaussien
        g_frame = cv2.GaussianBlur(c_frame, (15, 15), 10)

        #Affichage du cadre
        cv2.imshow(ORG_WINDOW_NAME, c_frame)
        cv2.imshow(GAUSSIAN_WINDOW_NAME, g_frame)

        #Écriture de cadre
        rec.write(g_frame)

        #Quitter avec la touche Echap
        key = cv2.waitKey(INTERVAL)
        if key == ESC_KEY:
            break
        
        #Lire l'image suivante
        end_flag, c_frame = cap.read()

    #Terminer le traitement
    cv2.destroyAllWindows()
    cap.release()
    rec.release()

Le fonctionnement du script a été confirmé dans l'environnement suivant.

Les fichiers vidéo et les entrées de la caméra peuvent être traités de la même manière dans le programme. Lors de la gestion des entrées de la caméra, il est OK si vous spécifiez l'ID de périphérique à la place du nom de fichier.

cv2.VideoCapture(DEVICE_ID)

Si vous n'avez qu'une seule caméra, spécifiez DEVICE_ID = 0.

Résultat d'exécution

mov_org.png ** Pas de filtrage **

mov_gaussian.png ** Avec lissage gaussien **

Cliquez ici pour regarder la vidéo.

--Pas de filtrage Enregistrez simplement avec le logiciel connecté au PC (lien)

"C'est un vieux PC portable, et OpenCV peut-il résister aux performances en Python?" J'ai essayé de l'exécuter avec une demi-confiance, mais cela a fonctionné sans problème (^^) v

Recommended Posts

Essayez de convertir des vidéos de caméra Web / caméra vidéo en temps réel avec OpenCV
Essayez de convertir des vidéos en temps réel avec OpenCV
Essayez la détection des visages en temps réel à l'aide d'une webcam
Dessinez un flux optique en temps réel avec OpenCV (méthode Shi-Tomasi, méthode Lucas-Kanade)
Obtenez une sortie standard en temps réel avec le sous-processus Python
Essayez la détection des bords avec OpenCV
Obtenez des champs de chat en direct YouTube en temps réel avec l'API
Écrivez des graphiques en temps réel avec Matplotlib sur le notebook Jupyter
Essayez OpenCV avec Google Colaboratory
J'ai essayé de décrire le trafic en temps réel avec WebSocket
Essayez la reconnaissance faciale avec python + OpenCV
Essayez de brouiller l'image avec opencv2
Utiliser OpenCV avec Python 3 dans Window
Comment générer un code QR et un code à barres en Python et le lire normalement ou en temps réel avec OpenCV
Essayez de vous connecter à qiita avec Python
Essayez de travailler avec des données binaires en Python
Essayez d'utiliser l'appareil photo avec OpenCV de Python
Essayez de convertir en données ordonnées avec les pandas
Créez diverses vidéos Photoshop avec Python + OpenCV ③ Créez diverses vidéos Photoshop
Visualisez les informations du capteur d'accélération de la carte micro-ordinateur en temps réel avec mbed + Python