L'utilisation d'algorithmes analytiques sur le flux de données est désormais l'une des tâches les plus urgentes dans le domaine de la construction de systèmes analytiques. De nombreux modèles prédictifs de haute précision, par exemple, développés sur la base de lectures de capteurs d'installations industrielles, sont prêts à prévenir les accidents industriels graves, mais pour cela, ils doivent être effectués sur des appareils finaux («dispositifs de bord»), où les lectures des capteurs arrivent en temps réel. Le produit SAS Event Stream Processing est appelé pour résoudre ce problème et transférer les analyses sur "en ligne". Dans cette publication, je voudrais partager l'expérience de sa configuration en utilisant un exemple de problème appliqué - l'analyse d'images provenant de caméras vidéo.

La technologie
SAS est présent dans la gamme de produits SAS depuis de nombreuses années et développe sa propre solution de traitement de flux, SAS Event Stream Processing (ci-après ESP). La tâche principale des développeurs était d'atteindre des performances élevées, des ordres de grandeur supérieurs aux solutions existantes sur le marché. Pour ce faire, lors du développement d'ESP, ils ont complètement abandonné le stockage des calculs et index intermédiaires sur disque. Toutes les conversions de flux sont effectuées dans la RAM et le recomptage spécifique à l'événement est préservé.
Travailler avec de la mémoire dans SAS ESP. Le référentiel d'événements dans la mémoire RAM stocke les résultats intermédiaires et n'est pas bloqué en cas d'accès parallèle de processus internes ou externes en raison d'index supplémentaires.Le moteur peut gérer de grands flux de données - à plusieurs millions d'événements par seconde. Dans le même temps, tout en conservant une faible latence, il a rapidement pris sa place dans les solutions de marketing en ligne et de lutte contre la fraude bancaire. Là, il s'agit d'un filtre intelligent des opérations clients et détecte instantanément l'activité non standard sur les comptes, isolant les opérations frauduleuses du flux de données.
Mais c'est toujours une caractéristique secondaire de l'ESP. Le moteur est conçu comme un mécanisme pour l'utilisation continue de modèles analytiques (SAS, C, Python et autres) sur le flux de données.
Le principe du streaming des événements.À titre d'illustration, pour le forum
SAS Viya Business Breakfast , nous avons décidé chez SAS de mettre en place un stand de démonstration, en prenant comme base l'analyse d'images. Et c'est ainsi que nous l'avons mis en place et ce que nous avons rencontré au cours du processus.
Analyse vidéo en continu
Nous avions à notre disposition un modèle analytique construit par des collègues du département analytique en profondeur sur la plateforme SAS Viya. Son essence était que, recevant une image d'entrée d'un conducteur à l'intérieur de la voiture, un algorithme (dans ce cas, un réseau neuronal convolutif formé) classait le comportement du conducteur selon les classes: «conduite normale», «distrait par une conversation avec un passager», «parler sur téléphone "," écrit des SMS ", etc.
Un exemple du modèle: l'image d'entrée est classée comme «écrit SMS», basée sur la partie de l'image où la main avec le téléphone a frappé.La question s'est posée de savoir comment exécuter cet algorithme en temps réel afin de pouvoir répondre à des comportements indésirables. Selon le scénario, les images de la caméra en mode en ligne sont déjà tombées sous forme de fichiers dans le répertoire réseau du disque.
Il ne restait plus qu'à se connecter aux données, convertir les images au format souhaité, appliquer le modèle et, selon toute probabilité d'appartenir à une classe de comportement, afficher des avertissements en temps réel sur des tableaux de bord en ligne. Et il s'est avéré que tout cela peut être configuré dans l'interface graphique SAS ESP, sans une seule ligne de code de programme (!).
Traitement des flux d'événements SAS
Projet de détection des dangers dans l'interface graphique SAS ESP Studio.Dans l'éditeur graphique ESP, nous avons ajouté les transformations de flux de données suivantes:
- En entrée, nous avons deux nœuds de type source: model_source et input_image. Dans model_source, nous publions notre modèle de classification. Pour ce faire, configurez le connecteur de fichier, qui lit une commande à partir d'un fichier texte contenant trois paramètres: le nom de l'opération, le type de format de modèle et le chemin d'accès physique au fichier binaire. ESP est en retard sur chaque source de données en ce qui concerne la capacité d'être à la fois statique et en streaming, ainsi, à tout moment, nous pouvons publier de nouvelles commandes pour télécharger des modèles sur ce nœud, ce qui est pratique en exploitation industrielle - nous n'avons pas besoin d'arrêter le projet pour mettre à jour la version des algorithmes.

Configuration des commandes de publication sur model_source
Le contenu du fichier de modèle d'entrée:
I,N,1,action,load
I,N,2,type,astore
I,N,3,reference,/opt/sas/demo/image_processing/d.astore
- La deuxième source, input_image, sont des images de la caméra. Pour publier des données, nous utilisons un adaptateur standard - un programme qui publie des données à partir d'une source dans ESP. Dans ce cas, nous avons utilisé un adaptateur de fichier, mais vous pouvez également vous connecter directement à la caméra, par exemple via l'adaptateur UVC fourni avec la solution.

