Wir werden vorstellen, wie Sie mit opencv auf einfache Weise ein Kamerabild aufnehmen und es regelmäßig ausführen können. Die Kameras hier sind auf Kameras beschränkt, die von opencv gesteuert werden können, z. B. USB-Kameras und eingebaute Kameras. Einstellungen usw. basieren auf der Annahme, dass Sie Python mit der Anaconda3-Serie verwenden. Es funktioniert auf jedem Betriebssystem wie Windows, Mac und Linux.
Wenn Sie eine automatische Steuerung mit einer High-End-Kamera wie einer Spiegelreflexkamera durchführen möchten, scheint Gphoto ein Muss zu sein. Die kompatiblen Modelle von gphoto sind http://www.gphoto.org/proj/libgphoto2/support.php, und einige werden unterstützt. Steuern einer Spiegelreflexkamera mit einem Objektiv von einem Raspelkuchen ist hilfreich.
Da anaconda standardmäßig nicht opencv enthält,
python
conda install -c conda-forge opencv
Ausführen und eingeben.
schedule
Dies ist in Anaconda nicht enthalten, daher können Sie pip verwenden.
python
pip install schedule
Der Grund, warum Anakonda nicht enthalten ist, hängt von den Details der Entwicklung ab, sodass keine gründliche Verfolgung erforderlich ist.
oneshot.py
#!/usr/bin/env python
import cv2
deviceid=0 # it depends on the order of USB connection.
capture = cv2.VideoCapture(deviceid)
ret, frame = capture.read()
cv2.imwrite('test.jpg', frame)
--Capture = cv2. Holen Sie sich die Geräte-ID mit VideoCapture (Geräte-ID). Beachten Sie jedoch, dass sich die Geräte-ID bei einer USB-Kamera in Abhängigkeit von der Reihenfolge des Zeigens ändert. Normalerweise sollte Nr. 0 eingebaut sein und die USB-Kamera sollte Nr. 1 sein. --ret, frame = capture.read () In diesem Moment werden die Bilddaten im Frame gespeichert. --Verwenden Sie cv2.imwrite ('test.jpg', frame), um das erfasste Bild in jpg zu speichern. Das Sicherungsdateiformat wird durch die Erweiterung bestimmt.
Informationen zum Speichern von Bildern mit OpenCV finden Sie unter Lesen und Speichern von Bilddateien mit Python, OpenCV. Video der in Mac integrierten Kamera mit Python aufnehmen kann als Referenz für die Ermittlung von Fehlern und den Wechsel zur Graustufe verwendet werden.
In dem Verzeichnis, in dem sich oneshot.py befindet, in einer Umgebung, in der Python einen PATH hat
python
python oneshot.py
Oder
python
chmod +x oneshot.py
./oneshot.py
ist. Wenn es sich um Linux oder Mac handelt, verwenden Sie das Terminal. Windows kann eine Eingabeaufforderung sein, es ist jedoch möglicherweise einfacher, es über eine IDE-ähnliche App auszuführen.
scheduled_shot.py
#!/usr/bin/env python
import cv2
import datetime
import schedule
import time
deviceid=0 # it depends on the order of USB connection.
capture = cv2.VideoCapture(deviceid)
def job():
ret, frame = capture.read()
strdate=datetime.datetime.now().strftime('%Y%m%dT%H%M%S')
fname="image_" + strdate + ".jpg "
cv2.imwrite(fname, frame)
print(fname + " is created.")
#do job every 10 seconds
schedule.every(1/6).minutes.do(job)
while True:
schedule.run_pending()
time.sleep(1)
Dieses Mal wird das Bild alle 10 Sekunden aufgenommen. Informationen zur Verwendung des Zeitplans finden Sie unter Lassen Sie uns Module regelmäßig mithilfe des Zeitplans ausführen.
Das Schreiben von True ist in Software möglicherweise nicht üblich, aber für die Hardwaresteuerung ein Muss. Mit dieser Funktion können Sie eine Funktion implementieren, die eine Endlosschleife erstellt, z. B. bei einem Reiskocher. Wenn Sie auf das Netzkabel zeigen, funktioniert diese weiterhin. Hier können Sie mit True alle 10 Sekunden unbegrenzt alle 10 Sekunden Bilder aufnehmen. Um der Endlosschleife zu entkommen, müssen Sie das Programm mit cntl + c usw. zwangsweise beenden (Auf diese Weise können Sie auch einen Timer einstellen, der nach einer bestimmten Zeit beendet wird).
Generieren Sie den Dateinamen mit datetime, damit der Dateiname nicht neu geschrieben wird und die Dateinamen in chronologischer Reihenfolge angeordnet werden. Weitere Informationen finden Sie unter Datum, Uhrzeit und Zeichenfolge mit Python datetime konvertieren.
Überprüfen Sie bei kontinuierlicher Erfassung nach dem Erfassen des Bildes die Dateigröße und überlegen Sie, wie viel Speicherplatz Sie benötigen. Wenn Sie bemerken, ist die verbleibende Kapazität der Festplatte häufig Null.
python
python scheduled_shot.py
...
image_20201001T110144.jpg is created.
image_20201001T110154.jpg is created.
image_20201001T110204.jpg is created.
Von nun an wird das Bild bei der Ausführung alle 10 Sekunden gespeichert. Da es nur eine erzwungene Beendigung gibt, wird sie durch gewaltsames Beenden des Programms mit cntl + c oder dergleichen beendet.
Wenn Sie versuchen, das Bild mit einer Imshow von Python usw. anzuzeigen, ist die Ausgabe der letzten Bilder aufgrund der großen Kapazität erheblich langsam. Speichern Sie das Bild in PNG oder JPEG, bevor Sie es anzeigen.
Wenn dies nicht ausreicht, [erstellen wir eine GUI mit PyQt5! Sie können ganz einfach eine GUI wie Erklärung von der Einführung zur Verwendung erstellen. Unter dem Gesichtspunkt der Stabilität ist es jedoch besser, die ordnungsgemäße Verwendung mit CUI zu gewährleisten.
In einem solchen Programm ist es auch besser, das Datenerfassungsprogramm darauf zu konzentrieren. Die CPU und die Programme, die Bilder von der Kamera erfassen und speichern, sollten sich darauf konzentrieren, die Daten nicht zu verlieren. Sekundäre Operationen wie das Herunterladen, Übertragen und Verarbeiten von Daten in der letzten Stufe werden von einem anderen Programm ausgeführt.
Recommended Posts