1
votes

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:[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

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?

2
@AnoopK.Prabhu Same SampleCB() error - praxmon
@PrakharMohanSrivastava Please find and post a link to the manual for your camera. You may be using the wrong parameters in your URL? Also, this sounds like one small detail is probably wrong, so here is a chat room for anyone to discuss it so we don't need to use comments for discussion. - KobeJohn
Prakhar told me the camera is M1103 so this should be the manual. - KobeJohn
@PrakharMohanSrivastava I saw your other question about putting your video into tkinter. Does that mean that this part is working now? If so, could you accept berak's answer or post your own answer with the solution? I know getting started with OpenCV can be frustrating so this might help a lot of other people in the future. - KobeJohn

2 Answers

1
votes

Oh, please stick with the cv2 API. The old cv one is no more available in current OpenCV versions:

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
0
votes

Look this example with python and 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()

See in the window: Get video from IPCAM with python and OpenCV