• 下载数据-19.3 MB
  • 下载模型-43.5 MB
  • 下载结果-36.66 MB

从本系列的前几篇文章中,我们获得了使用SSD DNN模型检测图像中人物的Python代码。而且我们已经展示了该代码可以在Raspberry Pi设备上启动。在本文中,我们将调整代码以检测视频流中的人物。

我们将使用mp4格式的视频文件作为视频“流”数据。这是测试检测算法的最简单方法。首先,我们可以使用任何摄像机的数据,也可以从Internet下载视频剪辑。其次,我们可以使用相同的输入数据重复进行多次实验,这是测试的重要方面。Raspberry Pi设备具有摄像头模块,我们可以使用它来测试实时视频流上的检测算法。但是,几乎不可能在相同条件下多次测试该算法,因为很难为实时摄像机精确地重复场景。

我们已经有了一些实用程序类,用于处理Caffe DNN模型,处理图像以及在其上进行图形检测。另外,还有一个主要类别,SSD,它可以接收帧(图像)并 检测其中的人物。现在,使用现有代码,让我们编写一个新的Python类进行视频处理:

class VideoSSD:    def __init__(self, ssd):self.ssd = ssddef detect(self, video, class_num, min_confidence):detection_num = 0;fps = FPS()       capture = cv2.VideoCapture(video)# Capture all frameswhile(True):  (ret, frame) = capture.read()if frame is None:breakfps.start()obj_data = self.ssd.detect(frame)persons = self.ssd.get_objects(frame, obj_data, class_num, min_confidence)fps.stop()p_count = len(persons)detection_num += p_countif len(persons)>0:Utils.draw_objects(persons, "PERSON", (0, 0, 255), frame)# Display the resulting framecv2.imshow('Person detection',frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcapture.release()cv2.destroyAllWindows()    f = fps.fps()return (detection_num, f)

用SSD类的一个实例初始化VideoSSD类,该SSD类在视频处理器中用于人员检测。主要的detect方法具有三个输入参数:video——视频文件的完整路径,class_num——要检测的类别编号,以及min_confidence——类别检测的阈值。在这种方法中,我们首先初始化fps对象以进行性能评估,然后从cv2模块创建VideoCapture。然后,我们遍历视频流中的所有帧,在每个帧中检测人员,对所有检测到的人员进行计数,然后计算性能。可以修改该代码以用于实时摄像机而不是视频文件。您需要做的就是为适当的参数修改cv2.VideoCapture的初始化。

detect方法返回一个元组,其中包含检测到的人员总数和平均FPS。请注意,我们不会将检测到人物的帧保存到文件中(我们在图像中进行检测的方式)。我们只是在框架中绘制检测结果,然后通过调用cv2.imshow方法将其显示在GUI窗口中。因此,我们将在屏幕上看到检测结果。

现在,让我们编写用于检测视频文件中人物的代码:

# testing video detector
proto_file = r"/home/pi/Desktop/PI_RPD/mobilenet.prototxt"
model_file = r"/home/pi/Desktop/PI_RPD/mobilenet.caffemodel"
ssd_net = CaffeModelLoader.load(proto_file, model_file)
print("Caffe model loaded from: "+model_file)proc_frame_size = 300
# frame processor for MobileNet
ssd_proc = FrameProcessor(proc_frame_size, 1.0/127.5, 127.5)
person_class = 15ssd = SSD(ssd_proc, ssd_net)video_file = r"/home/pi/Desktop/PI_RPD/video/person_1.mp4"
video_ssd = VideoSSD(ssd)
(detections, fps) = video_ssd.detect(video_file, person_class, 0.5)
print ("Detection count:"+str(detections))
print ("FPS:"+str(fps))

在Raspberry Pi 3B设备上针对测试视频运行以上代码,我们得到以下结果:总检测计数为54;平均FPS约为1.27。

在运行程序时,我们会看到带有人员检测的GUI窗口。这是保存的屏幕视频:

youtube

从视频中可以看到,检测速度非常慢,因为处理单元每帧大约需要0.8秒。这与我们在处理静止图像时基准测试的性能相同……但是对于视频处理而言,它看起来很慢。

在这一点上,我们应该问自己是否足以在0.8秒内处理一帧以实现实时人员检测。答案取决于检测目的。如果目标是计算进入购物中心的所有顾客,则答案为“否”。但是,如果我们正在开发视频监视系统,并且目标是仅向操作员告知入侵者的出现,答案将是“是”。让我们注意一下,在我们的测试视频中,每个人都会出现几秒钟。如果我们能够在一秒钟内处理一帧图像,那么我们就很有可能检测到该人的外貌。

看起来我们可以使用AI模型在实时摄像头上检测人的外观。但是,我们的人员检测代码无法实时处理,因为它会处理所有帧,因此速度很慢。

下一步

在接下来的文章中,我们将修改的边缘设备上实时处理的代码。

