基于SDPose-Wholebody的Python爬虫数据增强:自动标注视频姿态数据
基于SDPose-Wholebody的Python爬虫数据增强自动标注视频姿态数据1. 引言你有没有遇到过这样的困扰想要训练一个姿态识别模型却苦于没有足够的标注数据手动标注视频中的每一帧不仅耗时耗力而且容易出错。今天我要分享的这套方案正好能解决这个问题。通过Python爬虫获取网络视频资源再用SDPose-Wholebody这个强大的133关键点姿态估计模型进行自动标注你就能快速构建高质量的训练数据集。整个过程完全自动化不需要人工干预大大提升了数据准备的效率。本文将手把手带你完成整个流程从视频采集到标注生成让你轻松获得成千上万的标注样本。2. 环境准备与工具安装首先我们需要搭建工作环境。这个方案主要依赖几个核心工具# 创建虚拟环境 conda create -n pose_annotation python3.10 conda activate pose_annotation # 安装基础依赖 pip install opencv-python numpy requests beautifulsoup4 pip install torch torchvision对于视频爬虫部分我们使用requests和BeautifulSoup来抓取和解析网页内容import requests from bs4 import BeautifulSoup import cv2 import os # 创建数据目录 os.makedirs(videos, exist_okTrue) os.makedirs(frames, exist_okTrue) os.makedirs(annotations, exist_okTrue)接下来安装SDPose-Wholebody相关的依赖# 克隆SDPose仓库 git clone https://github.com/t-s-liang/SDPose-OOD.git cd SDPose-OOD # 安装MMPose和相关依赖 pip install -r requirements.txt # 下载预训练模型 wget https://huggingface.co/teemosliang/SDPose-Wholebody/resolve/main/sdpose_wholebody.pth -P models/3. 视频爬虫与帧提取优化3.1 智能视频爬虫设计写爬虫时最头疼的就是遇到反爬机制。这里分享几个实用的技巧def download_video(url, save_path): headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36, Referer: https://www.example.com/, Accept: video/webm,video/ogg,video/*;q0.9,application/octet-stream;q0.8, } try: response requests.get(url, headersheaders, streamTrue, timeout30) if response.status_code 200: with open(save_path, wb) as f: for chunk in response.iter_content(chunk_size8192): f.write(chunk) return True except Exception as e: print(f下载失败: {e}) return False3.2 高效帧提取策略直接处理整个视频很耗资源我们需要智能抽帧def extract_key_frames(video_path, output_dir, interval10): cap cv2.VideoCapture(video_path) frame_count 0 saved_count 0 while True: ret, frame cap.read() if not ret: break if frame_count % interval 0: # 只保存有关键人物的帧 if has_human_subject(frame): frame_path os.path.join(output_dir, fframe_{saved_count:06d}.jpg) cv2.imwrite(frame_path, frame) saved_count 1 frame_count 1 cap.release() return saved_count def has_human_subject(frame): # 简单的基于运动或颜色的检测 gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) edges cv2.Canny(gray, 100, 200) return np.sum(edges) 10000 # 阈值可根据实际情况调整4. 批量姿态估计与加速技巧4.1 SDPose-Wholebody快速部署SDPose-Wholebody支持133个关键点包括身体、手部、面部和脚部比传统的17点模型详细得多from mmpose.apis import inference_topdown, init_model from mmpose.structures import PoseDataSample # 初始化模型 model init_model( configconfigs/sdpose_wholebody.py, checkpointmodels/sdpose_wholebody.pth, devicecuda:0 # 使用GPU加速 ) def batch_pose_estimation(image_paths): results [] for img_path in image_paths: # 批量推理 result inference_topdown(model, img_path) results.append(result) return results4.2 推理加速技巧处理大量帧时这些优化技巧能显著提升速度# 使用批量处理 def process_batch(frames_batch): # 统一调整尺寸减少计算量 resized_batch [cv2.resize(frame, (1024, 768)) for frame in frames_batch] # 批量推理 with torch.no_grad(): results model(resized_batch) return results # 使用多进程 from multiprocessing import Pool def parallel_processing(frame_paths, num_workers4): with Pool(num_workers) as p: results p.map(process_single_frame, frame_paths) return results5. COCO格式标注文件生成5.1 标注数据结构设计COCO格式是业界标准方便后续模型训练def create_coco_template(): coco_template { info: { description: Auto-generated pose dataset, version: 1.0, year: 2024, contributor: SDPose-Wholebody Auto Annotation, date_created: 2024-01-01 }, licenses: [{id: 1, name: Academic Use}], images: [], annotations: [], categories: [{ id: 1, name: person, keypoints: [...] # 133个关键点名称 }] } return coco_template5.2 自动标注生成将SDPose的输出转换为COCO格式def convert_to_coco_format(pose_results, image_info): annotations [] image_id image_info[id] for i, result in enumerate(pose_results): keypoints result.pred_instances.keypoints[0] # 获取第一个人的关键点 scores result.pred_instances.keypoint_scores[0] annotation { id: len(annotations) 1, image_id: image_id, category_id: 1, keypoints: keypoints.flatten().tolist(), num_keypoints: int(np.sum(scores 0.3)), # 只统计置信度高的点 area: calculate_bbox_area(keypoints), bbox: get_bbox_from_keypoints(keypoints), iscrowd: 0 } annotations.append(annotation) return annotations def get_bbox_from_keypoints(keypoints): # 从关键点计算边界框 x_coords keypoints[:, 0] y_coords keypoints[:, 1] x_min, x_max np.min(x_coords), np.max(x_coords) y_min, y_max np.min(y_coords), np.max(y_coords) width x_max - x_min height y_max - y_min # 添加一些边距 margin 20 return [x_min - margin, y_min - margin, width 2*margin, height 2*margin]6. 完整流程整合与实战演示6.1 端到端自动化流水线现在我们把所有步骤整合起来def auto_annotation_pipeline(video_urls, output_dir): # 1. 下载视频 video_paths [] for url in video_urls: path download_video(url, os.path.join(output_dir, videos)) if path: video_paths.append(path) # 2. 提取关键帧 all_frames [] for video_path in video_paths: frames extract_key_frames(video_path, os.path.join(output_dir, frames)) all_frames.extend(frames) # 3. 批量姿态估计 results batch_pose_estimation(all_frames) # 4. 生成COCO标注 coco_data create_coco_template() for i, (frame_path, result) in enumerate(zip(all_frames, results)): # 添加图像信息 image_info { id: i, file_name: os.path.basename(frame_path), width: 1024, height: 768 } coco_data[images].append(image_info) # 添加标注信息 annotations convert_to_coco_format(result, image_info) coco_data[annotations].extend(annotations) # 5. 保存标注文件 with open(os.path.join(output_dir, annotations/instances_train.json), w) as f: json.dump(coco_data, f, indent2) print(f标注完成共处理 {len(all_frames)} 帧图像)6.2 实际效果验证让我们看看生成的数据质量def validate_annotations(annotation_path, frames_dir): with open(annotation_path, r) as f: coco_data json.load(f) # 随机抽样检查 sample_indices random.sample(range(len(coco_data[images])), min(5, len(coco_data[images]))) for idx in sample_indices: img_info coco_data[images][idx] img_path os.path.join(frames_dir, img_info[file_name]) # 可视化检查 img cv2.imread(img_path) annotations [ann for ann in coco_data[annotations] if ann[image_id] img_info[id]] for ann in annotations: keypoints np.array(ann[keypoints]).reshape(-1, 3) for x, y, score in keypoints: if score 0.3: # 只绘制高置信度点 cv2.circle(img, (int(x), int(y)), 3, (0, 255, 0), -1) cv2.imshow(Validation, img) cv2.waitKey(1000) cv2.destroyAllWindows()7. 总结这套基于SDPose-Wholebody的自动标注方案确实能大大提升数据准备的效率。实际使用下来处理一个小时的视频大概能生成几千个高质量的标注样本而且关键点标注的准确度相当不错。需要注意的是虽然自动化程度很高但还是建议对生成的数据进行抽样检查特别是对于特殊姿势或遮挡较多的情况。有时候模型可能会漏检或者误检这时候可以适当调整置信度阈值或者增加后处理步骤。如果你想要更好的效果可以考虑用少量人工标注的数据对SDPose进行微调这样在特定场景下的表现会更好。另外对于不同的应用场景可能需要对关键点的选择进行调整比如健身动作识别可能更关注关节角度而舞蹈动作可能更关注整体姿态。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻

