I am trying to access a video from an IP camera. I am using OpenCV and Python to do so. The code that I have tried is given below:
import numpy as np
import cv2
from cv2 import cv
camera=cv.CaptureFromFile("http://root:root@192.168.0.90/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
On running this code the output that I am getting is:
Image not converted
On using another method, CaptureFromCAM
instead of CaptureFromFile
the code is:
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)
When I run this code the error I am getting is:
ERROR: SampleCB() - buffer sizes do not match
No conversion to IPL Image
I read about it, and the SampleCB()
error is in the case when the buffer size does not match the expected input size. I tried to change the streaming resolution, but nothing seems to work. I followed this thread and this thread. They are giving the C++ code and on conversion to Python (the code given above) it does not work. Or the thread gives the code for motion detection. I am using Windows 7 and Eclipse with Pydev for development. What do I do?
Oh, please stick with the cv2 API. The old cv one is no more available in current OpenCV versions:
Look this example with python and OpenCV, IPCAM hikvision
See in the window: Get video from IPCAM with python and OpenCV