Seite 1 von 2

Mit cv2 rtsp stream öffnen

Verfasst: Sonntag 18. Juli 2021, 12:20
von toper
Hallo zusammen,

ich habe eine IP-Cam und möchte gerne das Bild mit cv2 auslesen.

Mit dem VLC Player kann ich den Stream öffnen. In Python bekomme ich aber nur eine Fehlermeldung.

Code: Alles auswählen

cap = cv2.VideoCapture("rtsp://admin:123456@192.168.2.129")

ret, img = cap.read()

cv2.imshow('video_output', img)
        
cap.release()
cv2.destroyAllWindows()
Traceback (most recent call last):
File "C:\Users\Tobias\Desktop\test.py", line 10, in <module>
cv2.imshow('video_output', img)
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-oduouqig\opencv\modules\highgui\src\window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
Weiß jemand woran das liegt?

Re: Mit cv2 rtsp stream öffnen

Verfasst: Sonntag 18. Juli 2021, 12:24
von __deets__
Der Fehler besagt, dass du keinen gültigen Frame hast. Der ist None. Das kann AFAIK bei einem stream schon mal passieren. Da musst du eben eine Weile lesen, und wenn dann immer noch keiner kommt, gibt es ein Problem.

Re: Mit cv2 rtsp stream öffnen

Verfasst: Sonntag 18. Juli 2021, 12:34
von toper
Heißt das, es gibt keine Lösung dafür?

Re: Mit cv2 rtsp stream öffnen

Verfasst: Sonntag 18. Juli 2021, 12:42
von __deets__
Nein, das habe ich nicht geschrieben.

Re: Mit cv2 rtsp stream öffnen

Verfasst: Sonntag 18. Juli 2021, 13:36
von Sirius3
Du ignorierst den Rückgabewert `ret`. Solange der nicht wahr ist, musst du cap.read nochmal aufrufen.

Re: Mit cv2 rtsp stream öffnen

Verfasst: Sonntag 18. Juli 2021, 13:50
von rogerb
@toper,

ich habe schon lange nichts mehr mit opencv gemacht, aber nach etwas Suche im Netz findet man oft solche Code-Beispiele:

Code: Alles auswählen

cap = cv2.VideoCapture("rtsp://admin:12345@192.168.1.64/main/Channels/1")
print (cap.isOpened())
while cap.isOpened():
    success,frame = cap.read()
    cv2.imshow("frame",frame)
    cv2.waitKey(1) 

Re: Mit cv2 rtsp stream öffnen

Verfasst: Sonntag 18. Juli 2021, 14:00
von toper
Ich habe jetzt mal folgendes versucht:

Code: Alles auswählen

cap = cv2.VideoCapture("rtsp://admin:123456@192.168.2.129")

ret = False
while ret == False:
        ret, img = cap.read()

cv2.imshow('video_output', img)
        
cap.release()
cv2.destroyAllWindows()

Allerdings hilft das nichts, da ret immer False ist.
Er findet den Stream einfach nicht

Re: Mit cv2 rtsp stream öffnen

Verfasst: Sonntag 18. Juli 2021, 18:34
von __deets__
Du prüfst, ob der erste Frame gut ist. Wissen wir schon: ist er nicht. Also musst du mehrfach Frames abholen. Mach daraus ein while True, und wenn das nach mehren Sekunden immer noch nichts liefert, DANN findet er den Stream nicht.

Re: Mit cv2 rtsp stream öffnen

Verfasst: Sonntag 18. Juli 2021, 22:30
von toper
Auch nach öfterem überprüfen funktioniert es nicht.

Aber, wenn ich denselben Link im VLC Player eingebe funktioniert es.

Es kann also nicht am Link liegen.

Re: Mit cv2 rtsp stream öffnen

Verfasst: Sonntag 18. Juli 2021, 22:37
von __deets__
Dann kann opencv das so nicht. Ggf ist das Format nicht unterstützt, und du kannst es mit VLC wo es ja geht transkodieiren: https://wiki.videolan.org/Documentation ... _streaming

Re: Mit cv2 rtsp stream öffnen

Verfasst: Montag 19. Juli 2021, 07:00
von sparrow
@toper: Wie übeprüfst du das denn mehrmals? Zeig mal den Code, bitte.

Re: Mit cv2 rtsp stream öffnen

Verfasst: Montag 19. Juli 2021, 09:36
von toper
Der Code mit dem mehrfachen überprüfen sieht so aus:

Code: Alles auswählen

cap = cv2.VideoCapture("rtsp://admin:123456@192.168.2.129")

ret = Flase
while ret == False:
	ret, img = cap.read()

cv2.imshow('video_output', img)
        
Ich habe auch noch einen anderen Ansatz versucht.
Mit der VLC Bibliothek in Python kann ich den Stream auch auslesen.
Hierbei fehlt mir allerdings der Schritt, wie ich cv2 einen Frame aus dem VLC Stream übergeben kann.

Re: Mit cv2 rtsp stream öffnen

Verfasst: Montag 19. Juli 2021, 10:32
von __deets__
Du musst nur ein numpy Array erzeugen.

Re: Mit cv2 rtsp stream öffnen

Verfasst: Montag 19. Juli 2021, 10:33
von toper
Und wie mache ich das?
Ich muss ja zuerst irgendwie an einen einzelnen Frame herankommen.

Re: Mit cv2 rtsp stream öffnen

Verfasst: Montag 19. Juli 2021, 12:17
von __deets__
Du sagst doch du kommst an die Bilder mit der VLC Bibliothek. Die wird dir doch die Pixel geben, oder was sonst heißt das?

Re: Mit cv2 rtsp stream öffnen

Verfasst: Montag 19. Juli 2021, 12:21
von toper
Ich kann mit dem VLC Player den Stream lesen und abspielen.
Ich benötige aber die einzelnen Frames, die ich cv2 übergeben kann.

Re: Mit cv2 rtsp stream öffnen

Verfasst: Montag 19. Juli 2021, 12:24
von __deets__
toper hat geschrieben: Montag 19. Juli 2021, 09:36 Mit der VLC Bibliothek in Python kann ich den Stream auch auslesen.
Das sind doch deine Worte. Wie bekommst du denn dann “den stream ausgelesen”? Was kriegst du da, was sagt die Dokumentation wie du an Pixelwerte kommst?

Re: Mit cv2 rtsp stream öffnen

Verfasst: Montag 19. Juli 2021, 12:27
von toper
Ich kann mit VLC.MediaPlayer den Stream "empfangen" und ihn mit play() abspielen.

Das Problem ist, dass ich bisher nichts gefunden habe, wie ich einzelne Frames bekomme ohne sie speichern zu müssen oder wie ich sie cv2 übergeben kann.

Re: Mit cv2 rtsp stream öffnen

Verfasst: Montag 19. Juli 2021, 12:58
von __deets__
Hast du mal einen Link auf die entsprechende Bibliothek?

Re: Mit cv2 rtsp stream öffnen

Verfasst: Montag 19. Juli 2021, 13:02
von toper