基于Yolov5 StrongSORT的视频目标单次裁剪需求实现问询
Yolov5_StrongSORT_OSNet 实现按唯一ID仅导出单张目标裁剪图
核心思路是维护一个已导出ID的集合,仅当跟踪到的目标ID不在该集合中时,才导出对应的裁剪图,同时将该ID加入集合避免重复导出。具体修改步骤如下:
- 初始化已处理ID集合
在视频处理的主逻辑开始前(比如初始化StrongSORT跟踪器之后、遍历视频帧之前),定义一个空集合来记录已经导出过裁剪图的目标ID:
exported_ids = set()
- 修改裁剪导出逻辑
找到代码中执行目标裁剪并保存的代码块(通常在遍历跟踪结果的循环内,比如track.py或detect.py中处理det跟踪结果的部分),替换原有的裁剪保存代码:
原代码示例(可能存在的裁剪逻辑):
for *xyxy, conf, cls, track_id in reversed(det): # 原逻辑:每帧都保存该ID的裁剪图 save_crop(im0, xyxy, save_dir / 'crops' / names[int(cls)] / f'{track_id}_{frame}.jpg')
修改为:
for *xyxy, conf, cls, track_id in reversed(det): cls = int(cls) # 仅当ID未导出过时执行保存 if track_id not in exported_ids: # 构造保存路径,用唯一ID命名避免重复 save_path = save_dir / 'crops' / names[cls] / f'{track_id}.jpg' save_crop(im0, xyxy, save_path) # 将该ID加入集合,后续不再导出 exported_ids.add(track_id)
- 注意事项
- 若同时处理多个视频,需确保每个视频处理前都重新初始化
exported_ids集合,避免不同视频间的ID冲突。 - 如果需要选择目标出现时置信度最高的帧导出,可在判断逻辑中增加置信度记录,比如维护一个字典存储每个ID的最高置信度,仅当当前帧置信度更高时才更新保存。
内容的提问来源于stack exchange,提问作者Giorgi Kurdadze
相关产品推荐
相关产品推荐

