人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
CNN:RCNN、SPPNet、Fast RCNN、Faster RCNN、YOLO V1 V2 V3、SSD、FCN、SegNet、U-Net、DeepLab V1 V2 V3、Mask RCNN
自动驾驶:车道线检测、车速检测、实时通行跟踪、基于视频的车辆跟踪及流量统计
车流量检测实现:多目标追踪、卡尔曼滤波器、匈牙利算法、SORT/DeepSORT、yoloV3、虚拟线圈法、交并比IOU计算
多目标追踪:DBT、DFT、基于Kalman和KM算法的后端优化算法、SORT/DeepSORT、基于多线程的单目标跟踪的多目标跟踪算法KCF
计算交并比IOU、候选框不同表示方式之间的转换
卡尔曼滤波器
卡尔曼滤波器实践
目标估计模型-卡尔曼滤波
匈牙利算法
数据关联:利用匈牙利算法对目标框和检测框进行关联
SORT、DeepSORT
多目标追踪
yoloV3模型
基于yoloV3的目标检测
叉乘:基于虚拟线圈法的车流量统计
视频中的车流量统计
4.10. 视频中的车流量统计学习目标
了解视频中处理车流量统计的方法前面我们已经完成了视频中车辆的检测功能,下面我们对车辆进行跟踪,并将跟踪结果绘制在视频中。
主要分为以下步骤:
对目标进行追踪绘制车辆计数结果将检测结果绘制在视频中并进行保存1.对目标进行追踪
# yolo中检测结果为0时,传入跟踪器中会出现错误,在这里判断下,未检测到目标时不进行目标追踪 if np.size(dets) == 0: continue else: tracks = tracker.update(dets) # 将检测结果传入跟踪器中,返回当前画面中跟踪成功的目标,包含五个信息:目标框的左上角和右下角横纵坐标,目标的置信度 # 对跟踪器返回的结果进行处理 boxes = [] # 存放tracks中的前四个值:目标框的左上角横纵坐标和右下角的横纵坐标 indexIDs = [] # 存放tracks中的最后一个值:置信度,用来作为memory中跟踪框的Key previous = memory.copy() # 用于存放上一帧的跟踪结果,用于碰撞检测 memory = {} # 存放当前帧目标的跟踪结果,用于碰撞检测 # 遍历跟踪结果,对参数进行更新 for track in tracks: boxes.append([track[0], track[1], track[2], track[3]]) # 更新目标框坐标信息 indexIDs.append(int(track[4])) # 更新置信度信息 memory[indexIDs[-1]] = boxes[-1] # 将跟踪框以key为:置信度,value为:跟踪框坐标形式存入memory中 绘制车辆计数的相关信息 cv2.line(frame, line[0], line[1], (0, 255, 0), 3) # 根据设置的基准线将其绘制在画面上 cv2.putText(frame, str(counter), (30, 80), cv2.FONT_HERSHEY_DUPLEX, 3.0, (255, 0, 0), 3) # 绘制车辆的总计数 cv2.putText(frame, str(counter_up), (130, 80), cv2.FONT_HERSHEY_DUPLEX, 3.0, (0, 255, 0), 3) # 绘制车辆正向行驶的计数 cv2.putText(frame, str(counter_down), (230, 80), cv2.FONT_HERSHEY_DUPLEX, 3.0, (0, 0, 255), 3) # 绘制车辆逆向行驶的计数将结果保存在视频中
# 未设置视频的编解码信息时,执行以下代码 if writer is None: # 设置编码格式 fourcc = cv2.VideoWriter_fourcc(*"mp4v") # 视频信息设置 writer = cv2.VideoWriter("./output/output.mp4", fourcc, 30, (frame.shape[1], frame.shape[0]), True) # 将处理后的帧写入到视频中 writer.write(frame) # 显示当前帧的结果 cv2.imshow("", frame) # 按下q键退出 if cv2.waitKey(1) & 0xFF == ord('q'): break总结
对目标进行追踪
绘制车辆计数的相关信息
将结果保存在视频中