Dimensione del font: + -

Come Userful aiuta le organizzazioni a integrare le termocamere | Parte 2

Nella prima parte di questo blog, abbiamo descritto come le termocamere e le altre nuove tecnologie diventeranno una seconda natura nel mondo post-COVID. Per questa parte mostreremo un esempio di installazione.

Abbiamo utilizzato un server di gestione video (VMS) con una piattaforma software che si integra con le telecamere di centinaia di fornitori diversi, comprese le telecamere che supportano l'analisi interna e / o l'imaging termico. Gli utenti possono configurare eventi all'interno della piattaforma VMS o all'interno del motore delle regole di una smart camera. Questi eventi possono essere trigger di distanza oggetto (ovvero rilevamento di oggetti con una distanza inferiore a 1.5 metri tra loro), trigger di conteggio oggetti (rilevamento di un determinato numero di visitatori all'interno di una posizione) o trigger di temperatura (rilevamento di oggetti con temperatura sopra i 38 gradi centigradi).

Ognuno di questi eventi può attivare una chiamata HTTP all'API Userful, consentendo al Server Userful di modificare automaticamente il contenuto su un videowall, un singolo display o un gruppo di display. Quanto è semplice implementarlo? Bastano tre passaggi:

  1. Configurare gli eventi sul motore di analisi integrato della videocamera o sulla piattaforma VMS basata su software.
  2. Configurare un listener HTTP; per monitorare le chiamate HTTP in entrata provenienti da sensori esterni.
  3. Configurare un commutatore di origine; una serie di istruzioni software per l'API Userful su quali contenuti visualizzare sulle diverse schermate in base al trigger esterno. Può trattarsi di avvisi di testo, video di istruzioni, feed di telecamere live, diapositive powerpoint o qualsiasi altro tipo di contenuto che il cliente decide di visualizzare.

Il risultato finale (usando Python) contiene 26 righe di codice nell'applicazione principale: 

if __name__ == '__main__': # Associa il socket alla porta sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_address = ('192.168.1.100', 8081) print ('avvio su% s porta% s '% server_address) sock.bind (server_address) # Ascolta le connessioni in entrata sock.listen (1) mentre True: # Aspetta una connessione proveniente dal sensore esterno print (' in attesa di una connessione ') connessione, client_address = sock.accept () try: print ('connection from', client_address) # Riceve i dati in piccoli blocchi e li legge mentre True: data = connection.recv (512) if data: # estrae i dati provenienti dalla chiamata HTTP della telecamera. camera = extract (data) # accedi a Userful Server per recuperare il cookie di autenticazione session_header = login () # determina cosa è attualmente in riproduzione sui display current_source = is_playing (session_header, 'Shop-Floor') # cambia il contenuto sui display in una prefconfigure source (in # questo esempio un messaggio di avviso HTML switch_source (session_header, 'shop-Floor', 'HTML Warning') # aspetta 5 secondi time.sleep (5) # torna al contenuto che stava riproducendo originariamente 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) interrompi infine: # Pulisci la connessione di connessione .vicino()
 

Quindi eseguiamo questo progetto passo per passo.

Passaggio 1: configurazione degli eventi sulla videocameraera o VMS

In questo esempio utilizziamo il motore di analisi integrato della nostra piattaforma VMS di terze parti che riceve e registra i feed delle telecamere da più telecamere. Gli amministratori possono configurare diversi eventi all'interno del motore delle regole della telecamera ... Questo può essere un trigger di movimento o un trigger di analisi in base al quale il software VMS analizza i feed video in entrata e rileva gli eventi per ciascuna telecamera, ad esempio:

  1. Una persona che entra in un'area specifica della finestra registrata.
  2. Una persona che attraversa una linea virtuale da A -> B (contatore visitatori)
  3. Una persona che attraversa una linea virtuale da B -> A (contatore visitatori)
  4. Una persona con temperatura corporea elevata (> 38 gradi)

Ogni evento ha un invito all'azione; ad esempio una RICHIESTA HTTP al nostro listener web a 192.168.1.100:8081 con contenuti del messaggio come il nome della telecamera e la qualificazione dell'evento. Una regola di evento di esempio è mostrata nella figura sotto.

Passaggio 2: il listener HTTP

Un server Web HTTP è un processo semplice che è in esecuzione sul tuo computer e fa esattamente due cose:

  1. Ascolta le richieste HTTP in entrata su un indirizzo socket TCP specifico (indirizzo IP e un numero di porta)
  2. Gestisce questa richiesta e agisce quando viene ricevuto un messaggio sull'indirizzo del socket.

In questo esempio; il nostro ascoltatore sta ascoltando la porta 8081 sulla sua interfaccia Ethernet esterna sull'indirizzo IP 192.168.1.100. Se vengono rilevate connessioni in entrata, i dati ricevuti nel messaggio HTTP vengono raccolti ed elaborati in un file routine. Questa è la routine che istruisce il server Userful su cosa fare.Inserisci qui il tuo testo ...

# Associa il socket alla porta import socket sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_address = ('192.168.1.100', 8081) print ('avvio su% s porta% s'% server_address) sock .bind (server_address) # Ascolta le connessioni in entrata sock.listen (1) while True: # Aspetta una connessione proveniente da un sensore esterno print ('in attesa di una connessione') connessione, client_address = sock.accept () try: print ('connection from', client_address) # Ricevi i dati in piccoli blocchi e li legge mentre True: data = connection.recv (512) if data: altro: print (sys.stderr, 'no more data from', client_address) interrompi infine: # Pulisci la connessione connection.close ()
 

Prima di cambiare la nostra sorgente sugli schermi, controlliamo quale sorgente sta attualmente riproducendo in una zona (cioè un gruppo di schermate). In questo modo possiamo tornare al contenuto originale una volta che un evento è passato. Il codice seguente rileverà il nome della fonte attualmente in riproduzione (ad esempio il nome del giocatore di segnaletica o altro). Quando chiamiamo questa funzione, passiamo con il nostro cookie di autenticazione e il nome della zona.

def is_playing (session_header, zone): get_url = api_url_base + '/ api / zone / 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') else: 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'] 