小白必看!Pi0具身智能镜像部署与测试完整指南

小白必看!Pi0具身智能镜像部署与测试完整指南

小白必看!Pi0具身智能镜像部署与测试完整指南 关键词:Pi0具身智能、镜像部署、机器人控制、动作生成、AI测试 摘要:本文为完全新手提供Pi0具身智能镜像的完整部署与测试指南。从零开始讲解如何快速部署镜像、访问测试界面、执行功能验证&…

2026/7/5 1:50:19 阅读更多 →
Lychee-rerank-mm在教育资源检索中的应用:课件与讲解视频智能匹配

Lychee-rerank-mm在教育资源检索中的应用:课件与讲解视频智能匹配

Lychee-rerank-mm在教育资源检索中的应用:课件与讲解视频智能匹配 1. 引言 你有没有遇到过这样的情况:手头有一堆教学课件,想要找到对应的讲解视频,却像大海捞针一样困难?或者作为一名在线教育平台的内容运营人员&am…

2026/5/17 5:26:08 阅读更多 →
实用指南:FLUX.2-Klein-9B中文提示词编写技巧

实用指南:FLUX.2-Klein-9B中文提示词编写技巧

实用指南:FLUX.2-Klein-9B中文提示词编写技巧 1. 为什么提示词对FLUX.2-Klein-9B如此重要 FLUX.2-Klein-9B模型采用了Qwen-3.8B文本编码器,对中文提示词的理解能力相当出色。但就像和一个创意伙伴合作一样,你说的越清楚,它给你的…

