使用Redis进行实时视频分析

使用Redis Streams,RedisGears,RedisAI和RedisTimeSeries进行实时视频分析(即计算人员)的示例 https://oss.redislabs.com/redisgears

github:https://github.com/RedisGears/EdgeRealtimeVideoAnalytics

RedisEdge实时视频分析

使用Redis Streams,RedisGears,RedisAI和RedisTimeSeries进行实时视频分析(即计算人员)的示例。

给定此输入视频,最终输出如下所示:

演示

概观

该项目演示了RedisEdge堆栈的可能部署,该堆栈提供视频流的实时分析。

下图描绘了系统各部分之间的流程。

系统图

该过程是一系列操作,如下所示:

  1. 视频流制作者将捕获的帧添加到Redis流。
  2. 新帧触发RedisGear的执行:
    1. 如果需要,下采样输入流的帧速率。
    2. 准备输入框架以满足模型的要求。
    3. 调用RedisAI在帧上执行对象识别模型。
    4. 在Redis Stream和TimeSeries中存储模型的输出(即计算人数及其在框架内的位置)。
  3. 视频Web服务器根据Redis’Streams的实时数据呈现最终图像。
  4. 时间序列从Redis导出到Prometheus,可以使用Grafana的仪表板进行可视化。

有关罗嗦概述,请参阅“我的其他堆栈是RedisEdge”。观看“RedisConf19 Keynote Day 2”进行视频演示。

RedisEdge堆栈

RedisEdge堆栈包含最新的Redis稳定版本和用于Edge计算的精选RedisLabs模块。有关更多信息,请参阅RedisEdge

YOLO

你只看一次,或YOLO短裤(好概述),是一个物体检测神经网络。该项目使用“微型”YOLOv3模型。

怎么弄它

先决条件:

1
2
3
$ git clone https://github.com/RedisGears/EdgeRealtimeVideoAnalytics.git
$ cd EdgeRealtimeVideoAnalytics
$ git lfs install ; git lfs fetch ; git lfs checkout

如何在本地运行它

安装RedisEdge堆栈

请参阅以下项目的构建/安装说明,以使用相关的Redis模块设置Redis服务器。此应用程序的连接默认为redis://localhost:6379

请注意,您还需要requirements.txt为嵌入式RedisGears Python解释器安装Pythonic 。这是如何做:

  1. 验证您的主机是否具有适用于Python2.7的OpenCV - 如果没有,请安装它(apt-get install python-opencv
  2. 从主机的命令行运行Python 2解释器 python2
  3. 键入import cv2- 如果成功,则安装OpenCV
  4. 类型cv2.__file__- 您应该得到类似’/usr/lib/python2.7/dist-packages/cv2.x86_64-linux-gnu.so’的内容
  5. 退出python解释器(CTRL-D)
  6. /opt/redislabs/lib/modules/python27/.venv/lib/python2.7/site-packages
  7. 像这样创建一个软链接: ln -s /usr/lib/python2.7/dist-packages/cv2.x86_64-linux-gnu.so cv2.so
  8. /opt/redislabs/lib/modules/python27
  9. 安装其余的要求 pipenv install numpy pillow

(可选)普罗米修斯和格拉法纳

请参阅以下项目的构建/安装说明以设置Prometheus,Grafana和RedisTimeSeries适配器:

请参阅下文,了解如何运行部分dockerized设置,以避免在本地安装这些设置。

应用程序

该应用程序在Python 3中实现,包含以下部分:

  • init.py:这将使用RedisAI模型,RedisTimeSeries下采样规则和RedisGears设备初始化Redis。
  • capture.py:从网络摄像头或图像/视频文件中捕获视频流帧,并将其存储在Redis Stream中。
  • server.py:Web服务器,提供由原始帧和模型检测组成的渲染图像。
  • top.py:打印运行时性能指标。可选(即手动运行)。
  • gear.py:Redis齿轮胶合管道。

要运行该应用程序,您需要Python v3.6或更高版本。使用以下内容安装应用程序的库依赖项 - 建议您使用virtualenv或类似:

1
2
3
$ virtualenv -p python3.6 venv
$ source venv / bin / activate
$ pip install -r app / requirements.txt

应用程序的部件设置有默认值,旨在允许它“开箱即用”运行。例如,要运行捕获过程,您只需键入:

1
$ python capture.py

这将从设备ID 0运行捕获过程。

然而。可以从命令行覆盖大多数默认值 - 使用--help开关调用应用程序的部分以了解这些内容。

如何使用Docker Compose运行它

先决条件:

  • 搬运工人

Ubuntu 18.04(可能是旧版本,其他基于Debian的发行版和所有Linux)

全dockerized

以下内容将启动完全dockerized环境:

1
$ docker-compose up

或者,您可以通过以下方式启动精益环境(没有花哨的UI):

1
$ docker-compose up redisedge init capture server

局部dockerized

为了提高性能,提供了仅包含应用程序的初始化程序,服务器,grafana,prometheus和RedisTimeSeries适配器的本地Docker组合。换句话说,您需要提供RedisEdge服务器和视频流。

要使用它,首先要确保启动RedisEdge服务器,例如:

1
$ ./redisedge/run.sh

然后,您可以运行堆栈的其余部分:

1
$ docker-compose -f docker-compose.local.yaml up

最后,确保你真正开始在本地捕获一些东西,例如:

1
$ python app / capture.py app / data / countvoncount.mp4

注意:在完全和部分dockerized运行之间切换时,请确保重建(例如docker-compose up --build)。

苹果系统

全dockerized

根据目前的智慧,不可能在macOS上使用Docker容器中的网络摄像头。要解决此问题,请始终capture.py在主机上本地运行。

部分码头化(又称本地化)

根据目前的智慧,“主机”模式网络是macOS的神话。因此,部分对接模式不可用。TL; DR - 它(或几乎)完全对接或为您本地化。

绩效指标和说明

  1. Docker使一切变慢。
  2. 捕获的视频帧越大,运行速度越慢。
  3. 如果您没有GPU但CPU支持其他优化,请考虑使用它们编译TensorFlow,然后使用RedisAI编译,并在本地运行RedisEdge。
  4. 如果您有GPU,请使用它(即为它编译RedisAI python init.py --device GPU)。

无论是顶部工具Grafana UI提供以下性能指标:

  • in_fps:每秒输入(视频)帧数
  • out_fps:每秒输出(由模型处理)帧数
  • prf_read:以毫秒为单位的读取持续时间(来自输入视频流)的移动平均值
  • prf_resize:用于调整大小的同上(输入框架到模型张量)
  • prf_model:用于运行YOLO模型的ditto
  • prf_script:用于运行PyTorch post脚本的ditto
  • prf_boxes:同样用于从脚本的输出中提取人员框
  • prf_store:用于存储结果和各种时间序列值的ditto]
  • prf_total:已处理帧的以毫秒为单位的端到端延迟

