共计 1476 个字符,预计需要花费 4 分钟才能阅读完成。
背景与痛点
在肢体行为动作识别项目中,数据质量直接影响模型性能。常见痛点包括:

- 数据噪声:摄像头抖动、光照变化导致视频帧质量不稳定
- 标注不一致:多人协作时标注标准不统一(如关节定义差异)
- 效率瓶颈:传统手动标注工具无法处理大规模视频数据
技术选型
为什么选择 Anaconda?
- 预装 600+ 科学计算包(如 NumPy, OpenCV)
- 环境隔离避免依赖冲突
- Conda 包管理器简化库版本控制
为什么搭配 VSCode?
- 智能补全加速 Python/JSON 等文件编写
- 集成终端直接调用 conda 环境
- 插件生态(如 Python, Jupyter)支持交互式调试
核心实现
1. 数据收集
使用 OpenCV 捕获视频流并分帧存储:
import cv2
cap = cv2.VideoCapture(0) # 调用摄像头
frame_count = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret: break
# 保存为 0001.jpg, 0002.jpg...
cv2.imwrite(f"frames/{frame_count:04d}.jpg", frame)
frame_count += 1
cap.release()
2. 数据预处理
关键步骤:
- 降噪:高斯模糊减少高频噪声
- 归一化 :将像素值缩放到[0,1] 范围
- 背景消除:使用 MOG2 算法提取前景
# 示例:归一化处理
import numpy as np
def normalize_frame(frame):
normalized = frame.astype(np.float32) / 255.0
return np.clip(normalized, 0, 1)
3. 数据标注
推荐工具链:
- LabelImg:标注静态图像中的关节点
- CVAT:专业级视频标注工具
- 自定义脚本:将标注转为 COCO 格式
# 安装 LabelImg
conda install -c conda-forge labelimg
代码示例
关键点标注转 COCO 格式
import json
coco_template = {"info": {"description": "Custom Pose Dataset"},
"categories": [{"id": 1, "name": "person"}],
"images": [],
"annotations": []}
def add_annotation(image_id, keypoints):
coco_template["annotations"].append({
"image_id": image_id,
"category_id": 1,
"keypoints": keypoints,
"num_keypoints": len(keypoints)//3
})
性能与安全
效率优化
- 并行处理:用 Dask 加速视频分帧
- 增量存储:HDF5 格式替代独立图像文件
- 缓存机制:预处理结果持久化存储
隐私保护
- 数据脱敏:模糊人脸 / 可识别信息
- 加密存储:使用 AES 加密原始视频
- 访问控制:.gitignore 排除敏感数据
避坑指南
- 标注格式错误:验证 COCO 格式的 keypoints 数组长度是否为 3N(x,y,visibility)
- 内存溢出 :用
cv2.VideoCapture.set(cv2.CAP_PROP_BUFFERSIZE, 1)减少缓冲 - 路径问题 :使用
pathlib替代 os.path 处理跨平台路径
总结与思考
这套流程可扩展至:
- 手势识别:调整关节点定义
- 运动分析:增加时序标注工具
- 多视角融合:同步多个摄像头时间戳
建议下一步探索:
- 使用 MediaPipe 自动生成标注初稿
- 开发 Active Learning 标注工作流
- 尝试半监督学习减少标注需求
正文完
