• 下载源219 MB

到目前为止,在本系列中,我们一直在处理静止图像数据。在本文中,我们将使用YOLO的基本实现来检测和计数视频序列中的人物。

让我们再次从导入所需的库开始。

import cv2
import numpy as np
import time

在这里,我们将使用与上一篇文章中讨论的相同的文件和代码模式。如果您还没有阅读本文,我建议您阅读一下,因为它将清除代码的基础知识。作为参考,我们将在此处加载YOLO模型。

# Load Yolo
net=cv2.dnn.readNet("./yolov3.weights", "./yolov3.cfg")# Classes
classes=[]
with open("coco.names","r") as f:classes=[line.strip() for line in f.readlines()]# Define Output Layers
layer_names=net.getLayerNames()
output_layers=[layer_names[i[0]-1] for i in net.getUnconnectedOutLayers()]

现在,我们将向模型提供一个视频文件,而不是图像。OpenCV提供了一个简单的界面来处理视频文件。我们将创建该VideoCapture对象的实例。它的参数可以是连接的设备的索引或视频文件。我将处理一个视频。

cap = cv2.VideoCapture('./video.mp4')

我们还将输出保存为视频序列。为了保存视频输出,我们将使用Keras中的VideoWriter对象实例。

out_video = cv2.VideoWriter(  'human.avi', cv2.VideoWriter_fourcc(*'MJPG'), 15., (640,480))

现在,我们将从视频序列中捕获帧,使用blob处理它们并进行检测。(查看上一篇文章以获取详细说明。)

frame = cv2.resize(frame, (640, 480))
height,width,channel=frame.shape#detecting objects using blob. (320,320) can be used instead of (608,608)
blob=cv2.dnn.blobFromImage(frame,1/255,(320,320),(0,0,0),True,crop=False)net.setInput(blob)#Object Detection
outs=net.forward(outputlayers)

让我们获取每个检测到的对象的边界框的坐标,并应用阈值以消除弱检测。当然,我们不要忘记应用非最大抑制。

# # Evaluate class ids, confidence score and bounding boxes for detected objects i.e. humans
class_ids=[]
confidences=[]
boxes=[]for out in outs:for detection in out:scores=detection[5:]class_id=np.argmax(scores)confidence=scores[class_id]if confidence>0.5:# Object Detectedcenter_x=int(detection[0]*width)center_y=int(detection[1]*height)w=int(detection[2]*width)h=int(detection[3]*height)                    # Rectangle Co-ordinatesx=int(center_x-w/2)y=int(center_y-h/2)boxes.append([x,y,w,h])confidences.append(float(confidence))class_ids.append(class_id)# Non-max Suppressionindexes=cv2.dnn.NMSBoxes(boxes,confidences,0.4,0.6)

在检测到的对象上绘制最终边界框,并为每次检测增加计数器。

count = 0
# Draw bounding boxesfor i in range(len(boxes)):if i in indexes:x,y,w,h=boxes[i]label=str(classes[class_ids[i]])color=COLORS[i]if int(class_ids[i] == 0):count +=1cv2.rectangle(frame,(x,y),(x+w,y+h),color,2)cv2.putText(frame,label+" "+str(round(confidences[i],3)),(x,y-5),font,1, color, 1)

我们可以在屏幕上绘制帧号和计数器,以便我们知道每个帧中有多少人。

# draw counter
cv2.putText(frame, str(count), (100,200), cv2.FONT_HERSHEY_DUPLEX, 2, (0, 255, 255), 10)cv2.imshow("Detected_Images",frame)

现在,我们的模型将计算框架中存在的人数。为了更好地估计队列长度,我们可以在处理之前定义我们感兴趣的区域。

# Region of interest
ROI = [(100,100),(1880,100),(100,980),(1880,980)]

然后将框仅聚焦在该区域中,如下所示:

# draw Region Of Interest
cv2.rectangle(frame, ROI[0], ROI[3], (255,255,0), 2)

这是正在处理的最终视频的快照。

尾注

在本系列文章中,我们学习了为计算机视觉问题实现深度神经网络。我们从头开始实现神经网络,使用转移学习,并使用预先训练的模型来检测感兴趣的对象。乍一看,当我们在拥挤的场景中工作时,清晰地看不到感兴趣的对象,似乎最好使用经过定制训练的模型。在这种情况下,经过定制训练的模型可能会更准确,但是准确度是以时间和资源消耗为代价的。某些类似YOLO的最新算法比经过定制训练的模型更有效,并且可以实时实现,同时保持合理的准确性。

我们在本系列中探讨的解决方案并不完美,可以改进,但是您现在应该可以清楚地了解使用深度学习模型进行对象检测意味着什么。我鼓励您尝试我们所经历的解决方案。也许您可以微调参数以获得更好的预测,或者实现ROI或LOI以获得对队列中人数的更好估计。您也可以尝试进行对象跟踪,只是不要忘记与我们分享您的发现。祝您编码愉快!