2026/5/17 5:26:06 阅读更多 →

最新新闻

符合出口标准的胡萝卜种子如何挑选抗逆品种?2026 种植采购实操指南

符合出口标准的胡萝卜种子如何挑选抗逆品种?2026 种植采购实操指南

很多从事胡萝卜规模化种植,特别是瞄准出口市场的技术负责人和种植户,经常面临一个核心困境:如何在海量的种子品种中,精准筛选出兼具抗逆性、商品性和高产潜力的品种,并构建一套可复制的稳产方案?市面上的营…

2026/7/5 3:04:55 阅读更多 →
大气散射模型 OpenCV 4.8 去雾实战:单张图像 0.5 秒内透射率图估计

大气散射模型 OpenCV 4.8 去雾实战:单张图像 0.5 秒内透射率图估计

基于暗通道先验的实时去雾算法:OpenCV 4.8 工程实现详解清晨的浓雾常常让摄影作品失去应有的色彩与细节,而计算机视觉领域的去雾算法正是解决这一问题的利器。本文将带您深入浅出地实现一个基于暗通道先验的高效去雾系统,仅用不到0.5秒即可完…

2026/7/5 3:04:55 阅读更多 →
靠谱的区域教育一体化管理平台哪个排名高

靠谱的区域教育一体化管理平台哪个排名高

在当今信息化时代,教育行业的数字化转型已经成为必然趋势。区域教育一体化管理平台作为提升教育管理水平、优化教育资源配置的重要工具,受到了越来越多教育机构的关注。然而,在众多的教育管理平台中,如何选择一个既可靠又高效的平…

2026/7/5 3:04:55 阅读更多 →
多重共线性实战指南:识别、归因与工程化解法

多重共线性实战指南:识别、归因与工程化解法

1. 项目概述:为什么多重共线性不是“错误”,而是数据在说话你刚跑完一个线性回归模型,R高达0.92,F检验p值小于0.001,一切看起来都很漂亮——直到你扫了一眼系数表:某个自变量的系数是3.7,标准误…

2026/7/5 3:02:54 阅读更多 →
云原生技术28-K8s排障实战:20个常见问题的快速定位与解决,从CrashLoopBackOff到Running的完整指南

云原生技术28-K8s排障实战:20个常见问题的快速定位与解决,从CrashLoopBackOff到Running的完整指南

1、AI程序员系列文章 2、AI面试系列文章 3、AI编程系列文章 目录 排障思维:从"盲人摸象"到"精准定位" 2.1 自上而下 vs 自下而上 2.2 假设验证法 2.3 二分法定位 Pod问题:四大金刚的"病历本" 3.1 CrashLoopBackOff&…

2026/7/5 3:00:53 阅读更多 →
Codex 实战:AI 编程助手接入真实项目,用真实案例讲清边界

Codex 实战:AI 编程助手接入真实项目,用真实案例讲清边界

聊《Codex 实战:AI 编程助手接入真实项目,用真实案例讲清边界》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要这篇面向想用 AI 提升研发效率的开发者和技术负责人,但不会把“…

2026/7/5 3:00:53 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