Taille de police: + -

Comment Userful aide les organisations à intégrer des caméras thermiques | Partie 2

Dans la partie 1 de ce blog, nous avons décrit comment les caméras thermiques et autres nouvelles technologies deviendront une seconde nature dans le monde post-COVID. Pour cette partie, nous présenterons un exemple de configuration.

Nous avons utilisé un serveur de gestion vidéo (VMS) avec une plate-forme logicielle qui s'intègre aux caméras de centaines de fournisseurs différents, y compris les caméras prenant en charge l'analyse intégrée à la caméra et / ou l'imagerie thermique. Les utilisateurs peuvent configurer des événements à l'intérieur de la plateforme VMS ou à l'intérieur du moteur de règles d'une caméra intelligente. Ces événements peuvent être des déclencheurs de distance d'objet (c'est-à-dire la détection d'objets à une distance inférieure à 1.5 mètre entre eux), des déclencheurs de comptage d'objets (c'est-à-dire la détection d'un certain nombre de visiteurs à l'intérieur d'un emplacement) ou des déclencheurs de température (c'est-à-dire la détection d'objets avec une température au-dessus de 38 degrés centigrades).

N'importe lequel de ces événements peut déclencher un appel HTTP vers l'API Userful, permettant au serveur Userful de modifier automatiquement le contenu sur un mur vidéo, un affichage individuel ou un groupe d'affichages. Est-ce simple à déployer? Cela ne prend que trois étapes:

  1. Configurez les événements sur le moteur d'analyse intégré à la caméra ou sur la plate-forme logicielle VMS.
  2. Configurer un écouteur HTTP; pour surveiller les appels HTTP entrants provenant de capteurs externes.
  3. Configurer un sélecteur de source; un ensemble d'instructions logicielles pour l'API Userful sur le contenu à afficher sur les différents écrans en fonction du déclencheur externe. Cela peut être des avertissements textuels, une vidéo d'instructions, des flux de caméras en direct, une diapositive PowerPoint ou tout autre type de contenu que le client décide d'afficher.

Le résultat final (en utilisant Python) contient 26 lignes de code dans l'application principale:

if __name__ == '__main__': # Liez le socket au port sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_address = ('192.168.1.100', 8081) print ('démarrage sur le port% s% s '% server_address) sock.bind (server_address) # Écoutez les connexions entrantes sock.listen (1) tandis que True: # Attendez une connexion provenant de l'impression externe du capteur (' en attente d'une connexion ') connexion, client_address = sock.accept () essayez: print ('connection from', client_address) # Recevez les données en petits morceaux et lisez-les tandis que True: data = connection.recv (512) si data: # extraire les données provenant de l'appel HTTP Camera. camera = extraire (données) # connexion à Userful Server pour récupérer le cookie d'authentification session_header = login () # déterminer ce qui est actuellement en cours de lecture sur les écrans current_source = is_playing (session_header, 'Shop-Floor') # basculer le contenu des écrans vers une configuration préalable source (dans # cet exemple un message d'avertissement HTML switch_source (session_header, 'shop-Floor', 'HTML Warning') # attendez 5 secondes time.sleep (5) # revenez au contenu qui jouait à l'origine switch_source (session_header, 'Shop-Floor', current_source) #delete_source (session_header, 'PIP_Dynamic') time.sleep (5) break else: print (sys.stderr, 'no more data from', client_address) break enfin: # Nettoyez la connexion de connexion .Fermer()
 

Passons donc à travers cette étape du projet étape par étape.

Étape 1: configuration des événements sur la cameère ou VMS

Dans cet exemple, nous utilisons le moteur d'analyse intégré de notre plateforme VMS tierce qui reçoit et enregistre les flux de caméras de plusieurs caméras. Les administrateurs peuvent configurer différents événements dans le moteur de règles de caméra… Il peut s'agir d'un déclencheur de mouvement ou d'un déclencheur d'analyse par lequel le logiciel VMS analyse les flux vidéo entrants et détecte les événements pour chaque caméra, par exemple:

  1. Une personne entrant dans une zone spécifique de la fenêtre enregistrée.
  2. Une personne franchissant une ligne virtuelle de A -> B (compteur de visiteurs)
  3. Une personne franchissant une ligne virtuelle de B -> A (compteur de visiteurs)
  4. Une personne avec une température corporelle élevée (> 38 degrés)

Chaque événement a un appel à l'action; par exemple, une DEMANDE HTTP à notre auditeur Web au 192.168.1.100:8081 avec un contenu de message comme le nom de la caméra et la qualification de l'événement. Un exemple de règle d'événement est illustré dans l'image ci-dessous.

