Nehmen Sie Zeitraffer von einer PC-Kamera mit Python, OpenCV auf

Einführung

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.

Methode

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 

Code

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]")

Codebeschreibung

Überblick

  1. Nehmen Sie in regelmäßigen Abständen Bilder auf und speichern Sie sie in einem Ordner
  2. Erstellen und speichern Sie ein Video (Zeitraffer), das die im Ordner gespeicherten Bilder verbindet
  3. Löschen Sie eine große Anzahl von Fotos, die als Zeitraffermaterial für jeden Ordner verwendet werden
  4. Geben Sie abschließend die erforderliche Zeit an.

def capture () oder früher

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.

Ergebnis

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.

abschließend

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.

Verweise

Die Seiten, auf die ich beim Erstellen der Seite verwiesen habe, werden unten angezeigt.

format () Methode

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

Nehmen Sie Zeitraffer von einer PC-Kamera mit Python, OpenCV auf
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Bildaufnahme von der Kamera mit Python + OpenCV
Erstellen eines Markierungsblatts mit Python OpenCV (Tipps zum guten Lesen)
Schätzung der Kopforientierung mit Python und OpenCV + dlib
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Erstellen Sie eine Webmap mit Python und GDAL
Führen Sie Python-Dateien mit Django aus HTML aus
Führen Sie Python-Skripte in Excel aus (mit xlwings).
Python, OpenCV-Kameraerfassung
Erstellen Sie einen Farbsensor mit einem Raspeltorte und einer Kamera
Versuchen Sie, eine komprimierte Datei mit Python und zlib zu erstellen
Implementieren eines Generators mit Python> Link> Yield und next ()> Yield
Holen Sie sich Dateien von Linux mit paramiko und scp [Python]
Erstellen Sie mit OpenCV und TensorFlow einen Sato Yohei-Diskriminator
[Python] Starten Sie eine Batchdatei aus Python und übergeben Sie Variablen.
[Python] Sortieren Sie Äpfel und Birnen anhand einer Support Vector Machine (SVM) nach Pixelwerten.
Zeigen Sie Bilder in OpenCV von Python mit einer externen USB-Kamera auf Ihrem MacBook an
Mit Python abflachen
Visualisieren Sie die Pflanzenaktivität aus dem Weltraum mithilfe von Satellitendaten und Python
Erstellen Sie eine WEB-Überwachungskamera mit Raspberry Pi und OpenCV
Erstellen einer Python-Umgebung auf einem Mac bis zur Verwendung von Jupyter Lab
[Python] Verwenden von OpenCV mit Python (Basic)
[Python] Kapitel 01-03 Über Python (Schreiben und Ausführen eines Programms mit PyCharm)
Schalten Sie die Kameraauflösung von OpenCV aus um
Hasch mit Python und entkomme dem Ego eines bestimmten Ministers
Python: Erstellen Sie ein Wörterbuch aus einer Liste von Schlüsseln und Werten
Prognostizieren Sie das Geschlecht anhand des Namens mithilfe der Gender-API und von Pykakasi in Python
[Python] Zufällige Datenextraktion / -kombination aus DataFrame mit Random und Pandas
[Python] Zugreifen auf und Zuschneiden von Bildpixeln mit OpenCV (für Anfänger)
Ich habe Chatbot mit LINE Messaging API und Python erstellt
Verwenden von OpenCV mit Python @Mac
Suchen Sie mit Pythonista3 nach einem Bild von der Kamerarolle
Verwenden Sie Python-Code, um die Körperhaltung durch Öffnen des USB-Kamerabilds zu erkennen
Erstellen Sie mit Python und Redis eine Rangliste für Spiele in der Alibaba-Cloud
Verarbeiten Sie das Ausführungsergebnis von Splunk mit Python und speichern Sie es in einer Datei
Erstellen Sie eine gestreifte Illusion mit Gammakorrektur für Python3 und openCV3
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Holen Sie sich Daten von VPS MySQL mit Python 3 und SQL Alchemy
Ein bisschen mehr über Referenzen ~ Verwenden von Python und Java als Beispiele ~
[Bildverarbeitung] Poo-san ist durch Kantenerkennung mit Python und OpenCV nackt!
Zeichnen Sie eine Aquarellillusion mit Kantenerkennung in Python3 und openCV3
Erstellen und testen Sie mit Docker in wenigen Minuten eine OpenCV- und Python-Umgebung
Ausrichten gescannter Bilder von animiertem Videopapier mit OpenCV und Python
[Hinweis] Verwenden eines 16x2-stelligen LCD-Zeichens (1602A) von Python mit Raspeye
[Python] Ich habe eine REST-API mit AWS API Gateway und Lambda geschrieben.
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
[Python] Versuchen Sie, Zeichen aus Bildern mit OpenCV und pyocr zu erkennen
Python a + = b und a = a + b sind unterschiedlich
Umgebungskonstruktion von Python und OpenCV
Leuchtendes Leben mit Python und OpenCV
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Neuronales Netzwerk mit OpenCV 3 und Python 3
Berühren Sie Python-Objekte in Elixir
Verwenden von Rstan aus Python mit PypeR
Erstellen Sie mit tkinter eine Python-GUI
Authentifizierung mit Tweepy-User-Authentifizierung und Anwendungsauthentifizierung (Python)
Python, Ausbeute, Rückkehr und manchmal Ausbeute von