Tamaño de fuente: &más; -

Cómo Userful ayuda a las organizaciones a integrar cámaras térmicas | Parte 2

En la parte 1 de este blog, describimos cómo las cámaras térmicas y otras nuevas tecnologías se convertirán en una segunda naturaleza en el mundo post-COVID. Para esta parte, mostraremos una configuración de ejemplo.

Utilizamos un servidor de administración de video (VMS) con una plataforma de software que se integra con cámaras de cientos de proveedores diferentes, incluidas cámaras que admiten análisis en cámara y / o imágenes térmicas. Los usuarios pueden configurar eventos dentro de la plataforma VMS o dentro del motor de reglas de una cámara inteligente. Estos eventos pueden ser disparadores de distancia de objeto (es decir, detección de objetos con una distancia inferior a 1.5 metros entre ellos), disparadores de conteo de objetos (es decir, detección de un cierto número de visitantes dentro de una ubicación) o disparadores de temperatura (es decir, detección de objetos con temperatura por encima de 38 grados centígrados).

Cualquiera de estos eventos puede desencadenar una llamada HTTP a la API Userful, lo que permite al Servidor Userful cambiar automáticamente el contenido en un muro de video, una pantalla individual o un grupo de pantallas. ¿Qué tan simple es implementar? Solo toma tres pasos:

  1. Configure los eventos en el motor de análisis incorporado de la cámara o en la plataforma VMS basada en software.
  2. Configurar un escucha HTTP; para monitorear las llamadas HTTP entrantes provenientes de sensores externos.
  3. Configurar un conmutador de origen; un conjunto de instrucciones de software para la API Userful sobre qué contenido mostrar en las diferentes pantallas según el activador externo. Esto puede ser advertencias de texto, un video de instrucciones, alimentación de cámara en vivo, una diapositiva de PowerPoint o cualquier otro tipo de contenido que el cliente decida mostrar.

El resultado final (usando Python) contiene 26 líneas de código en la aplicación principal:

if __name__ == '__main__': # Vincula el socket al puerto sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_address = ('192.168.1.100', 8081) print ('iniciando en% s port% s '% server_address) sock.bind (server_address) # Escucha las conexiones entrantes sock.listen (1) mientras True: # Espera una conexión proveniente de una conexión de impresión del sensor externo (' esperando una conexión '), client_address = sock.accept () intente: print ('conexión desde', dirección_cliente) # Reciba los datos en pequeños fragmentos y léalos mientras True: data = connection.recv (512) if data: # extraiga los datos que provienen de la llamada HTTP de la cámara. camera = extract (data) # iniciar sesión en Userful Server para recuperar la cookie de autenticación session_header = login () # determinar qué se está reproduciendo actualmente en las pantallas current_source = is_playing (session_header, 'Shop-Floor') # cambiar el contenido de las pantallas a una configuración previa fuente (en # este ejemplo, un mensaje de advertencia HTML switch_source (session_header, 'shop-Floor', 'HTML Warning') # espera 5 segundos time.sleep (5) # vuelve al contenido que originalmente se estaba reproduciendo switch_source (session_header, 'Shop-Floor', current_source) #delete_source (session_header, 'PIP_Dynamic') time.sleep (5) break else: print (sys.stderr, 'no más datos de', client_address) break finalmente: # Limpie la conexión de conexión .cerca()
 

Así que veamos este proyecto paso a paso.

Paso 1: configuración de eventos en la cámaraera o VMS

En este ejemplo, utilizamos el motor de análisis integrado de nuestra plataforma VMS de terceros que recibe y graba las alimentaciones de la cámara desde varias cámaras. Los administradores pueden configurar diferentes eventos dentro del motor de reglas de la cámara ... Esto puede ser un desencadenante de movimiento o un desencadenador analítico mediante el cual el software VMS analiza las entradas de video entrantes y detecta eventos para cada cámara, por ejemplo:

  1. Una persona que ingresa a un área específica de la ventana grabada.
  2. Una persona que cruza una línea virtual desde A -> B (contador de visitantes)
  3. Una persona que cruza una línea virtual desde B -> A (contador de visitantes)
  4. Una persona con temperatura corporal elevada (> 38 grados)

Cada evento tiene un llamado a la acción; por ejemplo, una SOLICITUD HTTP a nuestro oyente web en 192.168.1.100:8081 con contenido del mensaje como el nombre de la cámara y la calificación del evento. Una regla de evento de ejemplo se muestra en la imagen a continuación.

Paso 2: el oyente HTTP

Un servidor web HTTP es un proceso simple que se ejecuta en su máquina y hace exactamente dos cosas:

  1. Escucha las solicitudes HTTP entrantes en una dirección de socket TCP específica (dirección IP y un número de puerto)
  2. Maneja esta solicitud y actúa cuando se recibe un mensaje en la dirección del socket.

