Schriftgröße: &Plus; -

Wie Userful Unternehmen bei der Integration von Wärmebildkameras unterstützt | Teil 2

In Teil 1 dieses Blogs haben wir beschrieben, wie Wärmebildkameras und andere neue Technologien in der Post-COVID-Welt zur zweiten Natur werden. In diesem Teil zeigen wir ein Beispielsetup.

Wir haben einen Video Management Server (VMS) mit einer Softwareplattform verwendet, die in Kameras von Hunderten verschiedener Anbieter integriert ist - einschließlich Kameras, die In-Camera-Analysen und / oder Wärmebilder unterstützen. Benutzer können Ereignisse innerhalb der VMS-Plattform oder in der Regelengine einer Smart-Kamera konfigurieren. Diese Ereignisse können Objektentfernungsauslöser (dh Erkennung von Objekten mit einem Abstand von weniger als 1.5 Metern zwischen ihnen), Objektzählauslöser (dh Erkennung einer bestimmten Anzahl von Besuchern innerhalb eines Standorts) oder Temperaturauslöser (dh Erkennung von Objekten mit Temperatur) sein über 38 Grad Celsius).

Jedes dieser Ereignisse kann einen HTTP-Aufruf der Userful-API auslösen, sodass der Userful-Server den Inhalt einer Videowand, einer einzelnen Anzeige oder einer Gruppe von Anzeigen automatisch ändern kann. Wie einfach ist die Bereitstellung? Es dauert nur drei Schritte:

  1. Konfigurieren Sie die Ereignisse auf der in die Kamera integrierten Analyse-Engine oder auf der softwarebasierten VMS-Plattform.
  2. Konfigurieren Sie einen HTTP-Listener. um eingehende HTTP-Anrufe von externen Sensoren zu überwachen.
  3. Konfigurieren Sie einen Quell-Switcher. Eine Reihe von Softwareanweisungen für die Userful-API, welche Inhalte auf den verschiedenen Bildschirmen basierend auf dem externen Trigger angezeigt werden sollen. Dies können Textwarnungen, ein Anleitungsvideo, Live-Kamera-Feeds, eine PowerPoint-Folie oder jede andere Art von Inhalten sein, die der Kunde anzeigen möchte.

Das Endergebnis (mit Python) enthält 26 Codezeilen in der Hauptanwendung:

if __name__ == '__main__': # Binden Sie den Socket an den Port sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_address = ('192.168.1.100', 8081) print ('Start auf% s Port% s '% server_address) sock.bind (server_address) # Auf eingehende Verbindungen warten sock.listen (1) während True: # Warten Sie auf eine Verbindung, die von einer externen Sensordruckverbindung (' Warten auf eine Verbindung ') kommt, client_address = sock.accept () try: print ('connection from', client_address) # Empfange die Daten in kleinen Blöcken und lese sie, während True: data = connection.recv (512) if data: # extrahiere die Daten, die vom HTTP-Aufruf der Kamera kommen. camera = Extrahieren (Daten) # Anmelden bei Userful Server zum Abrufen des Authentifizierungscookies session_header = login () # Bestimmen, was gerade auf den Displays abgespielt wird current_source = is_playing (session_header, 'Shop-Floor') # Schalten Sie den Inhalt der Displays auf eine Vorkonfiguration um source (in # diesem Beispiel eine HTML-Warnmeldung switch_source (session_header, 'shop-Floor', 'HTML Warning') # 5 Sekunden warten time.sleep (5) # zurück zu dem Inhalt wechseln, der ursprünglich switch_source (session_header, 'Shop-Floor', current_source) #delete_source (session_header, 'PIP_Dynamic') time.sleep (5) break else: print (sys.stderr, 'keine weiteren Daten von', client_address) break finally: # Bereinigen Sie die Verbindungsverbindung .schließen()
 

Lassen Sie uns dieses Projekt Schritt für Schritt durchgehen.

Schritt 1: Ereignisse auf der Kamera konfigurierenÄra oder VMS

In diesem Beispiel verwenden wir die integrierte Analyse-Engine unserer VMS-Plattform eines Drittanbieters, die die Kamera-Feeds von mehreren Kameras empfängt und aufzeichnet. Administratoren können verschiedene Ereignisse in der Kameraregel-Engine konfigurieren. Dies kann ein Bewegungsauslöser oder ein Analysetrigger sein, bei dem die VMS-Software die eingehenden Video-Feeds analysiert und Ereignisse für jede Kamera erkennt, zum Beispiel:

  1. Eine Person, die einen bestimmten Bereich des aufgezeichneten Fensters betritt.
  2. Eine Person, die eine virtuelle Linie von A -> B überquert (Besucherzähler)
  3. Eine Person, die eine virtuelle Linie von B -> A überquert (Besucherzähler)
  4. Eine Person mit erhöhter Körpertemperatur (> 38 Grad)

Jedes Ereignis hat einen Aufruf zum Handeln; Zum Beispiel eine HTTP-ANFRAGE an unseren Weblistener unter 192.168.1.100:8081 mit Nachrichteninhalten wie dem Kameranamen und der Ereignisqualifikation. Eine beispielhafte Ereignisregel ist in der folgenden Abbildung dargestellt.

Schritt 2: Der HTTP-Listener

