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:

se __name__ == '__main__': # Associa il socket al port sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_address = ('192.168.1.100', 8081) print ('avvio su% s port% s '% server_address) sock.bind (server_address) # Ascolta le connessioni in entrata sock.listen (1) mentre True: # Attendi una connessione proveniente dalla connessione di stampa del sensore esterno (' in attesa di una connessione '), client_address = sock.accept () try: print ('connection from', client_address) # Ricevi i dati in piccoli blocchi e leggili mentre True: data = connection.recv (512) se data: # estrae i dati provenienti dalla chiamata HTTP della fotocamera. 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 dei display in una prefconfigure source (in # questo esempio un messaggio di avviso HTML switch_source (session_header, 'shop-Floor', 'HTML Warning') # wait per 5 secondi time.sleep (5) # torna al contenuto che stava originariamente giocando 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 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 secondo una routine <invito all'azione>. Questa è la routine che indica al server Userful cosa fare.Inserisci qui il tuo testo ...


# Associa il socket al port import socket sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_address = ('192.168.1.100', 8081) print ('avvio su% s port% s'% server_address) calzino .bind (server_address) # Ascolta le connessioni in entrata sock.listen (1) mentre True: # Attendi una connessione proveniente da una connessione di stampa del sensore esterno ('in attesa di una connessione'), client_address = sock.accept () prova: stampa ('connection from', indirizzo_conservatore) # Ricevi i dati in piccoli blocchi e leggili mentre True: data = connection.recv (512) se data: <CALL TO ACTION> else: print (sys.stderr, 'no more data from ', client_address) infine: # Pulisce 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 / areas / byname /' + zone response = request.get (url = get_url, headers = session_header) se 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) se response.status_code == 200: data = response.content dict = json.loads (data) altro : 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 / areas / byname /' + zone_name + '/ switch? destinationSourceName =' + source_name response = request.put (url = post_url, headers = session_header) valore = Falso se response.status_code == 200: data = response.content value = json.loads (data) ["isPlaying"] print ('Source Switched') else: print (response.status_code) valore di ritorno 

E questo è tutto ... La <CHIAMATA ALL'AZIONE> nel nostro Listener HTTP diventa: (1) recupera il cookie AUTH per il Server Userful, (2) Rileva la sorgente corrente riprodotta in una particolare zona, (3) Passa il contenuto dei display a un 'Avviso HTML 'messaggio memorizzato sul server locale (4) Pausa per qualche tempo, (5) Tornare alla fonte originale.

# accedi a Userful Server per recuperare il cookie di autenticazione session_header = login () # determina ciò che è attualmente in riproduzione sui display source = is_playing (session_header, 'Zone-3') # passa i contenuti sui display a una sorgente di preconfigurazione (in questo esempio un Messaggio di avviso HTML switch_source (session_header, 'Zone-3', 'HTML Warning') # wait per 5 secondi time.sleep (5) # torna al contenuto che stava originariamente giocando switch_source (session_header, 'Zone-3', sorgente ) #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/