[Python] Smasher a essayé de faire du processus de chargement de la vidéo une fonction à l'aide d'un générateur

Le début des choses

Il y avait une demande, et j'ai décidé d'apprendre automatiquement environ 10 heures de vidéos de jeux. J'ai créé un module pour lire la vidéo tout en sortant l'état d'avancement sur la console.

Programme ordinaire

import cv2
import sys

fpath = 'data/videos/sample_video.mp4'

video = cv2.VideoCapture(fpath)
can_read, first = video.read()

if not can_read:
    sys.exit()

progress_step = 60    #Afficher la progression une fois toutes les 60 images
count = 0
max = int(video.get(cv2.CAP_PROP_FRAME_COUNT))

while video.isOpened():
    if(count % progress_step == 0):
        print(f'Progress rate: {count}/{max}')

    ok, frame = video.read()
    if ok:
        #Que veux-tu faire
    else:
        break

video.release()

Résultat d'exécution

Progress rate: 0/2700
Progress rate: 60/2700
Progress rate: 120/2700
Progress rate: 180/2700
...

Impressions

J'ai atteint le but, mais d'autres programmes ont également un traitement de chargement vidéo, et je veux le réutiliser là-bas, alors j'ai décidé d'en faire une fonction qui peut être appelée de n'importe où.

Ver fonctionnalisé

une fonction

reader.py


def video_read(input):
    """
    Parameters
    ----------
    input: str
        Input video path

    Returns
    ------
    Iterator[np.ndarray]
        Generator of video frame
    """

    # video capture start
    video = cv2.VideoCapture(input)
    can_read, first = video.read()

    if not can_read:
        print('Cannot read video file')
        return

    max = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
    yield first

    progress_step = 60    #Afficher la progression une fois toutes les 60 images
    count = 0
    while video.isOpened():
        if(count % progress_step == 0):
            print(f'Progress rate: {count}/{max}')

        ok, frame = video.read()
        if ok:
            count += 1
            yield frame
        else:
            break
    video.release()

Votre interlocuteur

import reader

it = reader.video_read('data/videos/sample_video.mp4')
try:
    first = next(it)
except StopIteration:
    sys.exit()

for image in it:
    #Que veux-tu faire

Résumé

L'appelant était très rafraîchissant. Je pense que le processus de chargement de la vidéo et le processus principal que vous souhaitez effectuer ont été séparés et clarifiés. J'ai l'impression d'avoir fait un bon usage du générateur Python. Je suis désolé, je m'en fiche de cet article, Smasher ...

Recommended Posts

[Python] Smasher a essayé de faire du processus de chargement de la vidéo une fonction à l'aide d'un générateur
[Python] Faire de la fonction une fonction lambda
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
Comment diviser et traiter une trame de données à l'aide de la fonction groupby
J'ai créé un jeu ○ ✕ avec TensorFlow
Django super introduction par les débutants Python! Partie 3 J'ai essayé d'utiliser la fonction d'héritage de fichier de modèle
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type
J'ai essayé d'approcher la fonction sin en utilisant le chainer
Comment créer un package Python à l'aide de VS Code
[Python] Assurez-vous que la fonction reçue est une fonction définie par l'utilisateur
Comment tester unitaire une fonction contenant l'heure actuelle à l'aide de Freezegun en Python
J'ai créé une fonction pour récupérer les données de la colonne de base de données par colonne en utilisant sql avec sqlite3 de python [sqlite3, sql, pandas]
Pour renvoyer char * dans une fonction de rappel à l'aide de ctypes en Python
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
J'ai essayé d'approcher la fonction sin en utilisant chainer (re-challenge)
J'ai créé un éditeur de texte simple en utilisant PyQt
Django super introduction par les débutants Python! Partie 6 J'ai essayé d'implémenter la fonction de connexion
[C / C ++] Passez la valeur calculée en C / C ++ à une fonction python pour exécuter le processus et utilisez cette valeur en C / C ++.
J'ai essayé de faire de la vidéo de diffusion Masami comme IPPON Grand Prix (OpenCV: version Python)
J'ai essayé de créer un générateur qui génère une classe conteneur C # à partir de CSV avec Python
J'ai essayé de créer une fonction pour juger si les principaux stocks du monde sont l'heure d'été avec python
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
Rubyist a essayé de créer une API simple avec Python + bouteille + MySQL
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Traitez le résultat de l'exécution de Splunk en utilisant Python et enregistrez-le dans un fichier
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé d'afficher le temps de lecture de la vidéo (OpenCV: version Python)
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de couper une image fixe de la vidéo
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Une fonction simple pour trouver les coordonnées du centre d'un cercle
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
Tutoriel "Cython" pour rendre Python explosif: Lorsqu'une fonction côté C ++ a une surcharge.
J'ai essayé de trouver la différence entre A + = B et A = A + B en Python, alors notez
[Python] Comment rendre une classe itérable
[Introduction à Udemy Python3 + Application] 47. Traitez le dictionnaire avec une instruction for
[Python] Explique comment utiliser la fonction range avec un exemple concret
Django super introduction par les débutants Python! Partie 2 J'ai essayé d'utiliser les fonctions pratiques du modèle
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
J'ai créé une API Web
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
J'ai essayé d'analyser la carte du Nouvel An par moi-même en utilisant python
Je souhaite créer une application Web en utilisant React et Python flask
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (première moitié)
Tutoriel "Cython" qui rend Python explosif: Gérer le passage de fonctions côté C ++ par référence.