En este ejemplo; nuestro oyente está escuchando el puerto 8081 en su interfaz Ethernet externa en la dirección IP 192.168.1.100. Si se detectan conexiones entrantes, los datos recibidos en el mensaje HTTP se recopilan y procesan bajo una rutina de <llamada a la acción>. Esta es la rutina que le indica al servidor Userful qué hacer.Escriba su texto aquí ...


# Enlace el zócalo al puerto de importación zócalo sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_address = ('192.168.1.100', 8081) print ('start up on% s port% s'% server_address) sock .bind (server_address) # Escuche las conexiones entrantes sock.listen (1) mientras True: # Espere a que una conexión provenga de una conexión de impresión de sensor externo ('esperando una conexión'), client_address = sock.accept () intente: imprimir ('connection from', client_address) # Reciba los datos en pequeños fragmentos y léalos mientras True: data = connection.recv (512) if data: <CALL TO ACTION> else: print (sys.stderr, 'no más datos de ', client_address) se interrumpe finalmente: # Limpia la conexión connection.close ()
 

Antes de cambiar nuestra fuente en las pantallas, verificamos qué fuente se está reproduciendo actualmente en una zona (es decir, un grupo de pantallas). De esa manera, podemos volver al contenido original una vez que haya pasado un evento. El siguiente código detectará el nombre de la fuente que se está reproduciendo actualmente (es decir, el nombre del jugador de señalización u otro). Al llamar a esta función, pasamos nuestra cookie de autenticación y el nombre de la zona.

def is_playing (session_header, zone): get_url = api_url_base + '/ api / zones / byname /' + zone response = request.get (url = get_url, headers = session_header) if response.status_code == 200: data = response.content dict = json.loads (data) sourceID = dict ['playingSourceId'] sourceName = get_source_info (session_header, sourceID) print (sourceName, 'is playing') else: print (response.status_code) return sourceName def get_source_info (session_header, sourceID) : get_url = api_url_base + '/ api / sources /' + sourceID response = request.get (url = get_url, headers = session_header) if response.status_code == 200: data = response.content dict = json.loads (data) else : print (response.status_code) return dict ['sourceName'] 

Ahora que hemos determinado el nombre de la fuente que se está reproduciendo actualmente, podemos cambiar la fuente de esa zona:

def switch_source (session_header, zone_name, source_name): post_url = api_url_base + '/ api / zones / byname /' + zone_name + '/ switch? destinationSourceName =' + source_name response = request.put (url = post_url, headers = session_header) value = Falso si response.status_code == 200: data = response.content value = json.loads (data) ["isPlaying"] print ('Source Switched') else: print (response.status_code) return value 

Y eso es todo…. La <LLAMADA A LA ACCIÓN> en nuestro Escucha HTTP se convierte en: (1) recuperar la cookie AUTH para el Servidor Userful, (2) Detectar la fuente actual que se reproduce en una zona en particular, (3) Cambiar el contenido de las pantallas a una 'Advertencia HTML 'mensaje almacenado en el servidor local (4) Pausa durante algún tiempo, (5) Vuelva a la fuente original.

# iniciar sesión en Userful Server para recuperar la cookie de autenticación session_header = login () # determinar qué se está reproduciendo actualmente en las pantallas source = is_playing (session_header, 'Zone-3') # cambiar el contenido de las pantallas a una fuente prefconfigurada (en este ejemplo, un Mensaje de advertencia HTML switch_source (session_header, 'Zone-3', 'HTML Warning') # espera durante 5 segundos time.sleep (5) # vuelve al contenido que originalmente reproducía switch_source (session_header, 'Zone-3', fuente ) #delete_source (session_header, 'PIP_Dynamic') time.sleep (5) break 

Podemos expandir este script mirando realmente los datos que se recibieron en la llamada HTTP proveniente de la cámara o la plataforma VMS. Estos datos pueden contener información sobre la cámara y / o la fuente de disparo y esta información se puede usar para mostrar diferentes tipos de contenido. Piense en las transmisiones en vivo de la cámara o, si la cámara cuenta personas, que muestra cuántos clientes hay en la tienda y cuántos clientes adicionales pueden ingresar a la tienda.

Con la simplicidad de REST-API, los clientes e integradores de sistemas pueden implementar soluciones simples para algunas características técnicamente impresionantes. No necesita soluciones puntuales de diferentes proveedores. Solo un poco de imaginación combinada con habilidades de codificación limitadas puede llevarte lejos. Espero que hayamos despertado su interés y esperamos participar en nuevos intercambios de ideas y ejemplos.


Robert Huijsmans

Vicepresidente de Ingeniería de Soluciones

Userful Corporation, INC.


Vea el seminario web a pedido para obtener más información sobre el uso de la API de Userful

Impacto de COVID-19 en las operaciones comerciales
Cómo Userful ayuda a las organizaciones a integrar ...
El comentario para esta publicación ha sido bloqueado por el administrador.

Comentarios

Al aceptar, accederá a un servicio proporcionado por un tercero externo a https://userful.com/