Ich beschloss, eine Ameise zu behalten. Es ist eine schwarze Ameise. Nester und Kolonien werden am Mittwoch eintreffen. Ich möchte sie beobachten, während ich ins Labor gehe! Es ist jedoch zu unpraktisch, mit Ihrem Smartphone zu Hause auszugehen. Ich hatte gerade noch einen privaten PC übrig und entschied mich, diesen zu verwenden, um unterwegs eine Zeitrafferaufnahme der Kolonie zu machen. Da ich ein Anfänger in der Programmierung bin, schreibe ich auch elementare Inhalte für das Studium.
Python 3.7.3 Anaconda Prompt Verwenden Sie die mit Ihrem PC gelieferte Webkamera Sie müssen OpenCV installieren, indem Sie im Voraus Folgendes an der Eingabeaufforderung eingeben.
$ pip install opencv-python
timelaps.py
import cv2
import glob
import os
import shutil
import time
from datetime import datetime
###Verschiedene Grundeinstellungen
date = datetime.now().strftime("%Y%m%d_%H%M%S")
if not os.path.exists(date):
os.mkdir(date) #Erstellen Sie einen Ordner zum Speichern von Bildern
#Warten auf die Zeit_Warten Sie einige Sekunden, bevor Sie mit der Aufnahme beginnen
capture_interval = 0.5 #Bildaufnahmeintervall (Sekunden)
waiting_time = 0
print('Recording will be started in {0} seconds'.format(waiting_time))
time.sleep(waiting_time)
print('Start')
###Ein Bild aufnehmen
def capture():
cap = cv2.VideoCapture(0) #Wechseln Sie zu einer beliebigen Kameranummer. Wenn es nur eine gibt, ist die Kameranummer 0.
while True: # capture_Intervall Lädt und speichert Bilder jede Sekunde.
ret, frame = cap.read() #Laden Sie das von der Kamera aufgenommene Bild als Rahmen
cv2.imshow("camera", frame) #Rahmen auf dem Bildschirm anzeigen. Wenn Sie diesen aus irgendeinem Grund nicht verlassen, können Sie den Vorgang nicht mit der Eingabetaste beenden.
k = cv2.waitKey(1)&0xff #Warten Sie auf die Tasteneingabe. Das Argument ist die Wartezeit für die Eingabe.
#Im Ordner "img" im aktuellen Verzeichnis "(date).Speichern Sie die Datei unter dem Dateinamen "jpg"
date_time = datetime.now().strftime("%Y%m%d%H%M%S")
path = "./{0}/".format(date) + date_time + ".jpg "
cv2.imwrite(path, frame) #Speichern Sie Bilder in einem Ordner
#Drücken Sie die Eingabetaste, um die Aufnahme zu beenden
if k == 13:
break
time.sleep(capture_interval)
cap.release()
cv2.destroyAllWindows()
###Bildzeitraffer
def timelaps():
images = sorted(glob.glob('{0}/*.jpg'.format(date))) #Laden des aufgenommenen Bildes.
print("Gesamtzahl der Bilder{0}".format(len(images)))
if len(images) < 30: #FPS-Einstellungen
frame_rate = 2
else:
frame_rate = len(images)/30
width = 640
height = 480
fourcc = cv2.VideoWriter_fourcc('m','p','4','v') #Geben Sie mp für den Video-Codec an. Entscheide dich für die Erweiterung des Videos (obwohl es etwas anders ist)
video = cv2.VideoWriter('{0}.mp4'.format(date), fourcc, frame_rate, (width, height)) #Geben Sie die Informationen des zu erstellenden Videos an (Dateiname, Erweiterung, FPS, Videogröße).
print("Videokonvertierung läuft...")
for i in range(len(images)):
#Bild laden
img = cv2.imread(images[i])
#Passen Sie die Größe des Bildes an.
img = cv2.resize(img,(width,height))
video.write(img)
video.release()
print("Videokonvertierung abgeschlossen")
def capture_delete():
shutil.rmtree(date)
if __name__ == '__main__':
start = time.time()
capture()
timelaps()
capture_delete()
elapsed_time = time.time() - start
print ("Die für die Verarbeitung benötigte Zeit:{0}".format(elapsed_time) + "[sec]")
Erstellen Sie einen Ordner, um Bilder mit mkdir zu speichern. Der Ordnername kann beliebig sein. Wenn Sie es diesmal am 20. September 2020 um 13:57:09 Uhr erstellen, wird ein Ordner mit dem Namen "20200920_135709" erstellt. Wenn bereits ein Ordner mit demselben Namen vorhanden ist, gibt os.mkdir einen Fehler aus. Daher versuche ich, einen Ordner nur zu erstellen, wenn kein Ordner mit demselben Namen vorhanden ist. Legen Sie das Intervall (Wartezeit) für die Bilderfassung fest. Wenn die Aufnahme nach dem Bewegen plötzlich beginnt, werde ich vor der Ameise reflektiert und warte auf Sekunden der Wartezeit.
capture() Sie können sehen, was Sie tun, indem Sie die Kommentare im Code lesen. Wenn das Foto am 20. September 2020 um 12:34:56 Uhr aufgenommen wurde, lautet der Dateiname "20200920123456". Ich habe Angst, zu viel Platz zu essen, deshalb verwende ich jpg anstelle von png. k == 13 entspricht dem Drücken der Eingabetaste. Die format () -Methode war sehr praktisch, um das Speicherziel anzugeben.
timelaps() Laden Sie zunächst das aufgenommene Bild. Die sortierte Funktion wird verwendet, um eine sortierte Liste in aufsteigender Reihenfolge der Zahlen zu erstellen (dh in der Reihenfolge, in der sie aufgenommen wurden). Aber wenn diese Methode verrückt ist
images = glob.glob('{0}/*.jpg'.format(date))
Aber es funktioniert gut. Stellen Sie als Nächstes die Anzahl der pro Sekunde verwendeten Bilder (FPS) ein. Vorerst habe ich versucht, es in ein 30-Sekunden-Video einzubauen, auch wenn ich es lange gedreht habe. Nachdem Sie die Bildschirmgröße des Videos festgelegt haben (das Standardbild ist 640 * 480, stimmt überein), erstellen wir das Video. Lesen Sie das i-te Bild mit cv2.imread (), passen Sie die Größe des Bildes an die Größe des Videos an und fügen Sie es dann in das Video ein. Erstellen Sie ein Video, indem Sie dies für alle Bilder wiederholen.
capture_delete() Löschen Sie den Ordner (Datum), der zum Speichern von Bildern erstellt wurde. Da es sich um eine Zeile handelt, ist es nicht erforderlich, sie als Funktion zu definieren, aber sie sieht irgendwie gut aus, also habe ich sie zu einer Funktion gemacht.
Bei Ausführung an der Eingabeaufforderung wird der folgende Text angezeigt.
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
Gesamtzahl der Bilder 10
Videokonvertierung läuft...
Videokonvertierung abgeschlossen
Die für die Verarbeitung benötigte Zeit:12.048035621643066[sec]
Ich konnte [WARN: 0] nicht gut verstehen. Ich bin glücklich, weil es funktioniert hat. Es ist ein Lehrbuch. Die Videodatei wird in dem Verzeichnis abgerufen, in dem Python ausgeführt wird. Nachdem die Ameisen angekommen sind, werde ich das Video veröffentlichen, das ich tatsächlich gedreht habe.
Für Anfänger habe ich über ein Programm gesprochen, das Bilder von einer PC-Kamera aufnimmt und anhand der aufgenommenen Bilder einen Zeitraffer erstellt. Wenn Sie Kenntnisse über Verzeichnisse, für, während usw. haben, ist dies nicht so schwierig. Selbst Anfänger der Programmierung sollten es auf jeden Fall versuchen. Da ich studiere, würde ich mich auch freuen, wenn Sie mir Vorschläge, Kommentare oder Ratschläge geben könnten.
Die Seiten, auf die ich beim Erstellen der Seite verwiesen habe, werden unten angezeigt.
https://gammasoft.jp/blog/python-string-format/ OpenCV OpenCV im Allgemeinen 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
Bilderfassung http://rikoubou.hatenablog.com/entry/2019/03/07/153430
waitKey () Funktion https://qrunch.net/@opqrstuvcut/entries/XZsZ0jUEX6RatMER?ref=qrunch https://www.kishugiken.co.jp/cn/code02.html
Bild-zu-Video-Konvertierung https://yusei-roadstar.hatenablog.com/entry/2019/11/29/174448 os, shutil https://note.nkmk.me/python-os-remove-rmdir-removedirs-shutil-rmtree/
das ist alles. Vielen Dank, dass Sie so weit gelesen haben.
Recommended Posts