Tirez en accéléré à partir d'une caméra PC en utilisant Python, OpenCV

introduction

J'ai décidé de garder une fourmi. C'est une fourmi noire. Les nids et les colonies arriveront mercredi. Je veux les observer pendant que je vais au laboratoire! Cependant, il est trop gênant de sortir avec son smartphone à la maison. Il me restait juste un PC privé, alors j'ai décidé de l'utiliser pour prendre une photo accélérée de la colonie en déplacement. Depuis que je suis un débutant en programmation, j'écris également du contenu élémentaire pour étudier.

Méthode

Python 3.7.3 Anaconda Prompt Utilisez la webcam fournie avec votre PC Vous devez installer OpenCV en tapant à l'avance ce qui suit sur l'invite de commande.

$ pip install opencv-python 

code

timelaps.py


import cv2
import glob
import os
import shutil
import time
from datetime import datetime

###Divers réglages initiaux

date = datetime.now().strftime("%Y%m%d_%H%M%S")
if not os.path.exists(date):
    os.mkdir(date)   #Créer un dossier pour enregistrer les images

#En attendant le moment_Attendez quelques secondes avant de commencer la prise de vue
capture_interval = 0.5 #Intervalle d'acquisition d'image (secondes)
waiting_time = 0
print('Recording will be started in {0} seconds'.format(waiting_time))
time.sleep(waiting_time)
print('Start')

###Prendre une image
def capture():
    cap = cv2.VideoCapture(0) #Changez pour n'importe quel numéro de caméra. S'il n'y en a qu'une, le numéro de la caméra est 0.
    while True: # capture_Intervalle Charge et enregistre les images toutes les secondes.
        ret, frame = cap.read() #Chargez l'image capturée à partir de l'appareil photo en tant que cadre
        cv2.imshow("camera", frame) #Afficher le cadre sur l'écran. Si vous ne quittez pas celui-ci pour une raison quelconque, vous ne pouvez pas arrêter l'opération avec enter.
        k = cv2.waitKey(1)&0xff #Attendez la saisie de la clé. L'argument est le temps d'attente d'entrée.
        #Dans le dossier "img" du répertoire actuel, "(date).Enregistrez le fichier sous le nom de fichier "jpg"
        date_time = datetime.now().strftime("%Y%m%d%H%M%S")
        path = "./{0}/".format(date) + date_time + ".jpg "
        cv2.imwrite(path, frame) #Enregistrer les images dans le dossier

        #Appuyez sur la touche Entrée pour terminer la prise de vue
        if k == 13:
            break 
        time.sleep(capture_interval)
    cap.release()
    cv2.destroyAllWindows()

###Laps de temps d'image
def timelaps():
    images = sorted(glob.glob('{0}/*.jpg'.format(date))) #Chargement de l'image capturée.
    print("Nombre total d'images{0}".format(len(images)))

    if len(images) < 30: #Paramètres FPS
        frame_rate = 2  
    else:
        frame_rate = len(images)/30

    width = 640
    height = 480
    fourcc = cv2.VideoWriter_fourcc('m','p','4','v') #Spécifiez mp pour le codec vidéo. Décidez de l'extension de la vidéo (bien que ce soit un peu différent)
    video = cv2.VideoWriter('{0}.mp4'.format(date), fourcc, frame_rate, (width, height)) #Spécifiez les informations de la vidéo à créer (nom de fichier, extension, FPS, taille de la vidéo).

    print("Conversion vidéo en cours...")
    
    for i in range(len(images)):
        #Charger l'image
        img = cv2.imread(images[i])
        #Faites correspondre la taille de l'image.
        img = cv2.resize(img,(width,height))
        video.write(img) 
    
    video.release()
    print("Conversion vidéo terminée")

def capture_delete():
    shutil.rmtree(date)

if __name__ == '__main__':
    start = time.time()

    capture()
    timelaps()
    capture_delete()

    elapsed_time = time.time() - start
    print ("Le temps de traitement:{0}".format(elapsed_time) + "[sec]")

Description du code

