@raspi11: Du wertest `ret` gar nicht aus. `foto` enthält nur dann gültige Bilddaten wenn `ret` wahr ist.
Sonstige Anmerkungen: Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst, und die man nur aufruft wenn das Modul als Programm ausgeführt wird.
Man nummeriert keine Namen durch. In solchen fällen will man sich entweder bessere, passendere Namen ausdenken, oder gar keine einzelnen Namen sondern eine Datenstuktur verwenden. Oft eine Liste. Im vorliegenden Fall ist die 1 bei `path` aber einfach nur komplett sinnfrei. Und man könnte den Namen so ändern das der Leser weiss, was für eine Bedeutung der Pfad hat. Zum beispiel `PHOTO_PATH`. Gross geschrieben, weil es eine Konstante ist und keine Variable.
Und statt einer Zeichenkette könnte man tatsächlich ein `pathlib.Path`-Objekt verwenden, denn später das Zusammensetzen von diesem Pfad und dem Dateinamen sollte auf keinen Fall mit ``+`` passieren, sondern entweder über `Path`-Operationen oder mit der `os.path.join()`-Funktion wenn man es bei einer Zeichenkette belässt.
`kennnummer` vor der Schleife an einen Wert zu binden macht keinen Sinn, weil dieser Wert nie irgendwo verwendet wird.
Um Bedingungen bei ``if`` und ``while`` gehören keine Klammern.
Man sollte bei Namen keine Abkürzungen verwenden die nicht allgemein bekannt sind. Das betrifft `cap` und `ret`. Bei `cap` gibt es zusätzlich das Problem das der abkürzte Name selbst wieder eine Bedeutung hat. So etwas ist verwirrend und Namen sollen ja gerade nicht verwirren, sondern dem Leser verraten was der Wert dahinter im Kontext des Programms für eine Bedeutung hat.
Der `release()`-Aufruf sollte in jedem Fall ausgeführt werden, also auch wenn zwischen erstellen des Objekts und dem Aufruf von `release()` eine Ausnahme auftritt. Man braucht da also ``try``/``finally``.
Ungetestet:
Code: Alles auswählen
#!/usr/bin/env python3
from pathlib import Path
import cv2
PHOTO_PATH = Path('/home/pi/test1/')
def main():
while True:
kennnummer = input()
if kennnummer != 'ABC':
camera = cv2.VideoCapture(0)
try:
is_ok, foto = camera.read()
if is_ok:
cv2.imwrite(str(PHOTO_PATH / (kennnummer + '.jpg')), foto)
finally:
camera.release()
if __name__ == '__main__':
main()