O uso de algoritmos analíticos no fluxo de dados é agora uma das tarefas mais urgentes no campo da construção de sistemas analíticos. Muitos modelos preditivos de alta precisão, por exemplo, desenvolvidos com base em leituras de sensores de plantas industriais, estão prontos para evitar acidentes industriais sérios, mas para isso eles precisam ser executados em dispositivos finais ("dispositivos de borda"), onde as leituras dos sensores ocorrem em tempo real. O produto SAS Event Stream Processing é chamado para resolver esse problema e transferir a análise para "online". Nesta publicação, gostaria de compartilhar a experiência de sua configuração usando um exemplo de problema aplicado - análise de imagens de câmeras de vídeo.

Tecnologia
A SAS está presente na linha de produtos SAS há muitos anos e está desenvolvendo sua própria solução de processamento de fluxo, SAS Event Stream Processing (doravante ESP). A principal tarefa dos desenvolvedores era obter alto desempenho, ordens de magnitude superiores às soluções existentes no mercado. Para fazer isso, durante o desenvolvimento do ESP, eles abandonaram completamente o armazenamento de cálculos e índices intermediários em disco. Todas as conversões de fluxo são realizadas na RAM e a recontagem específica de evento é preservada.
Trabalhe com memória no SAS ESP. O repositório de eventos na RAM armazena resultados intermediários e não é bloqueado no caso de acessos paralelos de processos internos ou externos devido a índices adicionais.O mecanismo pode lidar com grandes fluxos de dados - em vários milhões de eventos por segundo. Ao mesmo tempo, mantendo baixa latência, por causa do qual ele rapidamente assumiu seu lugar em soluções de marketing on-line e no combate à fraude bancária. Lá, é um filtro inteligente de operações do cliente e detecta instantaneamente atividades não padrão nas contas, isolando operações fraudulentas do fluxo de dados.
Mas ainda assim, esse é um recurso secundário do ESP. O mecanismo foi projetado como um mecanismo para o uso contínuo de modelos analíticos (SAS, C, Python e outros) no fluxo de dados.
O princípio do processamento de eventos de streaming.Como exemplo ilustrativo, no fórum
SAS Viya Business Breakfast , nós da SAS decidimos montar um estande de demonstração, tendo como base a tarefa de análise de imagem. E é assim que configuramos e o que encontramos no processo.
Análise de vídeo em fluxo
Tínhamos à nossa disposição um modelo analítico construído por colegas do departamento de análise aprofundada na plataforma SAS Viya. Sua essência era que, ao receber uma imagem de entrada de um motorista no interior do carro, um algoritmo (neste caso, uma rede neural convolucional treinada) classificava o comportamento do motorista de acordo com as classes: "condução normal", "distraído por uma conversa com um passageiro", "conversando sobre telefone "," escreve SMS "etc.
Um exemplo do modelo: a imagem de entrada é classificada como "escreve SMS", com base na parte da imagem em que a mão com o telefone bate.Surgiu a questão de como executar esse algoritmo em tempo real para poder responder a comportamentos indesejados. De acordo com o cenário, as imagens da câmera no modo online já caíram na forma de arquivos no diretório de rede do disco.
Tudo o que restava era conectar-se aos dados, converter as imagens no formato desejado, aplicar o modelo e, com toda a probabilidade de pertencer a uma classe de comportamento, exibir avisos em tempo real nos painéis online. E aconteceu que tudo isso pode ser configurado na SAS ESP GUI, sem uma única linha de código de programa (!).
Processamento de Fluxo de Eventos SAS
Projeto de detecção de perigos na interface gráfica do SAS ESP Studio.No editor gráfico do ESP, adicionamos as seguintes transformações de fluxo de dados:
- Como entrada, temos dois nós do tipo source: model_source e input_image. Em model_source, publicamos nosso modelo de classificação. Para fazer isso, configure o conector do arquivo, que lê um comando de um arquivo de texto contendo três parâmetros: o nome da operação, o tipo de formato do modelo e o caminho físico para o arquivo binário. O ESP fica atrás de cada fonte de dados a capacidade de ser estático e de fluxo contínuo; portanto, a qualquer momento, podemos publicar novos comandos para baixar modelos nesse nó, o que é conveniente na operação industrial - não precisamos interromper o projeto para atualizar a versão dos algoritmos.

Configurando comandos de publicação para model_source
O conteúdo do arquivo do modelo de entrada:
I,N,1,action,load
I,N,2,type,astore
I,N,3,reference,/opt/sas/demo/image_processing/d.astore
- A segunda fonte, input_image, são imagens da câmera. Para publicar dados, usamos um adaptador padrão - um programa que publica dados de uma fonte no ESP. Nesse caso, usamos um adaptador de arquivo, mas você também pode conectar-se diretamente à câmera, por exemplo, através do adaptador UVC que acompanha a solução.

