Hallo Python-Gemeinde,
habe folgendes Problem. Zum Bau eines Schweißroboters verwende ich eine USB-cam um das Werkstück zu finden, zu überprüfen und den Scheißbrenner heranzuführen.
Das Programm greift mit Hilfe von cv2 auf die cam zu. Alles funktioniert einwandfrei, aber manchmal kommt es zu Störungen in der cam oder auf dem Weg dorthin, sprich USB-Kabel und Hub. Schuld sind die gewaltigen elektromagnetischen Felder bei der HF-Zündung. Folge ist, dass es eine Fehlermeldung gibt und das Programm stoppt. Ein Neustart mit cv2.VideoCapture(0) nach cv2.release() funktioniert bei mir nicht. Erst nach Neustart des Kernels kann man wieder auf die cam zugreifen.
Hat jemand eine Idee oder ein ähnliches Problem?
Über Antworten würde ich mich freuen.
cv2.release() schaltet die cam nicht aus
Du hast das Problem doch schon identifiziert. Dann lös das doch. Python kann vieles, die Gesetze der Physik aushebeln gehört leider nicht dazu. Wenn die USB Kamera so konfus wird, das sie wiederum den USB Stack im Kernel um den Verstand bringt, kannst du da wenig tun. Es ist möglich den USB Host Treiber zu entladen und zu laden, aber genauso gut oder besser kannst du das system Durchstarten. Alternativ eben das eigentliche Problem lösen - robustere Kamera, Abschirmung.
- __blackjack__
- User
- Beiträge: 14050
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@__deets__:

Code: Alles auswählen
import antigravity
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Hallo _deets_,
danke für die Antwort.
Was Du schreibst, ist richtig.
Bin gerade dabei die Abschirmung zu verbessern. Aber zum Beispiel den optischen Teil der Kamera kann man nicht abschirmen.
Hast Du ein Beispiel für eine bessere Kamera?
Die beste Lösung wäre doch, die Kamera während der HF_Zündung mal kurz auszuschalten. cv2.VideoCapture(0) erzeugt so eine Art Standleitung.
Gibt es eine Möglichkeit, das USB_System (Windows 8.1 Rechner) von Python aus kurz zu ignorieren. Die eigentliche Fehlermeldung stammt von Windows.
Gibt es mit Python noch eine andere Möglichkeit Kamerabilder aufzunehmen und abzuspeichern. Dann könnte ein zweites Programm parallel zyklisch Bilder abspeichern. Das Hauptprogramm greift dann auf die Datei zu. Mein Programm wertet nicht die Bewegungen in einem Video sondern ein statisches Einzelbild aus.
Warum funktioniert das cv2.release() nicht richtig? Ein Neustart der Kamera bei Fehlermeldung wäre doch eine sehr schöne Lösung.
Grüße Benno
danke für die Antwort.
Was Du schreibst, ist richtig.
Bin gerade dabei die Abschirmung zu verbessern. Aber zum Beispiel den optischen Teil der Kamera kann man nicht abschirmen.
Hast Du ein Beispiel für eine bessere Kamera?
Die beste Lösung wäre doch, die Kamera während der HF_Zündung mal kurz auszuschalten. cv2.VideoCapture(0) erzeugt so eine Art Standleitung.
Gibt es eine Möglichkeit, das USB_System (Windows 8.1 Rechner) von Python aus kurz zu ignorieren. Die eigentliche Fehlermeldung stammt von Windows.
Gibt es mit Python noch eine andere Möglichkeit Kamerabilder aufzunehmen und abzuspeichern. Dann könnte ein zweites Programm parallel zyklisch Bilder abspeichern. Das Hauptprogramm greift dann auf die Datei zu. Mein Programm wertet nicht die Bewegungen in einem Video sondern ein statisches Einzelbild aus.
Warum funktioniert das cv2.release() nicht richtig? Ein Neustart der Kamera bei Fehlermeldung wäre doch eine sehr schöne Lösung.
Grüße Benno
Ich habe keine bessere Kamera, eine solche Umgebung ist nicht alltäglich, und die Reaktion darauf schwer vorhersehbar. Probier entweder verschiedene aus, oder such nach für sowas zertifizierten. Die sind dann allerdings bestimmt 4stellig im Preis.
USB ports ausschalten kannst du zb mit nem Acroname Hub. Wenn das die Kamera lahmlegt, konfusiert sie ggf den Kernel nicht. Dazu muss der Hub natürlich möglichst weit weg von der Kamera. Der lässt sich auch gut mit Python steuern. Ggf kann man sowas aber auch die Manipulation der Stromführenden Adern selbst machen.
Und USB ist USB. Es gibt keinen magischen anderen Weg, auf dem die Bilder in die Kamera kommen. Selbst wenn es verschiedene APIs uns Standards geben sollte - das, was da aufgibt, ist auf einer Ebene darunter.
USB ports ausschalten kannst du zb mit nem Acroname Hub. Wenn das die Kamera lahmlegt, konfusiert sie ggf den Kernel nicht. Dazu muss der Hub natürlich möglichst weit weg von der Kamera. Der lässt sich auch gut mit Python steuern. Ggf kann man sowas aber auch die Manipulation der Stromführenden Adern selbst machen.
Und USB ist USB. Es gibt keinen magischen anderen Weg, auf dem die Bilder in die Kamera kommen. Selbst wenn es verschiedene APIs uns Standards geben sollte - das, was da aufgibt, ist auf einer Ebene darunter.
-
- User
- Beiträge: 4
- Registriert: Montag 25. November 2019, 10:29
Wenn ich mich nicht Irre Kannst du den laufenden Prozess einfach beenden anstatt den Kernel neu zu starten und dann sollte es wieder Funktionieren.