Die Verwendung von Analysealgorithmen im Datenstrom ist heute eine der dringendsten Aufgaben im Bereich des Aufbaus von Analysesystemen. Viele hochpräzise Vorhersagemodelle, die beispielsweise auf der Grundlage von Messwerten von Sensoren von Industrieanlagen entwickelt wurden, sind bereit, schwere Industrieunfälle zu verhindern. Dazu müssen sie jedoch an Endgeräten („Edge-Geräten“) durchgeführt werden, bei denen Messwerte von Sensoren in Echtzeit erfolgen. Das Produkt SAS Event Stream Processing wird aufgerufen, um dieses Problem zu lösen und Analysen auf "online" zu übertragen. In dieser Veröffentlichung möchte ich die Erfahrungen mit der Konfiguration anhand eines Beispiels für ein angewandtes Problem teilen - der Analyse von Bildern von Videokameras.

Technologie
SAS ist seit vielen Jahren in der SAS-Produktlinie präsent und entwickelt eine eigene Stream-Verarbeitungslösung, SAS Event Stream Processing (im Folgenden: ESP). Die Hauptaufgabe der Entwickler bestand darin, eine hohe Leistung zu erzielen, die um Größenordnungen höher ist als die auf dem Markt vorhandenen Lösungen. Zu diesem Zweck haben sie während der Entwicklung von ESP die Speicherung von Zwischenberechnungen und Indizes auf der Festplatte vollständig aufgegeben. Alle Stream-Konvertierungen werden im RAM durchgeführt, und die ereignisspezifische Nachzählung bleibt erhalten.
Arbeiten Sie mit dem Speicher in SAS ESP. Das Ereignis-Repository im RAM speichert Zwischenergebnisse und wird bei parallelen Zugriffen auf interne oder externe Prozesse aufgrund zusätzlicher Indizes nicht blockiert.Die Engine kann große Datenströme verarbeiten - bei mehreren Millionen Ereignissen pro Sekunde. Gleichzeitig unter Beibehaltung einer geringen Latenz nahm er schnell seinen Platz in Lösungen für Online-Marketing und Betrugsbekämpfung in Banken ein. Dort ist es ein intelligenter Filter für Kundenvorgänge, der nicht standardmäßige Aktivitäten auf Konten sofort erkennt und betrügerische Vorgänge vom Datenstrom isoliert.
Dies ist jedoch immer noch ein sekundäres Merkmal von ESP. Die Engine ist als Mechanismus für die kontinuierliche Verwendung von Analysemodellen (SAS, C, Python und andere) im Datenstrom konzipiert.
Das Prinzip der Streaming-Ereignisverarbeitung.Als anschauliches Beispiel haben wir bei SAS für das
SAS Viya Business Breakfast- Forum beschlossen, einen Demo-Stand einzurichten, der als Grundlage für die Bildanalyse dient. Und so haben wir es eingerichtet und sind dabei auf etwas gestoßen.
Videoanalyse streamen
Wir verfügten über ein Analysemodell, das von Kollegen aus der Abteilung für eingehende Analysen auf der SAS Viya-Plattform erstellt wurde. Sein Kern war, dass ein Algorithmus (in diesem Fall ein trainiertes Faltungs-Neuronales Netzwerk) beim Empfang eines Eingabebildes eines Fahrers im Fahrzeuginnenraum das Verhalten des Fahrers nach den Klassen klassifizierte: „normales Fahren“, „abgelenkt durch ein Gespräch mit einem Passagier“, „weiterreden“ Telefon “,„ schreibt SMS “usw.
Ein Beispiel für das Modell: Das Eingabebild wird basierend auf dem Teil des Bildes, auf dem die Hand mit dem Telefon getroffen hat, als "SMS schreiben" klassifiziert.Es stellte sich die Frage, wie dieser Algorithmus in Echtzeit ausgeführt werden kann, um auf unerwünschtes Verhalten reagieren zu können. Entsprechend dem Szenario fielen Bilder von der Kamera im Online-Modus bereits in Form von Dateien in das Netzwerkverzeichnis auf der Festplatte.
Alles, was blieb, war: Stellen Sie eine Verbindung zu den Daten her, konvertieren Sie die Bilder in das gewünschte Format, wenden Sie das Modell an und gehören Sie höchstwahrscheinlich zu einer Verhaltensklasse. Zeigen Sie Echtzeitwarnungen auf Online-Dashboards an. Und es stellte sich heraus, dass all dies in der SAS ESP-GUI ohne eine einzige Zeile Programmcode (!) Konfiguriert werden kann.
SAS-Ereignisstromverarbeitung
Gefahrenerkennungsprojekt in der grafischen Oberfläche von SAS ESP Studio.Im grafischen ESP-Editor haben wir die folgenden Datenflusstransformationen hinzugefügt:
- Als Eingabe haben wir zwei Knoten vom Typ source: model_source und input_image. In model_source veröffentlichen wir unser Klassifizierungsmodell. Konfigurieren Sie dazu den Datei-Connector, der einen Befehl aus einer Textdatei liest, die drei Parameter enthält: den Namen der Operation, den Typ des Modellformats und den physischen Pfad zur Binärdatei. ESP bleibt hinter jeder Datenquelle zurück, da sie sowohl statisch als auch streamen kann. Daher können wir jederzeit neue Befehle zum Herunterladen von Modellen auf diesen Knoten veröffentlichen, was im industriellen Betrieb praktisch ist. Wir müssen das Projekt nicht stoppen, um die Version der Algorithmen zu aktualisieren.

