在城市交通管理中,确保车辆遵守交通规则是非常重要的。其中,停止标志是最基本的交通规则之一。然而,人工监控所有车辆是否遵守停止标志是不现实的。因此,开发了一款基于深度学习的自动交通违规检测应用,该应用能够自动识别并记录不遵守停止标志的车辆。
为了准确检测车辆是否在停止标志前停车,需要满足几个条件:车辆必须是队列中的第一辆车;车辆必须停在接近街道上的白线;车辆必须在前轮越过白线之前停车。
使用了视频游戏GTA V来模拟交通场景。游戏的真实图形和可定制的摄像机角度使其成为创建该项目准确模拟的理想选择。
使用YOLOv8模型来检测每一帧中的车辆。模型处理输入并提供位置检测。只保留对应于机动车的车辆检测:汽车、摩托车、公共汽车、卡车。
为了在图像中标注区域,提取视频的第一帧。这是stop_checker.py
中的第一个函数。
def get_first_frame(video_name):
video_path = f"videos/{video_name}.mp4"
frames_generator = sv.get_video_frames_generator(source_path=video_path)
iterator = iter(frames_generator)
first_frame = next(iterator)
os.makedirs(f"first_frames/", exist_ok=True)
cv2.imwrite(f"first_frames/{video_name}.png", first_frame)
get_first_frame(“example”) # 运行函数
然后可以使用Roboflow的PolygonZone
工具来标注区域。这个工具非常简单易用,只需上传视频的第一帧,然后点击想要标记区域的位置。
对于这个项目,需要定义三个区域:道路区域,即停止标志的道路,只有这条道路上的车辆才会被考虑;停止区域,一个靠近白线的区域,车辆必须在这个区域内停车;外出区域,白线之后的区域,车辆必须在前轮进入这个区域之前停车。
由于原始的YOLOv8 COCO权重可以检测各种类型的车辆,不需要训练自己的模型。为了检测汽车上的轮子,将在Roboflow上对模型进行微调。这可以很容易地在Roboflow网站上完成。如果想查看如何操作的教程,请参见的第二步。也可以使用提供的。使用训练了模型。
访问并按照安装说明操作。将视频放到/videos文件夹中。访问并粘贴视频名称。运行get_first_frame()函数获取第一帧(保存在/first_frames文件夹中)。在PolygonZone上标注帧并将结果粘贴到config.py中。现在可以使用演示笔记本进行推理了!