Étape 2: l'écouteur HTTP

Un serveur Web HTTP est un processus simple qui s'exécute sur votre machine et fait exactement deux choses:

  1. Écoute les requêtes http entrantes sur une adresse de socket TCP spécifique (adresse IP et numéro de port)
  2. Gère cette demande et agit lorsqu'un message est reçu sur l'adresse de socket.

Dans cet exemple; notre auditeur écoute le port 8081 sur son interface Ethernet externe sur l'adresse IP 192.168.1.100. Si des connexions entrantes sont détectées, les données reçues dans le message HTTP sont collectées et traitées sous une routine <appel à l'action>. Il s'agit de la routine indiquant au serveur Userful quoi faire.Entrez votre texte ici ...


# Liez le socket au port import socket socket sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_address = ('192.168.1.100', 8081) print ('démarrage sur% s port% s'% server_address) sock .bind (server_address) # Écoutez les connexions entrantes sock.listen (1) tandis que True: # Attendez une connexion provenant d'une connexion externe d'impression ('en attente d'une connexion'), client_address = sock.accept () essayez: print ('connection from', client_address) # Recevez les données en petits morceaux et lisez-les tandis que True: data = connection.recv (512) si data: <CALL TO ACTION> else: print (sys.stderr, 'no more data from ', client_address) rompre enfin: # Nettoyer la connexion connection.close ()
 

Avant de basculer notre source sur les écrans, nous vérifions quelle source joue actuellement dans une zone (c'est-à-dire un groupe d'écrans). De cette façon, nous pouvons revenir au contenu d'origine une fois qu'un événement est passé. Le code ci-dessous détectera le nom de la source en cours de lecture (c'est-à-dire le nom du joueur de signalisation, ou autre). Lors de l'appel de cette fonction, nous transmettons notre cookie d'authentification et notre nom de zone.

def is_playing (session_header, zone): get_url = api_url_base + '/ api / zones / byname /' + zone response = requests.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') sinon: print (response.status_code) return sourceName def get_source_info (session_header, sourceID) : get_url = api_url_base + '/ api / sources /' + sourceID response = requests.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'] 

Maintenant que nous avons déterminé le nom de la source en cours de lecture, nous pouvons changer la source de cette zone:

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

Et c'est tout…. Le <APPEL À L'ACTION> dans notre écouteur HTTP devient: (1) récupérer le cookie AUTH pour le serveur utilisateur, (2) Détecter la source actuelle en train de jouer dans une zone particulière, (3) Basculer le contenu sur les écrans vers un 'Avertissement HTML 'message stocké sur le serveur local (4) Pause pendant un certain temps, (5) Revenez à la source d'origine.

# connectez-vous à Userful Server pour récupérer le cookie d'authentification session_header = login () # déterminez ce qui est en cours de lecture sur les écrans source = is_playing (session_header, 'Zone-3') # basculez le contenu des écrans vers une source prefconfigure (dans cet exemple, un Message d'avertissement HTML switch_source (session_header, 'Zone-3', 'HTML Warning') # attendez 5 secondes time.sleep (5) # revenez au contenu qui jouait à l'origine switch_source (session_header, 'Zone-3', source ) #delete_source (session_header, 'PIP_Dynamic') time.sleep (5) break 

Nous pouvons étendre ce script en regardant les données reçues lors de l'appel HTTP provenant de la caméra ou de la plate-forme VMS. Ces données peuvent contenir des informations sur la caméra et / ou la source de déclenchement et ces informations peuvent être utilisées pour afficher différents types de contenu. Pensez aux flux de caméras en direct ou - si la caméra compte des personnes - affichant le nombre de clients dans la boutique et le nombre de clients supplémentaires pouvant entrer dans le magasin.

Avec la simplicité de l'API REST, les clients et les intégrateurs de systèmes peuvent déployer des solutions simples à certaines fonctionnalités techniquement étonnantes. Pas besoin de solutions ponctuelles de différents fournisseurs. Un peu d'imagination combinée à des compétences de codage limitées peut vous mener loin. J'espère que nous avons suscité votre intérêt et sommes impatients de nous engager dans de nouveaux échanges d'idées et d'exemples.


Robert Huijsmans

VP Ingénierie des solutions

Userful Corporation, INC.


Regardez le webinaire à la demande pour en savoir plus sur l'utilisation de l'API Userful

L'impact du COVID-19 sur les opérations commerciales
Comment Userful aide les organisations à intégrer le thermique ...
Le commentaire de ce message a été verrouillé par l'administrateur.

Commentaires

En acceptant, vous accéderez à un service fourni par un tiers externe à https://userful.com/