Einrichten von Veröffentlichungsbefehlen für model_source
Der Inhalt der Eingabemodelldatei:
I,N,1,action,load
I,N,2,type,astore
I,N,3,reference,/opt/sas/demo/image_processing/d.astore
- Die zweite Quelle, input_image, sind Bilder von der Kamera. Zum Veröffentlichen von Daten verwenden wir einen Standardadapter - ein Programm, das Daten aus einer Quelle in ESP veröffentlicht. In diesem Fall haben wir einen Dateiadapter verwendet. Sie können jedoch auch direkt eine Verbindung zur Kamera herstellen, z. B. über den mit der Lösung gelieferten UVC-Adapter.

Konfigurieren eines UVC-Anschlusses für gängige Camcorder-Typen. - Bilder können in einem anderen Format vorliegen als das, in dem das Modell trainiert wurde, und dies kann die Qualität der Klassifizierung beeinträchtigen. Daher fügen wir nach input_image sofort den Knoten resize_image hinzu und schreiben das gewünschte Format in seinen Einstellungen vor. Drücken Sie in diesem Fall auf ein Quadrat von 100/100 Pixel.
Bildverarbeitungs-Setup
- Die Modellausführung wird in CNN_score_code konfiguriert. Die Schnittstelle extrahiert automatisch Ausgabeattribute aus der Meta-Beschreibung des Modells - P__label_c0, P__label_c1, P__label_c2 und P__label_c9 - die Wahrscheinlichkeiten jeder Verhaltensklasse. Als nächstes definieren wir im Knoten max_class ein neues berechnetes Feld, das die Klasse mit maximaler Wahrscheinlichkeit auswählt.
- Durch das Starten des Projekts können wir nun eine Echtzeitklassifizierung für jedes Eingabebild erhalten. In unserer Geschichte wird ein skrupelloser Fahrer regelmäßig von der Straße abgelenkt. Es ist jedoch wichtig, diese Fälle, in denen er für eine Sekunde abgelenkt war, von Fällen von längerem gefährlichem Fahren zu trennen. Dazu fügen wir 3 Knoten hinzu: Speichern von Ereignissen in letzter Minute (copy_1_min), Aggregation nach Verhaltensklassen (aggr_for_alert) und einen Filter mit Fakten zum „gefährlichen Fahren“ (filter_alert).
Konfigurieren der Ereignisspeichereinstellungen - in 1 Minute.

