Seite 1 von 2
Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Dienstag 18. Juni 2019, 13:42
von okliw994
Hallo zusammen,
Kann Python automatisch erkennen wie viele USB-Kameras am RPi angeschlossen sind?
Es handelt sich um einen Raspberry Pi 3 und ich programmiere in Python3. Angeschlossene USB-Geräte kann ich mir bereits ausgeben lassen:
Code: Alles auswählen
import subprocess
output = subprocess.check_output("lsusb")
output = output.decode('utf8')
usbid = output
print(usbid)
Allerdings komme ich ab hier nicht weiter, da ich nur die USB-Webcams benötige und verschiedene Webcam-Modelle anders bezeichnet werden. Somit kann ich auch nicht einfach den String vergleichen, da ich das Programm sonst nicht funktioniert wenn eine andere Webcam angeschlossen ist. Mir würde es reichen wenn ich eine Zahl als Integer erhalte, welche angibt wie viele Cams angeschlossen sind.
Zur Gesamtfunktion:
Der RPi nimmt automatisch Bilder auf. Allerdings sollen die Kameras austauschbar sein und jedes mal zu Beginn des Programms erkannt werden, wie viele Kameras angeschlossen sind, damit keine leeren Dateien geschrieben werden.
Ich hoffe ihr könnt mir helfen und entschuldigt meine Unwissenheit..
Gruß, okliw994
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Dienstag 18. Juni 2019, 13:44
von Kebap
Kannst du dir nicht die verschiedenen Strings der verschiedenen Webcam-Modelle merken und prüfen, wieviele davon enthalten sind? Bzw. nur solche, für die dein Programm dann auch tatsächlich funktioniert.
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Dienstag 18. Juni 2019, 13:59
von __blackjack__
@okliw994: Ist das „USB“ denn so wichtig? Die Anzahl der erkannten Kameras sollte man durch auflisten/zählen von `/dev/video*` erkennen können. Also so etwas wie ``camera_count = len(glob.glob('/dev/video*'))``. Oder wenn Du OpenCV vewendest einfach `VideoCapture()`-Objekte erzeugen und schauen ob die `isOpened()` sind. Ich glaube maximale Anzahl ist unter Linux 64.
Wenn Du auch Qt5 verwenden willst/kannst, könnte `QCameraInfo` eventuell auch interessant sein.
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Dienstag 18. Juni 2019, 14:59
von __deets__
Ich mache so etwas aehnliches fuer angeschlossene Massenspeicher und Netzwerkkarten via USB. Konkret verwende ich dazu pyudev um die Ereignisse zu bekommen, wenn da etwas an/abgesteckt wird, das ist aber auch "statisch" nutzbar. Es ist allerdings ein ziemliches rumgefummel, bei dem man viel ausprobieren muss. Dazu kann man zb mit 'udevadm monitor -pke' sich mal anschauen, was so passiert, wenn man eine USB Kamera anklemmt.
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Dienstag 18. Juni 2019, 19:47
von okliw994
Erstmal danke an euch alle für eure Antworten!
@Kebap
Das geht leider nicht. Das Programm soll über mehrere Jahre eingesetzt werden. Wenn im laufe der Zeit Kameras ausgetauscht oder erweitert werden kann ich die Strings derer jetzt noch nicht ahnen.
@_blackjack_
Das klingt alles sehr gut und genau nach dem was ich suche - Danke! Ich verwende sowohl opencv, als auch Qt5. Ich werde morgen früh gleich mal schauen ob ich das passend einbinden kann und melde mich dann noch mal ob's geklappt hat.
@_deets_
Auch dir danke für deine Antwort. Ich gucke mir das morgen früh auch mal genauer an und entscheide im Anschluss was sich für meine Kenntnisse am besten realisieren lässt!
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Mittwoch 19. Juni 2019, 10:16
von okliw994
Guten Morgen,
@_blackjack_
Ich habe folgende Codes ausprobiert um mit die Anzahl der angeschlossenen Kameras auszugeben:
Code 1:
Code: Alles auswählen
import glob
import sys
import os
camera_count = len(glob.glob('/dev/video*))
print(camera_count)
Dabei hatte ich eine Maus, Tastatur, USB-Scanner, und eine Webcam angeschlossen und mir wurde ein Wert von 5 ausgegeben.
Code 2:
Code: Alles auswählen
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import PyQt5
import sys
import os
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.online_webcams = QCameraInfo.availableCameras()
print(online_webcams)
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setApplicationName("Webcam")
windwow = MainWindow()
app.exec_()
Bei diesem Code erhalte ich folgende Fehlermeldung: NameError: name 'QCameraInfo' is not defined
Kannst du erkennen wo mein Fehler liegt?
Gruß, okliw994
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Mittwoch 19. Juni 2019, 10:25
von __deets__
Man macht keine Sternchenimporte, insbesondere nicht bei Qt, wo man sich damit hunderte oder gar tausenden Namen in den Namensraum holt. Und man keine Ahnung hat, wo denn nun ein Name herkommt.
Und wenn du die Dokumentation zu QCameraInfo anschaust (
https://doc.qt.io/qt-5/qcamerainfo.html) - in welchem Qt Modul kommt die vor? Und importierst du daraus etwas?
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Mittwoch 19. Juni 2019, 10:34
von okliw994
Sorry ich bin noch nicht lange am programmieren und lerne jeden Tag was neues dazu. Daher kommt es allerdings auch oft dazu, das ich Sachen einfach ausprobiere und denke es wäre richtig oder Sachen aus dem Internet abschreibe...
Also muss ich aus QCameraInfo und QMultimedia importieren? Dabei bleibt die Fehlermeldung leider bestehen..
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Mittwoch 19. Juni 2019, 10:48
von __deets__
Bitte die GENAUE Fehlermeldung, und den dazugehoerigen Code zeigen.
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Mittwoch 19. Juni 2019, 11:51
von okliw994
Code: Alles auswählen
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import PyQt5
import QCameraInfo
import QMultimedia
import sys
import os
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.online_webcams = QCameraInfo.availableCameras()
print(online_webcams)
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setApplicationName("Webcam")
windwow = MainWindow()
app.exec_()
Traceback (most recent call last):
File "/home/pi/kamerazaehler.py", line 9, in <module>
import QCameraInfo
File "/usr/lib/python3/dist-packages/thonny/backend.py", line 305, in _custom_import
module = self._original_import(*args, **kw)
ImportError: No module named 'QCameraInfo'
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Mittwoch 19. Juni 2019, 11:54
von __deets__
Das du Anfaenger bist erklaert aber nicht, das du nicht in der Lage sein solltest, auch mal ein bisschen durch die Dokumentation zu stoebern, und die Struktur von PyQt nachzuvollziehen. Die ganzen QtIrgendwas-Module importiert man mit "PyQt5.PyQtIrgendwas" - das ist mit QtCore so, mit QtGui, mit QtWidgets (die du alle schon benutzt). Und so ist es auch mit QtMultimedia.
Fuer mich funktioniert problemlos
Code: Alles auswählen
python3 -c 'from PyQt5.QtMultimedia import QCameraInfo; print(QCameraInfo.availableCameras())'
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Mittwoch 19. Juni 2019, 11:56
von __deets__
Und
https://doc.bccnsoft.com/docs/PyQt5/api ... ainfo.html
ist der erste Treffer, wenn man nach PyQt und QCameraInfo googelt. Da steht der komplette Pfad, wie man die Klasse findet.
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Mittwoch 19. Juni 2019, 12:05
von okliw994
Sorry aber selbst wenn ich genau deinen Code abtippe meckert er direkt beim import:
ImportError: No module named 'PyQt5.QtMultimedia'
Ps:
Ich gebe mir ja wirklich mühe und will nicht auch nicht das man mir den kompletten Code vorschreibt. Aber wenn die Doku dann z.B. wieder in C++ geschrieben ist verwirrt mich das manchmal noch mehr..
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Mittwoch 19. Juni 2019, 12:34
von __blackjack__
@okliw994: Dann ist das wahrscheinlich nicht installiert.
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Mittwoch 19. Juni 2019, 13:02
von okliw994
Ok dann muss ich wohl erstmal nach der fehlenden Installationsdatei suchen. Danke euch trotzdem!
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Mittwoch 19. Juni 2019, 13:23
von __deets__
Ich musste python3-pyqt5.qtmultimedia installieren.
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Donnerstag 20. Juni 2019, 07:13
von okliw994
Guten Morgen,
Die Installation hat geklappt und es gibt keine Fehlermeldung mehr. Allerdings werden mir nur [] (eckige Klammern ohne Wert) ausgegeben..
Code: Alles auswählen
from PyQt5.QtMultimedia import QCameraInfo
print (QCameraInfo.availableCameras())
Langsam komme ich mir schon etwas blöd vor, dass ich das nicht selbst hinbekomme..
Trotzdem: weis jemand was ich noch falsch mache?
Gruß, okliw994
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Donnerstag 20. Juni 2019, 07:35
von sparrow
Hier sagt jemand, bei ihm funktioniert es, wenn er vorher einmalig ein QCamera Objekt erzeugt.
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Donnerstag 20. Juni 2019, 07:51
von okliw994
Das hatte ich schon versucht.. indem ich:
cam1 = cv2.VideoCapture(0)
cam2 = cv2.VideoCapture(1)
vor die Abfrage gesetzt habe. Leider bleibt die Ausgabe dabei unverändert..
Re: Anzahl angeschlossener Kameras am RPi ermitteln
Verfasst: Donnerstag 20. Juni 2019, 07:57
von __deets__
Das ist ja aber auch nicht QCamera. Wenn das ein bug ist, dann kann man nicht davon ausgehen, dass man nur irgendwas irgendwie mit Kameras machen muss. Sondern schon genau das was da beschrieben wird.