Подключение к 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')