AI队列长度检测:使用YOLO进行视频中的对象检测相关推荐

  1. AI队列长度检测:使用YOLO进行图像中的对象检测

    目录 YOLO简介 创建和加载模型 预处理输入 获取边界框 下一步是什么? 下载源219 MB 在本系列的前几篇文章中,我们从头开始实现了对象检测.我们观察到从头训练模型需要大量的计算资源和时间.这些 ...

  2. OpenCV学习记录之视频中的火焰检测识别

    主要完成两个视频中火焰的检测,主要结合RGB判据和HIS判据,设定合适的阈值条件,检测出火焰对应像素的区域,将原图二值化,经过中值滤波以及数学形态学的膨胀运算等图像处理,消除一些噪声及离散点,连通一些 ...

  3. 使用YOLO Core ML模型构建对象检测iOS应用(七)

    目录 在我们的应用程序中添加模型 在捕获的视频帧上运行目标检测 绘制边界框 实际应用 下一步? 总目录 将ONNX对象检测模型转换为iOS Core ML(一) 解码Core ML YOLO对象检测器 ...

  4. 使用Python,OpenCV的Meanshift 和 Camshift 算法来查找和跟踪视频中的对象

    使用Python,OpenCV的Meanshift 和 Camshift 算法来查找和跟踪视频中的对象 1. 效果图 2. 源码 2.1 MeanShift 2.2 Camshift(Continuo ...

  5. 深度学习和目标检测系列教程 1-300:什么是对象检测和常见的8 种基础目标检测算法

    @Author:Runsen 由于毕业入了CV的坑,在内卷的条件下,我只好把别人卷走. 对象检测 对象检测是一种计算机视觉技术,用于定位图像或视频中的对象实例.对象检测算法通常利用机器学习或深度学习来 ...

  6. 检测和语义分割_分割和对象检测-第2部分

    检测和语义分割 有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) These are the lecture notes for FAU's YouT ...

  7. python+opencv 实现图像人脸检测及视频中的人脸检测

    执着于理想,纯粹于当下. 文章目录 一.数据和知识准备 1. 下载HAAR与LBP数据 2. opencv相关知识 二.python+opencv实现人脸检测 1. 图像单人脸检测 2. 图像多人脸检 ...

  8. 开源库 | 监控视频中的目标检测与跟踪

    介绍一份来自卡内基梅隆大学开源的主要用于监控视频中目标检测与跟踪的开源库:Object_Detection_Tracking . 其赢得了 2019 Activities in Extended Vi ...

  9. frame中src怎么设置成一个变量_OpenCV图像人脸检测及视频中的人脸检测(附源码)...

    文章目录 一.数据和知识准备 1. 下载HAAR与LBP数据 2. opencv相关知识 二.python+opencv实现人脸检测 1. 图像单人脸检测 2. 图像多人脸检测 3. 视频中人脸检测 ...

最新文章

  1. 【文本分类】基于BERT预训练模型的灾害推文分类方法、基于BERT和RNN的新闻文本分类对比
  2. java 泛型解耦,T-MVP:泛型深度解耦下的MVP大瘦身
  3. UNIX(多线程):24---哪些STL容器是线程安全的
  4. TCP之1460MSS和1448负载
  5. oracle中游标详细用法
  6. Firefox 按一下Alt键 出现菜单!
  7. R语言中的read.table()
  8. js高级学习笔记(b站尚硅谷)-5-回调函数
  9. 计算机考研英语北邮,北京邮电大学计算机考研复试经验
  10. 通过mac地址查找ip
  11. 学生个人html静态网页制作 基于HTML+CSS+JavaScript+jquery仿苏宁易购官网商城模板
  12. 大数据可视化 课堂笔记-1
  13. shaderlab 中 use pass、grab pass的用法
  14. React源码解毒 - 检测开发者是否错误的使用了props属性
  15. 游戏开发心得——书籍篇——《游戏引擎框架》-导论
  16. 聚合支付二维码生成原理
  17. C# 3GQQ批量登录工具(QQ答复机器人)
  18. algorithm的使用
  19. 看APS计划排产在陶瓷制品行业的应用
  20. svn server运行和解决条目不可读问题

热门文章

  1. 人工智能技术的三大学派_什么是人工智能?它离我们有多远
  2. eclipse支持html,让eclipse完全支持HTML/JS/CSS智能提示
  3. python调用接口上传文件_python接口自动化7-post文件上传
  4. 在系统启动时至少有一个服务或驱动程序产生错误_Cassandra Java驱动程序
  5. 剪纸窗花PSD分层素材|春节的常见元素,轻松应用到海报设计
  6. APP时间界面设计模板,可临摹学习的好素材
  7. win10怎么在网络里查看win7计算机,网络共享中win7能找到win10,但win10找不到win7
  8. 知云文献阅读器_知云文献翻译
  9. Linux 中断所有知识点
  10. Linux系统实现ICMP ping功能,并计算时延