Aperçu

  1. Prenez des photos à intervalles réguliers et enregistrez-les dans un dossier
  2. Créez et enregistrez une vidéo (time lapse) qui connecte les images enregistrées dans le dossier
  3. Supprimez un grand nombre de photos utilisées comme matériel de time lapse pour chaque dossier
  4. Enfin, indiquez le temps requis.

def capture () ou antérieure

Créez un dossier pour enregistrer les images avec mkdir. Le nom du dossier peut être n'importe quoi. Cette fois, si vous le créez à 13:57:09 le 20 septembre 2020, un dossier nommé "20200920_135709" sera créé. Si un dossier avec le même nom existe déjà, os.mkdir lancera une erreur, donc j'essaye de créer un dossier uniquement s'il n'y a pas de dossier avec le même nom. Définissez l'intervalle (wait_time) pour l'acquisition d'images. Si vous commencez à tirer soudainement après l'avoir déplacé, je serai réfléchi devant la fourmi, donc j'attendrai des secondes d'attente.

capture() Vous pouvez voir ce que vous faites en lisant les commentaires dans le code. Si la photo a été prise le 20 septembre 2020 à 12:34:56, le nom du fichier serait "20200920123456". J'ai peur de manger trop d'espace, alors j'utilise jpg au lieu de png. k == 13 équivaut à appuyer sur la touche Entrée. La méthode format () était très pratique pour spécifier la destination de sauvegarde.

timelaps() Commencez par charger l'image capturée. La fonction triée est utilisée pour générer une liste triée par ordre croissant de nombres (c'est-à-dire l'ordre dans lequel ils ont été tournés). Mais si cette méthode est folle

images = glob.glob('{0}/*.jpg'.format(date))