边缘设备上的实时AI人员检测:检测视频中的人员相关推荐

  1. 边缘设备上的实时AI人员检测:以实时模式检测视频中的人员

    下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 这是七篇系列文章中的最后一篇.到目前为止,我们已经有了用于人员检测的DNN模型和用于在Raspberry Pi设备上启动 ...

  2. 边缘设备上的实时AI人员检测:入门

    下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 得益于深度学习(DL),实时视频流中的人的实时检测几年前就已经解决了.但是,在边缘和物联网设备上并不总是那么容易,因为它 ...

  3. 边缘设备上的实时AI虫害消除:入门

    目录 介绍 选择器与检测器 实时性呢? 下一步 在这里,我们从使用AI和DNN的角度阐述了害虫消除的问题.然后,我们提出两种可能的解决方案:1--使用预训练的SSD模型检测猫.羊和其他动物:2--使用 ...

  4. 边缘设备上的实时AI人员检测:在Raspberry Pi上启动SSD

    下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 在本系列的最后一篇文章中,我们编写了Python代码,用于使用SSD模型检测图像中的人物.在本文中,我们将介绍在Rasp ...

  5. 边缘设备上的实时AI人员检测:在Raspberry Pi上测试SSD模型

    下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 在本系列的上一篇文章中,我们已经在Raspberry Pi设备上启动了人体检测软件.在这一本文中,我们将比较Raspbe ...

  6. 边缘设备上的实时AI人员检测:选择深度学习模型

    下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 在本系列的介绍性文章中,我们讨论了为边缘设备创建DL人员检测器的简单方法,该方法是找到合适的DNN模型并编写代码以在设备 ...

  7. 边缘设备上的实时AI人员检测:使用预先训练的SSD模型检测人员

    下载数据-19.3 MB 下载模型-43.5 MB 下载结果-36.66 MB 在本系列的上一篇文章中,我们选择了两种SSD模型进行进一步工作,一种基于MobileNet,另一种基于SqueezeNe ...

  8. 170 FPS!YolactEdge:边缘设备上的实时实例分割,已开源!

    点击上方"CVer",选择加"星标"置顶 重磅干货,第一时间送达 本文转载自:AI人工智能初学者 论文:https://arxiv.org/abs/2012.1 ...

  9. YolactEdge:边缘设备上的实时实例分割(Xavier: 30 FPS, RTX 2080 Ti:170 FPS)

    带有ResNet-101的YolactEdge在Jetson AGX Xavier上的速度高达30.8 FPS,在RTX 2080 Ti上的速度为172.7 FPS,AP性能超强!速度是目前主流方法的 ...

最新文章

  1. HDU 1566 Count the Colors 树状树组 区间更新 单点求值
  2. python装饰器系列(五)
  3. 40岁的程序员还能找到工作吗_学会了Vue就能找到前端工作吗
  4. hung task日志linux,Linux Kernel Crash--hung_task_timeout_secs
  5. 计算机存储地址如何,计算机内存地址只有5种表现形式吗,为什么?
  6. centos 6.7 perl 版本 This is perl 5, version 22 安装DBI DBD
  7. MFC工程中划定ROI区域
  8. c 语言编写的一元二次方程的根,C#程式求一元二次方程根
  9. android类似iphone照片幻灯片,8个最佳照片编辑应用让你的Android或iPhone照片看起来不可思议...
  10. 火车头怎么采集php的,火车采集器采集入库教程
  11. 苹果系统Fn键怎样使用?
  12. html防微信抢红包,如何实现仿微信抢红包
  13. 基于Android Studio实现的学生蹭课APP
  14. iOS 随机数(Fixed)
  15. Revit翻模软件:管件二维注释比例改变和【管道翻模】
  16. android中星级评分控件RatingBar的使用
  17. 机器学习【西瓜书/南瓜书】--- 第1章绪论(学习笔记+公式推导)
  18. Python 通过 STMP 发送邮件(云服务器可用)
  19. 移动OA系统,告别企业“粗放式管理”
  20. html5粒子效果,8款惊艳的HTML5粒子动画特效

热门文章

  1. mysql中加入正则表达式,mysql中的正则表达式搜索
  2. QT接收Linux内核,QT界面程序经过网路与普通的linux应用程序进行数据传送的情况...
  3. 合成孔径成像算法与实现_MIMO OFDM宽幅SAR成像仿真与图像融合技术
  4. 炫彩流行艺术海报,品味不止一点点
  5. 超绝万圣节主题设计海报背景,搞节日气氛靠它没问题!
  6. UI设计师收好!哪些会说故事的插画素材!
  7. 渐变背景免费UI设计素材专辑,让设计显得魅力非凡
  8. matlab 数组名含变量,求助:如何将带有符号变量的运算结果储存到数组中
  9. Transitions Among the Processor’s Operating Modes
  10. Linux进程管理:内核中的优先级继承互斥(rtmutex.h):防止优先级反转