Datawhale AI夏令营cv task1学习笔记

赛题

视频物体检测

赛题目标

利用图像处理和计算机视觉技术 开发一套智能识别系统,自动检测和分类摄像头捕获的视频中,城市管理中的违规行为

赛事链接

https://www.marsbigdata.com/competition/details?id=3839107548872

数据集

初赛提供城管视频监控数据与对应违规行为标注。违规行为包括垃圾桶满溢、机动车违停、非机动车违停等。视频数据为mp4格式,标注文件为json格式,每个视频对应一个json文件。

frame_id:违规行为出现的帧编号

event_id:违规行为ID

category:违规行为类别

bbox:检测到的违规行为矩形框的坐标,[xmin,ymin,xmax,ymax]形式

了解YOLO

YOLO 的核心思想就是把目标检测转变成一个回归问题。一次前向传播就能完成整个图像的物体检测,不需要复杂的后处理步骤。

主要优点:速度快,可以实时预测

工作流程

(1)输入一个图像,将图像分成s*s大小

(2)对于每个网络,预测多个边框

(3)预测窗口,非极大值抑制去除冗余

标注

<class>是类别索引

<x_center><y_center>是边界框中心点相对于图像宽度和高度的比例

<width><height>是边界框的宽度和高度相对于图像宽度和高度的比例

baseline代码



# 读取训练集视频
for anno_path, video_path in zip(train_annos[:5], train_videos[:5]):
    print(video_path)
    #注解文件
    anno_df = pd.read_json(anno_path)
    #对应的视频路径
    cap = cv2.VideoCapture(video_path)
    frame_idx = 0 
    # 读取视频所有画面
    #获取每个帧的注解信息
    while True:
        ret, frame = cap.read()
        if not ret:
            break

        img_height, img_width = frame.shape[:2]
        
        # 将画面写为图
        frame_anno = anno_df[anno_df['frame_id'] == frame_idx]
        cv2.imwrite('./yolo-dataset/train/' + anno_path.split('/')[-1][:-5] + '_' + str(frame_idx) + '.jpg', frame)

        # 如果存在标注
        if len(frame_anno) != 0:
            with open('./yolo-dataset/train/' + anno_path.split('/')[-1][:-5] + '_' + str(frame_idx) + '.txt', 'w') as up:
                for category, bbox in zip(frame_anno['category'].values, frame_anno['bbox'].values):
                    category_idx = category_labels.index(category)
                    
                    # 计算yolo标注格式
                    x_min, y_min, x_max, y_max = bbox
                    x_center = (x_min + x_max) / 2 / img_width
                    y_center = (y_min + y_max) / 2 / img_height
                    width = (x_max - x_min) / img_width
                    height = (y_max - y_min) / img_height
                    #x_center值大于1,代码打印出这个异常值,
                    #这可能是坐标转换的问题或者是数据错误
                    if x_center > 1:
                        print(bbox)
                    up.write(f'{category_idx} {x_center} {y_center} {width} {height}\n')
        #frame_idx递增,表示进入下一张图片的处理
        frame_idx += 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值