Подключение к IP камере через opencv python 3.4

Имеется старая IP камера D-link 950, хочу подключится к ней. В мануале и настройках к камере написано, что для подключения через http нужно использовать формат типа http://IP_Address_of_camera/iMode.asp. Написал вот такой код

capture = cv2.VideoCapture('http://admin:pass@IP_Address_of_camera/iMode.asp')
print(capture.read())

while True:
    ret, frame = capture.read()
    cv2.imshow("Capturing",frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
capture.release()
cv2.destroyAllWindows()

В итоге выходит ошибка, хотя с более новыми камерами с форматом video1.mjpg все работает прекрасно

Ошибка:

[ERROR:0] global C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-iw3y3ir8\opencv\modules\videoio\src\cap.cpp (142) cv::VideoCapture::open VIDEOIO(CV_IMAGES): raised OpenCV exception:

OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-iw3y3ir8\opencv\modules\videoio\src\cap_images.cpp:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the name of file): http://admin:[email protected]:80/iMode.asp in function 'cv::icvExtractPattern'


Traceback (most recent call last):
  File "F:/status servers bot/video.py", line 16, in <module>
    cv2.imshow("Capturing",frame)
cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-iw3y3ir8\opencv\modules\highgui\src\window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

<VideoCapture 0000018DC4263D10>
[tcp @ 0000018dc44e3240] Connection to tcp://10.100.11.60:80 failed: Error number -138 occurred

Помогите разобраться как подключатся к камерам с форматом .asp


Ответы (1 шт):

Автор решения: Andrii

насколько мне известно, вы не можете брать прямой поток с камеры посредством OpenCV, но можно брать snap с камеры (раз в секунду).

import requests
from requests.auth import HTTPDigestAuth

def get_snap():
    user = 'admin'
    password = 'admin1234'
    link = 'http://<IP>/onvifsnapshot/media_service/snapshot?channel=1&subtype=0'
    # ссылку смотрите для своей камеры
    session = requests.session()
    session.auth = HTTPDigestAuth(user, password)
    photo = session.get(link)
    session.close()
    if photo.ok:
        f = open(file_path, 'wb')
        f.write(photo.content)
        f.close()
    else:
        print('error')
→ Ссылка