OpenCV can do this for you with a little help from python & numpy from this gist you can create an ipCamera class:
import numpy as np
Examples of objects for image frame aquisition from both IP and
physically connected cameras
- opencv (cv2 bindings)
def __init__(self, url, user=None, password=None):
self.url = url
auth_encoded = base64.encodestring('%s:%s' % (user, password))[:-1]
self.req = urllib2.Request(self.url)
self.req.add_header('Authorization', 'Basic %s' % auth_encoded)
response = urllib2.urlopen(self.req)
img_array = np.asarray(bytearray(response.read()), dtype=np.uint8)
frame = cv2.imdecode(img_array, 1)
# Section for physically connected cameras removed
Personally I would test the above with each of your cameras as they are to see if you need to make any tweaks to it.
Then all you need to do is populate a list of instances with your list of cameras, and their username & password credentials, and grab & save a frame from each at whatever interval you choose into a suitable directory structure. Personally I would extend the above to give each instance a name, a save location, etc., and add a method to grab and save a frame in an appropriate format.
- Free gratis & Open Source - Good!
- Cross Platform - Can run on Windows 7-10, OS/X, Linux, you could even consider using a RaspberryPi with a storage device attached - Good!
- Need to learn a bit of python but Python is a lot easier to learn than C/C++/C# and is "batteries included" - you don't need to go out and get, or pay for, any other tools - Good?
- No GUI unless you add one yourself there are several good GUI tools for python - Maybe not so good!
- Extensible - you could add code to alert you if there is more than a specified percentage change from the last frame, there are even examples on the web of how to use the same tools to detect person like objects in images, etc. - Could Be Very Good!
Disclaimer: The original code above was posted by Tristan Hearn to a github gist on on 12 May 2013 I cannot take credit for writing it myself.