Ora che abbiamo determinato il nome della fonte attualmente in riproduzione, possiamo cambiare la fonte per quella zona:

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

E questo è tutto ... Il nel nostro listener HTTP diventa: (1) recupera il cookie AUTH per Userful Server, (2) rileva la sorgente corrente in riproduzione in una zona particolare, (3) cambia il contenuto sui display in un messaggio di "avviso HTML" memorizzato sul locale server (4) Metti in pausa per un po 'di tempo, (5) Torna alla fonte originale.

# accedi a Userful Server per recuperare il cookie di autenticazione session_header = login () # determina cosa è attualmente in riproduzione sui display source = is_playing (session_header, 'Zone-3') # cambia il contenuto dei display in una sorgente prefconfigure (in questo esempio un Messaggio di avviso HTML switch_source (session_header, 'Zone-3', 'HTML Warning') # attendi 5 secondi time.sleep (5) # torna al contenuto originariamente riprodotto switch_source (session_header, 'Zone-3', source ) #delete_source (session_header, 'PIP_Dynamic') time.sleep (5) break 

È possibile espandere questo script osservando effettivamente i dati ricevuti nella chiamata HTTP provenienti dalla telecamera o dalla piattaforma VMS. Questi dati possono contenere informazioni sulla telecamera e / o la fonte di trigger e queste informazioni possono essere utilizzate per visualizzare diversi tipi di contenuto. Pensa ai feed live della videocamera o - se la videocamera conta le persone - mostrando quanti clienti si trovano nel negozio e quanti altri clienti possono entrare nel negozio.

Con la semplicità dell'API REST, i clienti e gli integratori di sistemi possono implementare soluzioni semplici ad alcune funzionalità tecnicamente sbalorditive. Non sono necessarie soluzioni puntuali di diversi fornitori. Solo un po 'di immaginazione unita a capacità di codifica limitate può portarti lontano. Spero che abbiamo suscitato il tuo interesse e non vediamo l'ora di impegnarci in ulteriori scambi di idee ed esempi.


Robert Huijsmans

VP Solutions Engineering

Userful Corporation, INC. 


Guarda il webinar su richiesta per saperne di più sull'utilizzo dell'API di Userful

L'impatto di COVID-19 sulle operazioni aziendali
In che modo Userful aiuta le organizzazioni a integrare ...
Il commento per questo post è stato bloccato dall'amministratore.
 

Commenti

Accettando accederai a un servizio fornito da una terza parte esterna a https://userful.com/