栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python航拍无人机视角下多车型车流量检测车流量多车型计数无人机车流检测yolov5

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python航拍无人机视角下多车型车流量检测车流量多车型计数无人机车流检测yolov5

航拍无人机视角下车流量检测车流量多车型计数无人机车流检测yolov5


  最近在研究告诉高速公路无人机航拍多车型车流量检测,分为car和bus,这里主要说一下遇到的问题以及想法,如有问题欢迎大家指正。

设计思路以及遇到的问题
第一步是完成物体(也就是车辆)的检测,这里有两种解决办法,第一种办法是使用opencv的形态学处理,比如背景消除、做帧差、膨胀腐蚀等等,这个办法比较基础,但是要处理好需要调整诸多细节,我的细节调整的不够好,因此实现时会遇到许多小问题。第二个办法是直接实现物体的识别,需要用到一定的训练模型,我测试过googlenet和yolo,最终选择了yolov5
第二步是追踪,这里用了deepsort追踪
第三步是计数,在CSDN 中找到一篇博文,提到的做法是建立一个类,每次出现新的目标就创建一个类,旧的目标就替换坐标,这个做法后来证实的确有效。但问题是如何判断这一帧的车辆是否新的目标,我给出的解决办法是创建一个列表,将第一帧的所有目标(也就是每一个对象)存入,第二帧的时候遍历每一个目标与列表的每一辆车,判断x,y的距离,如果变化不超过车的长度和宽度,就认为这是同一辆车(也有学长告诉为特征值匹配的办法,也许更可行,但我能力不够没有学到这里,所以没有采用)。

 待检测视频链接:

航拍广东高速公路风景,飞机上看更震撼,美呆了!,旅游,旅途风光,好看视频航拍广东高速公路风景,飞机上看更震撼,美呆了!,本视频由客家人阿牛哥提供,751次播放,好看视频是由百度团队打造的集内涵和颜值于一身的专业短视频聚合平台https://haokan.baidu.com/v?pd=wisenatural&vid=9283681397163393174

补充:我发现了一个csdn大哥写的计数算法。直接拿来用了。效果很棒。完美解决航拍无人机车流量计数。

检测图:

效果图:

 实现程序:

 
labelsPath = "./yolo-coco/coco.names"
LABELS = open(labelsPath).read().strip().split("n")
 
np.random.seed(42)
COLORS = np.random.randint(0, 255, size=(200, 3),dtype="uint8")
 
weightsPath = "./yolo-coco/yolov5.weights"
configPath = "./yolo-coco/yolov5.cfg"
 
net = cv2.dnn.readNetFromDarknet(configPath, weightsPath)
ln = net.getLayerNames()
ln = [ln[i - 1] for i in net.getUnconnectedOutLayers()]
 
# ----------------------------------------------------------------------------------------------------------------------
"""
# cv2.VideoCapture() --- 里面参数如果地址,打开视频文件 --- 里面参数是0/1,打开摄像头
# 当参数是0的时候,打开计算机的内置摄像头,当参数为1的时候打开计算机的外置摄像头
# (W, H) = (None, None) --- 视频的宽度和高度,初始化视频编写器(writer)和帧尺寸
"""
# ----------------------------------------------------------------------------------------------------------------------
 
vs = cv2.VideoCapture('./input/123.mp4')
(W, H) = (None, None)
 
# ----------------------------------------------------------------------------------------------------------------------
"""
# try to determine the total number of frames in the video file
# 打开一个指向视频文件的文件指针,循环读取帧 --- 尝试确定视频文件中的总帧数(total),以便估计整个视频的处理时间;
# CV_CAP_PROP_FRAME_COUNT --- 视频的帧数
# 这里使用是处理视频的时候固定的过程,不必过度的纠结其使用 ---
#					   if imutils.is_cv2():
#					   	  prop = cv2.cv.CV_CAP_PROP_FRAME_COUNT
#					   else:
#					   	  prop = cv2.CAP_PROP_FRAME_COUNT
#
# vs.get(prop) --- cv2.VideoCapture.get(prop) --- 得到视频的总帧数 
# print("[INFO] {} total frames in video".format(total)) --- 输出视频的帧数
"""
# ----------------------------------------------------------------------------------------------------------------------
try:
    prop = cv2.cv.CV_CAP_PROP_FRAME_COUNT if imutils.is_cv2() 
        else cv2.CAP_PROP_FRAME_COUNT
    total = int(vs.get(prop))
    print("[INFO] {} total frames in video".format(total))
 
except:
    print("[INFO] could not determine # of frames in video")
    print("[INFO] no approx. completion time can be provided")
    total = -1
 
while True:
    # ----------------------------------------------------------------------------------------------------------------------
 
    """
    # cv2.VideoCapture.read() ---> 读取视频,在while中循环读取视频的frame
    # vs.read() ---> 得到两个参数,其中ret是布尔值,如果读取帧是正确的则返回True,
    # 如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
    # 第一个参数为False的时候,if not grabbed --- True --- 循环结束,
    """
    (grabbed, frame) = vs.read()
 
    if not grabbed:
        break
 
    if W is None or H is None:
        (H, W) = frame.shape[:2]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938527.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号