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.
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
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]")
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.
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.
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 pages auxquelles j'ai fait référence lors de la création de la page sont présentées ci-dessous.
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