Ein HTTP-Webserver ist ein einfacher Prozess, der auf Ihrem Computer ausgeführt wird und genau zwei Dinge ausführt:

  1. Lauscht auf eingehende http-Anfragen an einer bestimmten TCP-Socket-Adresse (IP-Adresse und Portnummer)
  2. Behandelt diese Anforderung und handelt, wenn eine Nachricht an der Socket-Adresse empfangen wird.

In diesem Beispiel; Unser Listener hört Port 8081 auf seiner externen Ethernet-Schnittstelle unter der IP-Adresse 192.168.1.100 ab. Wenn eingehende Verbindungen erkannt werden, werden die in der HTTP-Nachricht empfangenen Daten gesammelt und unter einer <Call to Action> -Routine verarbeitet. Dies ist die Routine, die den Userful-Server anweist, was zu tun ist.Gib deinen Text hier ein ...


# Binden Sie den Socket an den Port-Import-Socket. Sock = socket.socket (Socket.AF_INET, Socket.SOCK_STREAM) .bind (server_address) # Auf eingehende Verbindungen warten sock.listen (192.168.1.100) während True: # Warten Sie auf eine Verbindung, die von einer externen Sensordruckverbindung ('Warten auf eine Verbindung') kommt, client_address = sock.accept () try: print ('Verbindung von', client_address) # Empfangen Sie die Daten in kleinen Blöcken und lesen Sie sie, während True: data = connection.recv (8081), wenn Daten: <CALL TO ACTION> else: print (sys.stderr, 'keine Daten mehr von ', client_address) endlich brechen: # Bereinigen Sie die Verbindung connection.close ()
 

Bevor wir unsere Quelle auf den Bildschirmen einschalten, überprüfen wir, welche Quelle gerade in einer Zone (dh einer Gruppe von Bildschirmen) abgespielt wird. Auf diese Weise können wir nach Ablauf eines Ereignisses zum ursprünglichen Inhalt zurückkehren. Der folgende Code erkennt den Namen der aktuell wiedergegebenen Quelle (dh den Namen des Beschilderungsspielers oder einen anderen). Beim Aufruf dieser Funktion geben wir unseren Authentifizierungscookie und den Zonennamen weiter.

def is_playing (session_header, zone): get_url = api_url_base + '/ api / zonen / byname /' + zone response = request.get (url = get_url, headers = session_header) wenn response.status_code == 200: data = response.content dict = json.loads (data) sourceID = dict ['playSourceId'] sourceName = get_source_info (session_header, sourceID) print (sourceName, 'wird abgespielt') 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) wenn response.status_code == 200: data = response.content dict = json.loads (data) else : print (response.status_code) return dict ['sourceName'] 

Nachdem wir den Namen der aktuell abgespielten Quelle ermittelt haben, können wir die Quelle für diese Zone ändern:

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

Und das ist alles…. Der <CALL TO ACTION> in unserem HTTP-Listener lautet: (1) Abrufen des AUTH-Cookies für den Userful Server, (2) Erkennen der aktuellen Quelle, die in einer bestimmten Zone abgespielt wird, (3) Umschalten des Inhalts auf den Anzeigen auf eine HTML-Warnung 'Nachricht auf dem lokalen Server gespeichert (4) Pause für einige Zeit, (5) Zurück zur ursprünglichen Quelle wechseln.

# Melden Sie sich bei Userful Server an, um das Authentifizierungscookie abzurufen. session_header = login () # Bestimmen, was gerade auf den Displays abgespielt wird source = is_playing (session_header, 'Zone-3') # Wechseln Sie den Inhalt der Displays zu einer vorkonfigurierten Quelle (in diesem Beispiel an HTML-Warnmeldung switch_source (session_header, 'Zone-3', 'HTML Warning') # 5 Sekunden warten time.sleep (5) # zurück zum Inhalt wechseln, der ursprünglich switch_source abgespielt hat (session_header, 'Zone-3', source ) #delete_source (session_header, 'PIP_Dynamic') time.sleep (5) break 

Wir können dieses Skript erweitern, indem wir uns die Daten ansehen, die im HTTP-Aufruf von der Kamera oder der VMS-Plattform empfangen wurden. Diese Daten können Informationen über die Kamera und / oder die Triggerquelle enthalten. Diese Informationen können zur Anzeige verschiedener Arten von Inhalten verwendet werden. Denken Sie an Live-Kamera-Feeds oder - wenn die Kamera Personen zählt - an die Anzeige, wie viele Kunden sich im Shop befinden und wie viele zusätzliche Kunden den Shop betreten können.

Mit der Einfachheit der REST-API können Kunden und Systemintegratoren einfache Lösungen für einige technisch beeindruckende Funktionen bereitstellen. Keine Notwendigkeit für Punktlösungen von verschiedenen Anbietern. Nur ein wenig Fantasie kombiniert mit begrenzten Programmierkenntnissen kann Sie weit bringen. Ich hoffe, wir haben Ihr Interesse geweckt und freuen uns auf den weiteren Austausch von Ideen und Beispielen.


Robert Huijsmans

VP Solutions Engineering

Userful Corporation, INC.


Sehen Sie sich das On-Demand-Webinar an, um mehr über die Verwendung der Userful-API zu erfahren

Auswirkungen von COVID-19 auf den Geschäftsbetrieb
Wie Userful Unternehmen bei der Integration von ...
Der Kommentar zu diesem Beitrag wurde vom Administrator gesperrt.

Kommentare

Wenn Sie akzeptieren, greifen Sie auf einen Dienst zu, der von einem externen Drittanbieter außerhalb von https://userful.com/ bereitgestellt wird.