Mais ça marche bien. Ensuite, définissez le nombre d'images (FPS) utilisées par seconde. Pour le moment, j'ai essayé de l'intégrer dans une vidéo de 30 secondes même si je la tournais pendant longtemps. Après avoir défini la taille de l'écran de la vidéo (l'image par défaut est 640 * 480, faites-la correspondre), nous créerons la vidéo. Lisez la i-ème image avec cv2.imread (), ajustez la taille de l'image à la taille de la vidéo, puis insérez-la dans la vidéo. Créez une vidéo en répétant cette opération pour toutes les images.

capture_delete() Supprimez le dossier (date) créé pour l'enregistrement des images. Comme il s'agit d'une seule ligne, il n'est pas nécessaire de la définir comme une fonction, mais elle a l'air bien, alors je l'ai fait une fonction.

résultat

Lorsqu'il est exécuté sur l'invite de commande, le texte suivant s'affiche.

Recording will be started in 0 seconds
Start
[ WARN:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-2b5g8ysb\opencv\modules\videoio\src\cap_msmf.cpp (435) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
Nombre total d'images 10
Conversion vidéo en cours...
Conversion vidéo terminée
Le temps de traitement:12.048035621643066[sec]

Je ne comprenais pas bien [WARN: 0]. Je suis content parce que cela a fonctionné. C'est un manuel. Le fichier vidéo est obtenu dans le répertoire où Python est exécuté. Après l'arrivée des fourmis, je publierai la vidéo que j'ai réellement tournée.

en conclusion

Pour les débutants, j'ai parlé d'un programme qui prend des photos à partir d'une caméra PC et crée un laps de temps basé sur les photos prises. Si vous connaissez les répertoires, pendant, pendant, etc., ce n'est pas si difficile, donc même les débutants en programmation devraient absolument l'essayer. De plus, puisque j'étudie, j'apprécierais que vous me donniez des suggestions, des commentaires ou des conseils.

Les références

Les pages auxquelles j'ai fait référence lors de la création de la page sont présentées ci-dessous.

méthode format ()

https://gammasoft.jp/blog/python-string-format/ OpenCV OpenCV en général http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_gui/py_image_display/py_image_display.html http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_gui/py_video_display/py_video_display.html#display-video

Capture d'image http://rikoubou.hatenablog.com/entry/2019/03/07/153430

fonction waitKey () https://qrunch.net/@opqrstuvcut/entries/XZsZ0jUEX6RatMER?ref=qrunch https://www.kishugiken.co.jp/cn/code02.html

Conversion d'image en vidéo https://yusei-roadstar.hatenablog.com/entry/2019/11/29/174448 os, shutil https://note.nkmk.me/python-os-remove-rmdir-removedirs-shutil-rmtree/

c'est tout. Merci d'avoir lu jusqu'ici.

Recommended Posts

Tirez en accéléré à partir d'une caméra PC en utilisant Python, OpenCV
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Acquisition d'images depuis une caméra avec Python + OpenCV
Créer une lecture de feuille de notes avec Python OpenCV (Conseils pour bien lire)
Estimation de l'orientation de la tête avec Python et OpenCV + dlib
J'ai essayé la détection d'objets en utilisant Python et OpenCV
Créer une carte Web en utilisant Python et GDAL
Exécutez des fichiers Python à partir de HTML en utilisant Django
Exécutez des scripts Python à partir d'Excel (en utilisant xlwings)
Capture de caméra Python, OpenCV
Créez un capteur de couleur à l'aide d'une tarte à la râpe et d'une caméra
Essayez de créer un fichier compressé en utilisant Python et zlib
Implémentation d'un générateur en utilisant Python> link> yield et next ()> yield
Récupérer des fichiers depuis Linux en utilisant paramiko et scp [Python]
Créer un discriminateur Sato Yohei en utilisant OpenCV et TensorFlow
[Python] Démarrez un fichier de commandes à partir de Python et passez des variables.
[Python] Trier les pommes et les poires à partir des valeurs de pixels à l’aide d’une machine à vecteurs de support (SVM)
Afficher des images dans OpenCV à partir de Python à l'aide d'une caméra USB externe sur votre MacBook
Aplatir à l'aide du rendement Python de
Visualisez l'activité des plantes depuis l'espace à l'aide de données satellites et de Python
Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
Construire un environnement Python sur un Mac, jusqu'au point d'utiliser Jupyter Lab
[Python] Utilisation d'OpenCV avec Python (basique)
[Python] Chapitre 01-03 À propos de Python (Ecrire et exécuter un programme à l'aide de PyCharm)
Changer la résolution de la caméra d'OpenCV
Hash avec python et échapper à l'égosa d'un certain ministre
Python: créer un dictionnaire à partir d'une liste de clés et de valeurs
Prédire le sexe à partir du nom à l'aide de l'API Gender et de Pykakasi en Python
[Python] Extraction / combinaison de données aléatoires à partir de DataFrame en utilisant random et pandas
[Python] Accès et recadrage des pixels d'image à l'aide d'OpenCV (pour les débutants)
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
Utiliser OpenCV avec Python @Mac
Recherche par image de la pellicule en utilisant Pythonista3
Utilisez le code python pour détecter la posture par openpose à partir de l'image de la caméra USB
Créez un classement de jeu sur le cloud Alibaba en utilisant Python et Redis
Traitez le résultat de l'exécution de Splunk en utilisant Python et enregistrez-le dans un fichier
Créez une illusion rayée avec correction gamma pour Python3 et openCV3
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Un peu plus sur les références ~ Prenant Python et Java comme exemples ~
[Traitement d'image] Poo-san est nu par détection de bord en utilisant Python et OpenCV!
Dessinez une illusion d'aquarelle avec détection des contours en Python3 et openCV3
Créez et essayez un environnement OpenCV et Python en quelques minutes à l'aide de Docker
Alignement d'images numérisées de papier vidéo animé à l'aide d'OpenCV et de Python
[Remarque] Utilisation d'un écran LCD à 16 caractères à 2 chiffres (1602A) de Python avec Raspeye
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
Python a + = b et a = a + b sont différents
Construction d'environnement de python et opencv
Briller la vie avec Python et OpenCV
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Réseau neuronal avec OpenCV 3 et Python 3
Toucher les objets Python d'Elixir
Utilisation de Rstan de Python avec PypeR
Créer une interface graphique python à l'aide de tkinter
Authentification à l'aide de l'authentification des utilisateurs tweepy et de l'authentification d'application (Python)
Python, rendement, retour et parfois rendement de