Opencv を使用して Linux を実行している IP カメラから rtsp ストリームを読み取ろうとしています。カメラは中国の Floureon IPC 360 です。顔認識コードを開発しようとしています。
次のコードを使用しています。
import numpy as np
import cv2
vcap = cv2.VideoCapture("rtsp://192.168.1.240:554/realmonitor?channel=0")
print(vcap)
while(1):
ret, frame = vcap.read()
print (ret,frame)
cv2.imshow('VIDEO', frame)
#cv2.imwrite('messigray.png',frame)
cv2.waitKey(1)
$ python w.py
<VideoCapture 0x7fc685598230>
(False, None)
Traceback (most recent call last):
File "w.py", line 9, in <module>
cv2.imshow('VIDEO', frame)
cv2.error: OpenCV(4.1.0) /io/opencv/modules/highgui/src/window.cpp:352: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'
フレームが 'None' & (ret が False) であるため、cv2.imshow が失敗しています。
別のウィンドウで openRTSP を実行できます:
./openRTSP -4 -P 10 -F cam_eight -t -d 8 rtsp://192.168.1.240:554/realmonitor?channel=0
これにより、再生できる素敵な mp4 ファイルが作成されます: 107625 Sep 12 19:08 cam_eight-00000-00010.mp4
OpenRTSP は、t (tcp) の有無にかかわらず動作します。また、admin:123456 資格情報を cv2.VideoCapture 行に提供しようとしましたが、これは openRTSP では必要ないようです。
cv2.VideoCapture が明らかに失敗している理由はありますか?
上記のコードのバリエーションを試しましたが、何も機能しないようです。カメラでONVIFを有効にしました