Stream Analytics: Schnellstart mit SAS ESP

    Die Verwendung analytischer Algorithmen im Datenstrom ist heute eine der dringlichsten Aufgaben im Bereich der Erstellung von Analysesystemen. Viele hochpräzise Vorhersagemodelle, die zum Beispiel aus Messwerten industrieller Sensoren entwickelt wurden, sind bereit, schwere Arbeitsunfälle zu vermeiden. Dazu müssen sie jedoch auf Endgeräten ("Edge-Devices") ausgeführt werden, bei denen die Messwerte der Sensoren in Echtzeit ankommen. Um dieses Problem zu lösen und Analysen in "online" zu übertragen, wird das Produkt SAS Event Stream Processing aufgerufen. In dieser Veröffentlichung wollte ich meine Erfahrungen bei der Einrichtung am Beispiel einer angewandten Aufgabe - der Analyse von Bildern von Videokameras - teilen.



    Technologie


    Die SAS-Produktlinie präsentiert und entwickelt seit vielen Jahren eine eigene Stream-Verarbeitungslösung, SAS Event Stream Processing (im Folgenden als ESP bezeichnet). Vor den Entwicklern bestand die Hauptaufgabe darin, eine hohe Leistung zu erzielen, die um Größenordnungen höher war als die auf dem Markt vorhandenen Lösungen. Zu diesem Zweck haben sie bei der Entwicklung von ESP die Speicherung von Zwischenberechnungen und Indizes auf der Festplatte vollständig aufgegeben. Alle Stream-Konvertierungen werden im RAM ausgeführt, und es wird eine Einzelzählung gespeichert.


    Arbeiten mit Speicher in SAS ESP. Das Event-Repository im RAM speichert Zwischenergebnisse und wird bei parallelen Aufrufen interner oder externer Prozesse aufgrund zusätzlicher Indizes nicht gesperrt.

    Die Engine kann große Datenströme verarbeiten - mehrere Millionen Ereignisse pro Sekunde. Zur gleichen Zeit eine niedrige Latenzzeit, weil er schnell seinen Platz in den Lösungen für Online-Marketing und Betrugsbekämpfung in Banken eingenommen hat. Dort ist es ein intelligenter Filter für Client-Vorgänge, der nicht standardmäßige Kontoaktivitäten erkennt und betrügerische Transaktionen aus dem Datenstrom extrahiert.

    Dennoch ist es eine sekundäre Funktion von ESP. Die Engine ist als Mechanismus zur kontinuierlichen Verwendung von Analysemodellen (SAS, C, Python und anderen) im Datenstrom konzipiert.


    Das Prinzip der Streaming-Ereignisbehandlung.

    Als gutes Beispiel zum Forum SAS Viya Business BreakfastWir bei SAS haben uns entschlossen, einen Demonstrationsstand aufzubauen, der die Aufgabe der Bildanalyse zugrunde liegt. Und so haben wir es eingerichtet und sind uns dabei begegnet.

    Video-Stream-Analyse


    Wir verfügen über ein Analysemodell, das von Kollegen aus der umfassenden Analyseabteilung auf der SAS Viya-Plattform erstellt wurde. Das Wesentliche bestand darin, dass der Algorithmus (in diesem Fall ein trainiertes neuronales Faltungsnetz) das Verhalten des Fahrers im Inneren des Fahrzeugs aufnahm, und zwar in Klassen: „normales Fahren“, „abgelenkt durch ein Gespräch mit dem Passagier“, „reden“ Telefon “,„ schreibt SMS “usw.
    Beispiel für ein Arbeitsbeispiel: Das Eingabebild wird der Klasse„ schreibt SMS “zugeordnet, basierend auf dem Teil des Bildes, in den die Hand mit dem Telefon gefallen ist.

    Es stellte sich die Frage, wie dieser Algorithmus in Echtzeit ausgeführt werden kann, um auf unerwünschtes Verhalten reagieren zu können. Je nach Szenario wurden Kamerabilder im Online-Modus bereits als Dateien in ein Netzwerkverzeichnis auf der Festplatte übertragen.

    Es blieb nur die Verbindung zu den Daten, die Umwandlung der Bilder in das gewünschte Format, die Anwendung des Modells und die Anzeige von Echtzeitwarnungen auf Online-Dashboards entsprechend der Wahrscheinlichkeit der Zugehörigkeit zu einer Verhaltensklasse. Und es stellte sich heraus, dass alles in der GUI SAS ESP ohne eine einzige Zeile Programmcode (!) Konfiguriert werden kann.

    SAS-Ereignisstromverarbeitung


    Das Projekt zur Erkennung gefährlicher Situationen in der SAS ESP Studio-Benutzeroberfläche.
    Im ESP-Grafikeditor haben wir die folgenden Datenstromumwandlungen hinzugefügt:

    1. Als Eingabe haben wir zwei Knoten vom Typ source: model_source und input_image. In model_source veröffentlichen wir unser Modell nach Klassifizierung. Richten Sie dazu einen Dateiconnector ein, der einen Befehl aus einer Textdatei liest, die drei Parameter enthält: den Namen der Operation, das Typformat des Modells und den physischen Pfad zur Binärdatei. ESP lässt jeder Datenquelle die Möglichkeit, sowohl statisch als auch Streaming zu sein. Daher können wir jederzeit neue Befehle zum Laden von Modellen in diesen Knoten veröffentlichen, was im kommerziellen Betrieb praktisch ist. Das Projekt muss nicht angehalten werden, um die Versionen der Algorithmen zu aktualisieren.


      Einrichten der Befehlsveröffentlichung in model_source

      Der Inhalt der Modelleingabedatei:

      I,N,1,action,load
      I,N,2,type,astore
      I,N,3,reference,/opt/sas/demo/image_processing/d.astore
    2. Die zweite Quelle, input_image, sind Bilder von der Kamera. Um Daten zu veröffentlichen, verwenden wir einen regulären Adapter - ein Programm, das Daten aus einer ESP-Quelle veröffentlicht. In diesem Fall haben wir den Dateiadapter verwendet, wir können jedoch eine direkte Verbindung zur Kamera herstellen, z. B. über den im Lieferumfang der Kamera enthaltenen UVC-Adapter.


      Richten Sie einen UVC-Anschluss für gängige Kameratypen ein.
    3. Bilder können in einem anderen Format vorliegen als in dem Modell, in dem das Modell trainiert wurde. Dies kann die Qualität der Klassifizierung beeinflussen. Daher fügen wir nach input_image sofort den resize_image-Knoten hinzu und legen das erforderliche Format in seinen Einstellungen fest. In diesem Fall komprimieren Sie bis zu einem Quadrat von 100/100 Pixeln.

      Bildverarbeitung anpassen
    4. Die Modellausführung kann in CNN_score_code angepasst werden. Das Interface holt automatisch die Ausgabeattribute der Meta-Beschreibung des Modells heraus - P__label_c0, P__label_c1, P__label_c2 und P__label_c9 - die Wahrscheinlichkeiten der einzelnen Verhaltensklassen. Als Nächstes definieren wir im max_class-Knoten ein neues berechnetes Feld, das die Klasse mit der maximalen Wahrscheinlichkeit auswählt.
    5. Nachdem wir das Projekt gestartet haben, können wir für jedes Eingabebild eine Echtzeitklassifizierung erhalten. In unserer Geschichte wird ein skrupelloser Fahrer regelmäßig von der Straße abgelenkt. Es ist jedoch wichtig, diese Fälle zu trennen, wenn er für eine Sekunde von längerem, gefährlichem Fahren abgelenkt wurde. Fügen Sie dazu 3 Knoten hinzu: Ereignisspeicher für die letzte Minute (copy_1_min), Aggregation nach Verhaltensklassen (aggr_for_alert) und die Fakten des "gefährlichen Fahrens" (filter_alert) filtern.

      Konfigurieren der Ereignisspeichereinstellungen - für 1 Minute.

      Passen Sie die Zählung von Ereignissen im Kontext jeder Verhaltensklasse an.

      Filterregeln einstellen.

    Indizes


    Es ist wichtig zu beachten, dass jede Umwandlung in ESP eine Einstellung hat - "State" (State). Es kennzeichnet, ob die Datentransformation Streaming ist, d. H. Bei der Verarbeitung des Eingabeereignisses wird das Ergebnis sofort weiter im Diagramm übertragen und aus dem Speicher dieses Knotens gelöscht. Oder wir können das Ergebnis der Verarbeitung jedes Ereignisses speichern und darauf einen Index aufbauen, um jederzeit darauf zugreifen zu können. Beispielsweise speichert ein Aggregationsfenster immer einen Zustand und wird basierend auf dem Eingabestrom kontinuierlich und zufällig berechnet.

    Starten


    Kommen wir zum Projekt zurück. Wir können es nur laufen lassen .
    Zum bequemen Anzeigen von Datenströmen wird ESP Stream Viewer, ein Online-Berichtdesigner, mit ESP geliefert. Im Setup-Modus sehen wir alle laufenden Projekte auf den Servern, und wir können eine Verbindung zu ihnen herstellen und eine bequeme Visualisierung auswählen.


    Online-Dashboards im SAS ESP Stream Viewer

    Das war's. Wir konnten die Reaktion in Echtzeit auf das Videosignal automatisieren. In diesem Fall richten wir das Online-Monitoring ein. Mit den gleichen Adaptern / Konnektoren können wir jedoch jeweils eine Meldung über erkannte Verstöße senden oder eine Kontrollaktion an ein externes System generieren.

    Oder Python?


    Technisch war der Fall abgeschlossen, aber für die Demonstration im Forum schien er nicht interaktiv genug zu sein. Es war unpraktisch und ziemlich unsicher (!) In Echtzeit zu zeigen, also wurden die Fotos im Voraus aufgenommen und das Auto stand auf dem Parkplatz.

    SAS ESP unterstützt Streaming-Modelle, die in Python erstellt wurden. Zur Bestätigung richten wir die Bildanalyse ein, nämlich die Suche nach Objekten in einem Bild mithilfe der OpenCV-Bibliotheken.

    Modellieren Sie ESP, um nach einem Bauhelm in einem Eingabestrom von Bildern zu suchen
    Im ESP-Diagramm haben wir zwei Datenquellen: Frames von einer Online-Laptop-Kamera und ein Foto des gesuchten Objekts. In diesem Fall ermitteln wir, ob der potenzielle Arbeiter auf der Baustelle die Sicherheitsregeln vergessen hat: Gibt es einen Helm darauf? Auf dem Knoten proc_detection führen wir den folgenden Python-Code aus:

    defcompute_total(Image,image_template):"Output: score_point"import sys
      import cv2
      import numpy as np
      import os
      import base64
      import io
      from imageio import imread
      MIN_MATCH_COUNT = 10# порог минимального количества совпадений ключевых точек
      DIST_COEFF = 0.55
      img_big = imread(io.BytesIO(base64.b64decode(image_template)))
      sift = cv2.xfeatures2d.SIFT_create() # Initiate SIFT detector
      matcher = cv2.BFMatcher() # BFMatcher with default params
      kp_big, des_big = sift.detectAndCompute(img_big,None)
      img_tpl = imread(io.BytesIO(base64.b64decode(Image)))
      kp_tpl, des_tpl = sift.detectAndCompute(img_tpl,None)
      matches = matcher.knnMatch(des_tpl,des_big,k=2)
      good = []
      for m,n in matches:
          if m.distance < n.distance * DIST_COEFF:
              good.append(m)
      score_point = len(good)
      return score_point
    


    Identifizierung des Vorhandenseins eines Helms im Bild von der Webcam, im Forum SAS Viya Business Breakfast (Kollege, maxxts Prüfstand)

    Maschinelles Lernen


    Wenn wir über die Weiterentwicklung der Stream-Verarbeitung sprechen, wird sich der Schwerpunkt wahrscheinlich auf das Training von analytischen Modellen im Stream verlagern. Ie Im Gegensatz zu den vorherigen Beispielen werden die Modelle nicht nur ausgeführt, sondern trainieren auch innerhalb von SAS ESP. Dies erfordert einen zusätzlichen Datenstrom, auf dem die Zugoperation des ausgewählten Algorithmus ausgeführt werden soll (z. B. für den Anfang ein einfaches Clustering unter Verwendung der k-means-Methode). Dann kann die Maschine mit ESP an Bord die Situation auf den neuen Sensoren analysieren, die gerade angeschlossen sind. Dies bietet die Möglichkeit, neue Geräte im Konzept von Industrie 4.0 schnell zu aktivieren und zu automatisieren.

    Bitte schreiben Sie in den Kommentaren, welche Aufgaben mit der Streaming-Analyse zu tun hatten, und natürlich beantworte ich gerne Fragen zu SAS Event Stream Processing .

    Jetzt auch beliebt: