该项目基于 GitHub - ZHUXUHAN/Priv_Labelimg: A labelimg tool concludes box,segmentation,instance keypoints, brush, human part features. 仅包含2维关节点标注功能
1 | 因为该代码是基于原6功能项目代码删减,所以里面存在大量冗余代码,代码很臃肿 |
需要安装:
- python3/2 (更建议在3下使用)
- pyqt5
- opencv
- qdarkstyle
- requests
运行方式:
- 源码运行
1 | python labelimg.py |
- windows平台下exe可执行文件运行: 只需要下载Priv-LabelImg_1.0,其中有个exe文件,直接运行即可。(未使用)
重要特性 V2.0
- 自动填补: 对每一帧检测前一帧和后一帧,若前/后一帧中存在一点经过人工标注,前当前帧对应点置信度小于0.85,则自动使用前一帧标注点填补
- 后一帧优先级高于前一帧
重要特性 v1.0
检索并打标低置信度帧: 低置信度帧评价因素是存在关节点置信度小于0.601
自动晒选是否需要标记:目前测量是除脚部之外15个关节点的置信度都大于0.601,则该帧不需要标记
自动保存:每次点击SAVE、NextImg、PrevImg后会自动保存当前帧的标记结果
保存目录为当前视频目录下Annotation下面,目前策略为逐帧保存,最后大家可以选择整合结果
支持模式切换: 点击左上角
model change
按钮,可以选择打标时是打标所有文件还是仅打标低置信度文件- 默认模式,打标低置信度文件
- 模式切换,打标所有文件
- 支持任意时间切换(但下标会置0)
- 当前模式在标题显示
自动跳转:NextImg、PrevImg会自动跳转下一个/上一个需要标记的数据帧
历史标注记忆:再次打开后会自动记录上一次保存的位置,继续标记 (根据Annotation文件夹内文件数量,建议不要跳跃标记)
清除当前标记记录,复位(只清楚当前一帧之前所有的操作,恢复最初状态)
在data文件夹下更新关节点名称和连接方式
辅助特性
标记注明:标记后的点置信度为0.6
显示像素值:鼠标悬停时可以显示当前帧像素
支持图片缩放:左下角ZoomIn,ZoomOut
鼠标悬停在点上面显示点名称:显示位置在右侧ClearAll下面会有提示
左上角显示当前文件名
标注方式
视频处理
使用ffmpeg将原始视频转为图片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33# python实现,需预先conda 下载 ffmpeg
import os
import cv2
import subprocess
import os.path as osp
def video_to_images(vid_file, img_folder=None, return_info=False):
# copied from vibe
if img_folder is None:
img_folder = osp.join('tmp/', osp.basename(vid_file).replace('.mp4', ''))
if osp.isdir(img_folder) and len(os.listdir(img_folder)) > 0:
img_shape = cv2.imread(osp.join(img_folder, '000001.png')).shape
return img_folder, len(os.listdir(img_folder)), img_shape
os.makedirs(img_folder, exist_ok=True)
command = ['ffmpeg',
'-i', vid_file,
'-f', 'image2',
'-v', 'error',
f'{img_folder}/%06d.png']
print(f'Running \"{" ".join(command)}\"')
subprocess.call(command)
print(f'Images saved to \"{img_folder}\"')
img_shape = cv2.imread(osp.join(img_folder, '000001.png')).shape
if return_info:
return img_folder, len(os.listdir(img_folder)), img_shape
else:
return img_folder
视频文件目录
打开目录应为如下格式
1
2
3
4
5
6
7
8
9openDir
---- rgb_images
----000001.png
----000002.png
----000003.png
----000004.png
----...
---- Annotation (自动创建,不用管它)
---- vitpose_raw.npy 关节点坐标,剔除眼部、耳部关节点的21维度OpenPose坐标 (理论上其他模式关节坐标也行,但代码可能要微调: N X 21 x 3
打开视频目录,选择上述根目录
自动打开图片
支持两种标注模式
- 对于界面已经有的点,点击选择点直接拖动(有可能会受到周围点干扰,出现情况较小)
- 可以参考image_list目录下operate1.mp4视频
- 对于界面没有的点,可以选择点添加
- 可以参考image_list目录下addpoint.mp4视频
- 对于界面已经有的点,点击选择点直接拖动(有可能会受到周围点干扰,出现情况较小)
切换
- 点击左侧Prev Image切换到上一帧,点击Next Image切换到下一帧,支持自动保存,但也可以选择自主保存
当完成最后一张图片标注后,在加载目录下生成annotations.npy保存整体标注结果