Einrichten der Ereigniszählung für jede Verhaltensklasse.

Festlegen von Filterregeln.
Indizes
Es ist wichtig zu beachten, dass jede Transformation im ESP eine Einstellung hat - "Status". Es charakterisiert, ob die Datentransformation gestreamt wird, d.h. Bei der Verarbeitung eines Eingabeereignisses wird das Ergebnis sofort weiter entlang des Diagramms übertragen und aus dem Speicher dieses Knotens gelöscht. Oder wir können das Ergebnis der Verarbeitung jedes Ereignisses speichern und einen Index darauf erstellen, um jederzeit den Zugriff darauf zu ermöglichen. Beispielsweise speichert das Aggregationsfenster immer den Status und wird basierend auf dem Eingabestream kontinuierlich ereignisberechnet.
Starten
Zurück zum Projekt. Wir müssen es nur laufen lassen

.
Zur einfacheren Anzeige von Datenströmen wird ein Online-Berichtsdesigner, SAS ESP Stream Viewer, mit ESP geliefert. Im Setup-Modus sehen wir alle laufenden Projekte auf den Servern, können eine Verbindung zu ihnen herstellen und eine bequeme Visualisierung auswählen.
Online-Dashboards in SAS ESP Stream ViewerDas ist alles. Wir hatten die Möglichkeit, die Reaktion auf ein Videosignal in Echtzeit zu automatisieren. In diesem Fall richten wir die Online-Überwachung ein. Mit denselben Adaptern / Konnektoren können wir jedoch eine Nachricht für jeden Fall erkannter Verstöße senden oder eine Steueraktion an ein externes System senden.
Oder Python?
Technisch war der Fall abgeschlossen, aber zum Zwecke der Demonstration im Forum schien er nicht interaktiv genug zu sein. Es war unpraktisch und ziemlich unsicher (!) In Echtzeit zu zeigen, daher wurden die Fotos im Voraus aufgenommen und das Auto stand auf dem Parkplatz.
SAS ESP unterstützt die Streaming-Ausführung von in Python erstellten Modellen. Zur Bestätigung richten wir die Analyse von Bildern, nämlich die Suche nach Objekten im Bild, mithilfe von OpenCV-Bibliotheken ein.
ESP-Modell zum Auffinden eines Schutzhelms in einem BildeingabestreamIm ESP-Diagramm haben wir zwei Datenquellen: Bilder von der Online-Kamera des Laptops und ein Foto des gesuchten Objekts. In diesem Fall stellen wir fest, ob der potenzielle Arbeiter auf der Baustelle die Sicherheitsregeln vergessen hat: Befindet sich ein Helm darauf? Im Knoten proc_detection führen wir den folgenden Python-Code aus:
def compute_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
Identifizierung des Vorhandenseins eines Helms im Bild von der Webcam im SAS Viya Business Breakfast- Forum (Kollege, maxxts testet den Stand)Maschinelles Lernen
Wenn wir über die Weiterentwicklung der Stream-Verarbeitung sprechen, wird sich der Schwerpunkt wahrscheinlich auf das Training analytischer Modelle für den Stream verlagern. Das heißt, Im Gegensatz zu früheren Beispielen werden Modelle nicht nur ausgeführt, sondern auch in SAS ESP trainiert. Dies erfordert einen zusätzlichen Datenstrom, mit dem der Zugbetrieb des ausgewählten Algorithmus durch das Ereignis ausgeführt werden kann (z. B. für den Anfang ein einfaches k-Mittel-Clustering). Dann hat das Auto mit dem ESP an Bord die Möglichkeit, die Situation mit neuen Sensoren zu analysieren, die gerade angeschlossen wurden. Auf diese Weise können neue Geräte im Konzept von Industrie 4.0 schnell eingeschaltet und automatisiert werden.
Bitte schreiben Sie in die Kommentare, welche Aufgaben in der Streaming-Analyse zu bewältigen sind, und natürlich beantworte ich gerne Fragen zur
SAS-Ereignisstromverarbeitung .