流分析:SAS ESP快速入门

在数据流上使用分析算法现在是构建分析系统领域中最紧迫的任务之一。 例如,许多高精度的预测模型都是基于工厂传感器的读数而开发的,它们可以防止严重的工业事故,但是为此,它们必须在终端设备(“边缘设备”)上执行,这些传感器会实时获取读数。 调用SAS事件流处理产品来解决此问题并将分析转移到“在线”。 在本出版物中,我想通过一个应用问题的例子(摄像机图像的分析)来分享其配置的经验。



技术领域


SAS已经存在于SAS产品线中多年,并且正在开发自己的流处理解决方案SAS事件流处理(以下称为ESP)。 开发人员的主要任务是获得高性能,比市场上现有的解决方案高几个数量级。 为此,在ESP的开发过程中,他们完全放弃了中间计算和索引在磁盘上的存储。 所有流转换都在RAM中执行,并且保留特定于事件的重新计数。


使用SAS ESP中的内存。 RAM中的事件存储库存储中间结果,并且由于其他索引而在并行访问内部或外部进程时不会阻塞事件存储库。

该引擎可以处理大量数据流-每秒处理几百万个事件。 同时,在保持低延迟的同时,他很快在在线营销和打击银行欺诈的解决方案中占据了一席之地。 在那里,它是客户操作的智能过滤器,可以立即检测到帐户上的非标准活动,从而将欺诈性操作与数据流隔离开。

但这仍然是ESP的次要功能。 该引擎被设计为一种在数据流上连续使用分析模型(SAS,C,Python等)的机制。


流事件处理的原理。

举一个说明性的例子,在SAS Viya商务早餐论坛上,我们SAS决定建立一个演示台,以图像分析为基础。 这就是我们进行设置的过程以及在过程中遇到的问题。

流视频分析


我们可以使用由SAS Viya平台上深入分析部门的同事构建的分析模型。 其本质是,在接收到汽车内部驾驶员的输入图像后,一种算法(在这种情况下为经过训练的卷积神经网络)根据以下类别对驾驶员的行为进行分类:“正常驾驶”,“与乘客交谈分散注意力”,“交谈”手机”,“写短信”等。
该模型的一个示例:根据图像中用手机敲打手的部分,将输入图像分类为“写SMS”。

出现了一个问题,即如何实时运行该算法以便能够对不需要的行为做出响应。 根据方案,来自联机模式下的摄像机的图像已经以文件的形式落入磁盘上的网络目录。

剩下的一切就是:连接到数据,将图像转换为所需的格式,应用模型,并且很可能属于一类行为,在在线仪表板上显示实时警报。 事实证明,所有这些都可以在SAS ESP GUI中进行配置,而无需一行程序代码(!)。

SAS事件流处理


SAS ESP Studio图形界面中的危害检测项目。
在ESP图形编辑器中,我们添加了以下数据流转换:

  1. 作为输入,我们有两个类型为source的节点:model_source和input_image。 在model_source中,我们发布分类模型。 为此,请配置文件连接器,该文件连接器从包含三个参数的文本文件中读取命令:操作名称,模型格式的类型以及二进制文件的物理路径。 ESP落后于每个数据源的静态和流式传输能力,因此,我们可以随时发布新命令以将模型下载到该节点,这在工业操作中很方便-我们无需停止项目来更新算法的版本。


    设置发布到model_source的命令

    输入模型文件的内容:

    I,N,1,action,load
    I,N,2,type,astore
    I,N,3,reference,/opt/sas/demo/image_processing/d.astore
  2. 第二个来源input_image是来自相机的图片。 要发布数据,我们使用标准适配器-一种程序,该程序从ESP中的源发布数据。 在这种情况下,我们使用了文件适配器,但是您也可以直接连接到相机,例如,通过解决方案随附的UVC适配器。


    为普通类型的摄像机配置UVC连接器。
  3. 图像的格式可能不同于训练模型的格式,这可能会影响分类的质量。 因此,在input_image之后,我们立即添加resize_image节点并在其设置中指定所需的格式。 在这种情况下,请压缩为100/100像素的正方形。

    图像处理设置
  4. 模型执行在CNN_score_code中配置。 该界面将自动从模型的元描述中提取输出属性-P__label_c0,P__label_c1,P__label_c2和P__label_c9-每个行为类别的概率。 接下来,在max_class节点中,我们将定义一个新的计算字段,该字段将以最大概率选择类别。
  5. 现在,通过启动该项目,我们将能够对每个输入图像进行实时分类。 在我们的历史上,不道德的驾驶员会定期从道路上分散注意力。 但重要的是,要把那些他分散注意力的情况与长时间危险驾驶的情况分开。 为此,我们添加了3个节点:存储最后一分钟的事件(copy_1_min),按行为类进行汇总(aggr_for_alert)和“危险驾驶”事实过滤器(filter_alert)。

    配置事件存储设置-最后一分钟。

    为每个行为类设置事件计数。

    设置过滤规则。

指标


重要的是要注意,ESP中的每个转换都有一个设置-“状态”。 它表征了数据转换是否正在流式传输,即 当处理输入事件时,结果将立即沿图进一步传输,并从该节点的内存中删除。 或者,我们可以存储处理每个事件的结果并在其上建立索引以允许随时访问它。 例如,聚合窗口始终存储状态,并根据输入流连续进行事件重新计算。

发射


回到项目。 我们只需要运行它
为了便于查看数据流,ESP附带了一个在线报表设计器SAS ESP Stream Viewer。 在设置模式下,我们看到服务器上所有正在运行的项目,我们可以连接到它们并选择方便的可视化效果。


SAS ESP Stream Viewer中的在线仪表板

仅此而已。 我们有机会实时自动响应视频信号。 在这种情况下,我们设置了在线监视,但是使用相同的适配器/连接器,我们可以针对每种检测到的违规情况发送消息,或者对外部系统形成控制措施。

还是Python?


从技术上讲,此案已经完成,但出于在论坛上进行演示的目的,它似乎不够互动。 由于不方便,而且非常不安全(!),无法实时显示,因此照片是事先拍摄的,汽车在停车场。

SAS ESP支持以Python制作的模型的流执行。 为了进行确认,我们使用OpenCV库设置了图像分析,即在图像中搜索对象。

ESP模型,用于在图像输入流上查找安全帽
在ESP图表中,我们有2个数据源:笔记本电脑的在线相机的帧和我们要寻找的物体的照片。 在这种情况下,我们将确定施工现场的潜在工人是否已经忘记了安全规则:上面是否戴着头盔。 在proc_detection节点中,我们执行以下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 #       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 


SAS Viya商务早餐论坛的摄像头中识别出头盔中存在头盔(同事, maxxts正在测试展台)

机器学习


如果我们谈论流处理的进一步发展,那么重点可能会转向流分析模型的训练。 即 与前面的示例不同,模型不仅可以执行,而且可以在SAS ESP中训练。 这将需要一个额外的数据流,通过该数据流可以根据事件在该算法上执行所选算法的训练操作(例如,对于初学者而言,简单的k均值聚类)。 然后,装有ESP的汽车将有机会使用刚刚连接的新传感器来分析情况。 按照工业4.0的概念,这将使快速开启和自动化新设备成为可能。

请在评论中写下流分析面临的任务,当然,我很乐意回答有关SAS事件流处理的问题

Source: https://habr.com/ru/post/zh-CN429176/


All Articles