results = []
for anno in tqdm(my_part):
frames = extract_frame(anno['filename'])
det_results = detection_inference(det_model, frames)
# * Get detection results for human
det_results = [x[0] for x in det_results]
for i, res in enumerate(det_results):
# * filter boxes with small scores
res = res[res[:, 4] >= args.det_score_thr]
# * filter boxes with small areas
box_areas = (res[:, 3] - res[:, 1]) * (res[:, 2] - res[:, 0])
assert np.all(box_areas >= 0)
res = res[box_areas >= args.det_area_thr]
det_results[i] = res
shape = frames[0].shape[:2]
anno['img_shape'] = shape
anno = pose_inference(anno, pose_model, frames, det_results,
compress=args.compress)
anno.pop('filename')
results.append(anno)
shape = frames[0].shape[:2]
anno['img_shape'] = shape
shape = frames[0].shape[:2]
这段代码涉及到 Python 的列表切片语法。
首先来看 frames[0]
。frames
是一个列表或者数组,包含了从视频中提取的若干帧。frames[0]
表示获取列表中第一个元素,即第一帧。
接下来是 .shape
。frames[0]
表示一个图像或视频帧,它有宽、高和通道数三个属性,这些属性构成了这个图像的形状。.shape
可以获取这个形状信息。
最后是 [:2]
。这是 Python 列表切片的语法,用于获取列表的部分元素。[:2]
表示获取从索引 0 到索引 1 (不包括索引 2) 的元素,也就是获取宽和高两个维度的信息,不包括通道数。
所以 shape = frames[0].shape[:2]
的作用是:
- 获取
frames
列表中的第一个元素,也就是第一帧图像。 - 获取这个第一帧图像的形状信息。
- 只保留形状中的宽和高两个维度,不包括通道数。
- 将这个宽高信息赋值给变量
shape
。
这样做的目的是为了记录下视频帧的尺寸信息,以便后续的姿态估计处理。
anno = pose_inference(anno, pose_model, frames, det_results, compress=args.compress)
anno.pop('filename')
results.append(anno)
这段代码涉及到了对anno
字典的处理:
-
anno = pose_inference(anno, pose_model, frames, det_results, compress=args.compress)
- 这一行使用预训练的姿态估计模型
pose_model
对当前的anno
字典、提取的视频帧frames
以及目标检测结果det_results
进行姿态估计。 - 估计结果被保存到
anno
字典中。 compress=args.compress
表示是否压缩结果。
- 这一行使用预训练的姿态估计模型
-
anno.pop('filename')
- 这一行从
anno
字典中移除'filename'
键值对。 - 之前已经提取了视频帧,不再需要
'filename'
信息了。
- 这一行从
-
results.append(anno)
- 这一行将更新后的
anno
字典添加到results
列表中。 results
列表用于保存最终的所有结果。
- 这一行将更新后的
总结一下这段代码的作用:
- 使用姿态估计模型对当前的
anno
字典进行处理,获得姿态估计结果并更新到anno
字典中。 - 从
anno
字典中移除不再需要的'filename'
信息。 - 将更新后的
anno
字典添加到results
列表中,以便后续使用。
这个过程是整个计算流程的一个重要步骤,用于将目标检测和姿态估计的结果组织成一个统一的数据结构,以便后续的分析和处理。
pyskl/tools/data/custom_2d_skeleton.py at main · kennymckormick/pyskl · GitHub