Una aplicación para acceder automáticamente a las cámaras IP y tomar capturas de pantalla en un intervalo determinado

Tengo algunas cámaras IP, principalmente Foscams. Algunos de ellos tienen una ranura SD, otros no, y ahí es donde comienza el problema, ya que los que tienen ranura SD pueden hacer eso, pero los demás no a menos que defina una carpeta FTP, que no tengo.

Necesito una aplicación para tomar una captura de pantalla de todas las cámaras definidas automáticamente en segundo plano cada n intervalo y guardarlas localmente. Mi PC estará funcionando las 24 horas.

No me importa si es una aplicación win32 o una aplicación UWP de Windows 10.

Respuestas (1)

OpenCV puede hacer esto por usted con un poco de ayuda de python y numpy a partir de esta esencia, puede crear una clase ipCamera:

import base64
import time
import urllib2

import cv2
import numpy as np


"""
Examples of objects for image frame aquisition from both IP and
physically connected cameras
Requires:
 - opencv (cv2 bindings)
 - numpy
"""

class ipCamera(object):

    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)

    def get_frame(self):
        response = urllib2.urlopen(self.req)
        img_array = np.asarray(bytearray(response.read()), dtype=np.uint8)
        frame = cv2.imdecode(img_array, 1)
        return frame

# Section for physically connected cameras removed

Personalmente, probaría lo anterior con cada una de sus cámaras tal como están para ver si necesita hacerle algún ajuste. Luego, todo lo que necesita hacer es completar una lista de instancias con su lista de cámaras y sus credenciales de nombre de usuario y contraseña, y tomar y guardar un cuadro de cada una en el intervalo que elija en una estructura de directorio adecuada. Personalmente, extendería lo anterior para dar a cada instancia un nombre, una ubicación para guardar, etc., y agregaría un método para tomar y guardar un marco en un formato apropiado.

  • Gratis gratis y de código abierto - ¡Bien!
  • Multiplataforma: se puede ejecutar en Windows 7-10, OS/X, Linux, incluso podría considerar usar una RaspberryPi con un dispositivo de almacenamiento conectado. ¡Bien!
  • Necesito aprender un poco de python, pero Python es mucho más fácil de aprender que C/C++/C# y tiene "baterías incluidas" .
  • No hay GUI a menos que agregue uno usted mismo, hay varias buenas herramientas de GUI para python . ¡Quizás no tan buenas!
  • Extensible: puede agregar código para alertarlo si hay más de un cambio porcentual específico desde el último cuadro, incluso hay ejemplos en la web de cómo usar las mismas herramientas para detectar personas como objetos en imágenes, etc. - Podría ser ¡Muy bueno!

Descargo de responsabilidad: el código original anterior fue publicado por Tristan Hearn en un github gist el 12 de mayo de 2013. No puedo atribuirme el mérito de haberlo escrito yo mismo.

¡bonito! pero el código carece de lógica para tomar capturas de pantalla en un intervalo determinado. El código básicamente toma capturas de pantalla. Creo que puedo resolver esto en python o simplemente usar la misma biblioteca a través de c #, que conozco mejor.
@HeidelBerGensis: estaba tratando de apuntar en una buena dirección en lugar de escribir la aplicación para usted, cobro por eso , si está más contento con C # emgu.com/wiki/index.php/Main_Page puede ser de ayuda (el python los enlaces se envían con OpenCV.
gracias amigo. De hecho, me gusta esta solución, no me quejaba :) Me encantan los desafíos.
¡Buenas vacaciones!
Brillante. Nunca pensé en usar OpenCV para esto. Pero, ¿es realmente posible para cualquier cámara IP sin importar la marca? Tengo un D-Link y uno chino barato que requieren que use sus aplicaciones especiales para verlos. OP: ¿ Alguna vez descubriste la lógica de las capturas de pantalla en intervalos determinados?
@Hack-R La mayoría de las cámaras IP usan uno de los estándares (la variante más común es usar uno de los formatos de transmisión que normalmente se envuelve dentro de los contenedores MPEG), y con un poco de trabajo normalmente puede hacer que OpenCV funcione con a ellos.