非官方指标

通过捕获Count的视频并使用应用程序的顶级工具进行采样的度量标准:

硬件 OS Dockerized 设备 in_fps out_fps prf_read prf_resize prf_model prf_script prf_boxes prf_store prf_total
Macbook Pro 15,2015 macOS Mojave CPU(没有1) 30.0 4.5 16.1 4.4 167.5 8.6 1.9 0.5 199.0
Macbook Pro 15,2015 Ubuntu 18.04 CPU(没有1) 30.0 6 19.2 3.2 121.2 2.6 2.3 0.2 149.0
Macbook Pro 15,2015 Ubuntu 18.04 没有 CPU(是2) 30.0 10.0 15.1 3.3 61.7 2.1 2.1 0.2 84.3
AWS EC2 p3.8xlarge Ubuntu 16.04 3 没有 CPU(没有1) 30.0 10.0 17.9 2.9 49.7 4.5 2.5 0.2 77.7
AWS EC2 p3.8xlarge Ubuntu 16.04 3 没有 CPU(是2) 30.0 11.0 17.6 3.9 31.6 11.9 2.4 0.2 67.6
AWS EC2 p3.8xlarge Ubuntu 16.04 3 没有 GPU 30.0 30.0 16.9 3.0 2.9 1.6 1.8 0.2 26.1

堆栈版本:

  • Redis v5.0.5
  • RedisAI v0.2.1
  • RedisGears v0.3.1
  • RedisTimeSeries v0.2.0

笔记:

  1. TensorFlow编译时没有任何本机架构优化
  2. TensorFlow使用SSE4.1 SSE4.2 AVX AVX2 FMA优化编译
  3. 深度学习基地AMI(Ubuntu)版本18.0 - ami-075f094614eb7224e

UI

应用程序的渲染视频流(server.py)应位于http:// localhost:5000 / video

Docker Compose设置还附带预先配置的Grafana服务器 - 它应该在http:// localhost:3000 /(admin / admin)。它配置了Prometheus数据源和视频仪表板,因此一旦您登录:

  1. 从左侧停靠栏选择“仪表板”(第二个图标)
  2. 点击“管理”
  3. 点击“视频流分析”
  4. 瞧!

注意:如果您在非本地主机的东西上安装此项目,则需要将其主机名或IP地址放在“camera:0”Grafana面板的URL中以显示视频。

来了,老弟
-------------    本文结束  感谢您的阅读    -------------
0%