我们现在就是Redis

了解更多

我的另一个堆栈是RedisEdge



回到博客

视频版权:芝麻街

上面的剪辑是一段仪表盘录音,演示了Redis中的实时视频分析。其代码位于https://github.com/RedisGears/EdgeRealtimeVideoAnalytics您可以向下滚动查看更多详细信息。

在过去的几个月里,我们在Redis发布了几条激动人心的消息,包括再装备(一个动态执行框架),再赛(用于深度学习模型执行)和再贴现时间序列(一个时间序列数据库)。这些,在Redis v5和新的Redis Streams数据结构之上,一起分析了我们所称的内容重新切割.专为物联网(IoT)边缘构建的多模型数据库

RedisEdge背后的前提是,它使得在物联网边缘开发、部署和运行复杂的数据处理任务变得简单,尽可能接近实际事物本身。任何可能类型的传感器都可以向数据库报告其数据,数据库不仅可以存储数据,还可以对其进行处理,以便进一步消费和/或运输。我们从一个概念证明开始,以确保我们既有支持这一承诺的冷硬数字,又有一个可视化一切的良好用户界面。

任何概念证明都需要一个用例,我们在一个实时视频流中计算人数。这项技术的可能商业应用可能包括为公共活动提供每使用一次的共享工作区定价或容量管理,以及许多其他功能。以完成检测对象(即人员)的繁重工作在视频帧中,我们使用了一种称为约洛或者“你只看一次”。物体检测系统以其相对良好的性能和准确度而闻名,所以剩下要做的就是“仅仅”将其连接到RedisEdge(更多关于此主题的信息,请参阅“RedisAI:Thor的深入学习部署风暴断路器”).

下图描述了结果:

我们的RedisEdge用例:一步一步

  1. 此设置的驱动程序是视频捕获过程(左上角),它从相机或文件中获取输入视频流,并提取其组成帧。捕获过程将标准redis py客户端连接到RedisEdge服务器,并通过调用“XADD”将每个捕获的帧作为新消息附加到redis流。此消息由帧的编号(用于调试)和帧的原始编码(以JPEG字节表示)组成。
  2. 向输入Redis流添加消息会触发RedisGears脚本的执行。该脚本实现了一个操作管道,在概念上由以下三个主要部分组成:对输入流的帧速率进行下采样、在帧上运行模型以及存储检测和各种度量。
  3. 第一部分,下采样,通过Python中实现的节流机制保持性能。最理想的情况是,我们希望尽可能快地处理所有帧,以便提供准确、及时的结果。然而,即使处理单个帧也需要时间,当输入帧速率高于处理速率时,我们最终会遇到积压工作,最终会爆发。因此,为了避免在辉煌的火焰中爆发,我们牺牲了完整性,并通过丢弃一些输入帧来降低输入帧速率,只留下一部分帧进行处理。测量的处理帧速率动态确定这些“部分”和“一些”样本的大小。
  4. 在脚本的第二部分中,未被下采样过滤器删除的帧将在YOLO模型中运行。在此之前,需要从JPEG格式对帧进行解码、调整大小和规格化。所有这些任务都是通过使用传统的Python代码和数字数组(numpy)、图像(枕头)和计算机视觉(opencv)的标准库实现的。

然后,处理后的帧被转换为RedisAI张量。RedisGears对RedisAI的所有调用都使用直接API来实现最佳性能,而不是通过Redis的键空间进行通信,该张量被直接馈送到TensorFlow YOLO模型。该模型被执行,然后返回一个包含对象检测的回复张量rom帧。然后使用RedisAI PyTorch脚本对模型的回复进行进一步处理,该脚本对检测到的边界框执行相交和非最大值抑制。然后,根据框的标签对框进行过滤,以排除所有非人员检测,并将其坐标转换回帧的原始尺寸。

gear的最后一部分将模型的处理输出存储在另一个Redis流中。输出Redis流中的消息包括对原始输入流中帧ID的引用、检测到的人数以及各自边界框的列表。通过读取输入和输出Redis流,视频服务器可以呈现n由输入帧和在其中检测到的人组成的图像。除了填充输出流外,gear还存储计数的人数以及各种性能指标(例如,不同步骤的帧速率和执行时间)作为RedisTimeSeries数据。这提供了一种简单的方法,可以将管道的输出外部化并集成到任何第三方报告/仪表板/监控应用程序和/或服务中,如本例中的Grafana。

基本上就是这样——数据进入、处理、存储,有时还返回——就像许多其他系统一样。

那么是什么让RedisEdge如此特别呢?

我是个Redis极客。对我来说,Redis是我的堆栈,是我感到宾至如归的地方。更多的个人琐事包括特兰西瓦尼亚血统和对数字的强烈矛盾心理。

当人们问我为什么Redis特别时,我总是说:“因为它既快又有趣。”RedisEdge之所以快,是因为它是Redis,你可以指望它的性能。真理:将所有数据存储在内存中专门构建的数据结构中是提高性能的最佳选择。

当然,硬件在性能方面也起着重要作用。这在执行深度学习模型时更为真实。YOLO虽然现代且性能出众,但仍然需要一个像样的GPU来跟上高清60fps的视频流,而不需要掉帧。另一方面,一个像样的RedisEdge CPU可以处理一个标准的30fps网络摄像头,其下降率不超过5%。因此,只要有合适的硬件和输入,它可以很快实现。非常

这很有趣吗?是啊!如果有任何问题,请向上滚动并查看漂亮的方框和图表。这是最纯粹的满足感,最好的部分是它完全可以重复和修改。因为一切都是通过基本的脚本实现的,所以我可以,例如,只需很少的更改就可以实现它数蝙蝠. 或者更实用的东西,比如汽车。或者我可以用mobilenet替代YOLO,mobilenet是一种识别动物的不同模型,但这已经完成了(见:https://github.com/RedisGears/AnimalRecognitionDemo).

随便电子邮件推特用其他用例想法看着我——我的可用性很高

Baidu