Configurando um conector UVC para tipos comuns de filmadoras. - As imagens podem ter um formato diferente daquele em que o modelo foi treinado e isso pode afetar a qualidade da classificação. Portanto, após input_image, adicionamos imediatamente o nó resize_image e prescrevemos o formato desejado em suas configurações. Nesse caso, pressione para um quadrado de 100/100 pixels.
Configuração do processamento de imagem
- A execução do modelo está configurada em CNN_score_code. A interface extrairá automaticamente os atributos de saída da meta-descrição do modelo - P__label_c0, P__label_c1, P__label_c2 e P__label_c9 - as probabilidades de cada classe de comportamento. Em seguida, no nó max_class, definiremos um novo campo calculado que selecionará a classe com probabilidade máxima.
- Agora, ao lançar o projeto, poderemos obter classificação em tempo real para cada imagem de entrada. Em nossa história, um motorista inescrupuloso é periodicamente distraído da estrada. Mas é importante separar esses casos quando ele se distraiu por um segundo dos casos de direção perigosa prolongada. Para fazer isso, adicione 3 nós: armazenamento de eventos no último minuto (cópia_1_min), agregação por classes de comportamento (aggr_for_alert) e o filtro de fatos de "direção perigosa" (filter_alert).
Definindo configurações de armazenamento de eventos - em 1 último minuto.

Configurando a contagem de eventos para cada classe de comportamento.

Definindo regras de filtragem.
Índices
É importante observar que cada transformação no ESP tem uma configuração - "Estado". Caracteriza se a transformação de dados está sendo transmitida, ou seja, ao processar um evento de entrada, o resultado é imediatamente transmitido ao longo do diagrama e é excluído da memória deste nó. Ou podemos armazenar o resultado do processamento de cada evento e criar um índice para permitir o acesso a ele a qualquer momento. Por exemplo, a janela de agregação sempre armazena o estado e é continuamente recalculado por evento com base no fluxo de entrada.
Lançamento
De volta ao projeto. Nós apenas temos que executá-lo

.
Para facilitar a visualização de fluxos de dados, um designer de relatório online, SAS ESP Stream Viewer, é fornecido com o ESP. No modo de configuração, vemos todos os projetos em execução nos servidores e podemos nos conectar a eles e escolher uma visualização conveniente.
Painéis online no SAS ESP Stream ViewerIsso é tudo. Tivemos a oportunidade de automatizar a reação em tempo real a um sinal de vídeo. Nesse caso, configuramos o monitoramento on-line, mas, usando os mesmos adaptadores / conectores, podemos enviar uma mensagem para cada caso de violação detectada ou formar uma ação de controle para um sistema externo.
Ou Python?
Tecnicamente, o caso foi concluído, mas, com o objetivo de demonstrar no fórum, parecia não ser interativo o suficiente. Era inconveniente e bastante inseguro (!) Mostrar em tempo real, para que as fotos fossem tiradas com antecedência e o carro estivesse no estacionamento.
O SAS ESP suporta a execução de streaming de modelos feitos em Python. Para confirmação, configuramos a análise de imagens, ou seja, a busca de objetos na imagem, usando bibliotecas OpenCV.
Modelo ESP para encontrar um capacete em um fluxo de entrada de imagemNo diagrama do ESP, temos duas fontes de dados: quadros da câmera on-line do laptop e uma fotografia do objeto que estamos procurando. Nesse caso, determinamos se o trabalhador em potencial no canteiro de obras esqueceu as regras de segurança: existe algum capacete nele? No nó proc_detection, executamos o seguinte código Python:
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
Identificação da presença de um capacete na imagem da webcam no fórum SAS Viya Business Breakfast (colega, maxxts está testando o suporte)Aprendizado de máquina
Se falarmos sobre o desenvolvimento adicional do processamento de fluxo, a ênfase provavelmente mudará para o treinamento de modelos analíticos no fluxo. I.e. Ao contrário dos exemplos anteriores, os modelos não apenas executam, mas também treinam dentro do SAS ESP. Isso exigirá um fluxo de dados adicional no qual executar a operação de trem do algoritmo selecionado pelo evento (por exemplo, para iniciantes, clustering k-means simples). Então o carro com o ESP a bordo terá a oportunidade de analisar a situação usando novos sensores que acabaram de ser conectados. Isso tornará possível ativar e automatizar rapidamente novos dispositivos no conceito da Indústria 4.0.
Escreva nos comentários quais as tarefas enfrentadas na análise de streaming e, é claro, terei o maior prazer em responder perguntas sobre o
SAS Event Stream Processing .