Configuration d'un connecteur UVC pour les types courants de caméscopes. - Les images peuvent être présentées dans un format différent de celui dans lequel le modèle a été formé, ce qui peut affecter la qualité de la classification. Par conséquent, après input_image, nous ajoutons immédiatement le nœud resize_image et prescrivons le format souhaité dans ses paramètres. Dans ce cas, appuyez sur un carré de 100/100 pixels.
Configuration du traitement d'image
- L'exécution du modèle est configurée dans CNN_score_code. L'interface extraira automatiquement les attributs de sortie de la méta-description du modèle - P__label_c0, P__label_c1, P__label_c2 et P__label_c9 - les probabilités de chaque classe de comportement. Ensuite, dans le nœud max_class, nous définirons un nouveau champ calculé qui sélectionnera la classe avec la probabilité maximale.
- Maintenant, en lançant le projet, nous pourrons obtenir une classification en temps réel pour chaque image d'entrée. Dans notre histoire, un conducteur sans scrupules est périodiquement distrait de la route. Mais il est important de séparer ces cas où il a été distrait pendant une seconde des cas de conduite dangereuse prolongée. Pour ce faire, nous ajoutons 3 nœuds: le stockage des événements de dernière minute (copy_1_min), l'agrégation par classes de comportement (aggr_for_alert) et un filtre de faits de «conduite dangereuse» (filter_alert).
Configuration des paramètres de stockage des événements - en 1 dernière minute.

Configuration du comptage d'événements pour chaque classe de comportement.

Définition de règles de filtrage.
Indices
Il est important de noter que chaque transformation dans l'ESP a un paramètre - «État». Il caractérise si la transformation des données est en streaming, c'est-à-dire lors du traitement d'un événement d'entrée, le résultat est immédiatement transmis plus loin le long du diagramme et est supprimé de la mémoire de ce nœud. Ou nous pouvons stocker le résultat du traitement de chaque événement et construire un index sur celui-ci pour permettre d'y accéder à tout moment. Par exemple, la fenêtre d'agrégation stocke toujours l'état et est continuellement recalculée par les événements en fonction du flux d'entrée.
Lancement
Retour au projet. Nous devons juste l'exécuter

.
Pour faciliter la visualisation des flux de données, un concepteur de rapports en ligne, SAS ESP Stream Viewer, est fourni avec ESP. En mode de configuration, nous voyons tous les projets en cours d'exécution sur les serveurs, et nous pouvons nous y connecter et choisir une visualisation pratique.
Tableaux de bord en ligne dans SAS ESP Stream ViewerC’est tout. Nous avons eu l'opportunité d'automatiser la réaction en temps réel à un signal vidéo. Dans ce cas, nous mettons en place une surveillance en ligne, mais en utilisant les mêmes adaptateurs / connecteurs, nous pouvons envoyer un message pour chaque cas de violation détectée, ou former une action de contrôle vers un système externe.
Ou Python?
Techniquement, l'affaire était terminée, mais dans le but de faire une démonstration sur le forum, elle ne semblait pas assez interactive. C'était gênant et assez dangereux (!) De montrer en temps réel, donc les photos ont été prises à l'avance et la voiture était dans le parking.
SAS ESP prend en charge l'exécution en continu de modèles fabriqués en Python. Pour confirmation, nous avons mis en place l'analyse d'images, à savoir la recherche d'objets dans l'image, à l'aide des bibliothèques OpenCV.
Modèle ESP pour trouver un casque sur un flux d'entrée d'imageDans le diagramme ESP, nous avons 2 sources de données: des images de la caméra en ligne de l'ordinateur portable et une photo de l'objet que nous recherchons. Dans ce cas, nous déterminons si le travailleur potentiel sur le chantier a oublié les règles de sécurité: y a-t-il un casque dessus. Dans le nœud proc_detection, nous exécutons le code Python suivant:
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
Identification de la présence d'un casque dans l'image de la webcam sur le forum SAS Viya Business Breakfast (collègue, maxxts teste le stand)Apprentissage automatique
Si nous parlons de la poursuite du développement du traitement des flux, l'accent sera probablement mis sur la formation de modèles analytiques sur le flux. C'est-à-dire contrairement aux exemples précédents, les modèles s'exécuteront non seulement, mais s'entraîneront également dans SAS ESP. Cela nécessitera un flux de données supplémentaire sur lequel effectuer l'opération de train de l'algorithme sélectionné par l'événement (par exemple, pour les démarreurs, le clustering k-means simple). Ensuite, la voiture avec l'ESP à bord aura l'occasion d'analyser la situation à l'aide de nouveaux capteurs qui viennent d'être connectés. Cela permettra d'allumer et d'automatiser rapidement de nouveaux appareils dans le concept d'Industrie 4.0.
Veuillez écrire dans les commentaires les tâches rencontrées dans le streaming analytique, et bien sûr, je serai heureux de répondre aux questions sur
SAS Event Stream Processing .