Я пытаюсь получить доступ к видео с IP-камеры. Я использую OpenCV и Python для этого. Код, который я попробовал, приведен ниже:
import numpy as np
import cv2
from cv2 import cv
camera=cv.CaptureFromFile("http://root:[email protected]/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=30&.mjpg")
if camera is None:
print 'Camera is null'
else:
print 'Camera is not null'
cv.NamedWindow("win")
while True:
image=cv.QueryFrame(camera)
cv.ShowImage("win", image)
k=int(cv.WaitKey(10))
if k is 27:
break
При запуске этого кода вывод, который я получаю:
Image not converted
Используя другой метод, CaptureFromCAM
вместо CaptureFromFile
код:
import numpy as np
import cv2
from cv2 import cv
camera=cv.CaptureFromCAM(0)
if camera is None:
print 'Camera is null'
else:
print 'Camera is not null'
cv.NamedWindow("win")
while True:
image=cv.QueryFrame(camera)
if image is None:
print 'No conversion to IPL Image'
break
else:
cv.ShowImage("win", image)
Когда я запускаю этот код, я получаю сообщение об ошибке:
ERROR: SampleCB() - buffer sizes do not match
No conversion to IPL Image
Я читал об этом, и SampleCB()
Ошибка в том случае, если размер буфера не соответствует ожидаемому размеру ввода. Я пытался изменить разрешение потоковой передачи, но, похоже, ничего не работает. Я последовал за этот нить и этот нить. Они дают код C ++ и при преобразовании в Python (код, приведенный выше) это не работает. Или поток дает код для обнаружения движения. я использую Windows 7 и Затмение с Пыдев для развития. Что я делаю?
О, пожалуйста, придерживайтесь cv2 API. Старый cv больше не доступен в текущих версиях OpenCV:
import numpy as np
import cv2
cv2.namedWindow("win")
camera = cv2.VideoCapture("http://username:[email protected]/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=30&.mjpg")
while camera.isOpened():
ok, image = camera.read()
if not ok:
print 'no image read'
break
cv2.imshow("win", image)
k = cv2.waitKey(1) & 0xff
if k == 27 : break # Esc pressed
Посмотрите этот пример с Python и OpenCV, IPCAM hikvision
import numpy as np
import cv2
cap = cv2.VideoCapture()
cap.open("rtsp://USER:PASS@IP:PORT/Streaming/Channels/2")
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
#gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('Salida',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
Смотрите в окне:
Получить видео из IPCAM с помощью Python и OpenCV