版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第在Python中通过机器学习实现人体姿势估计目录什么是姿态估计?2D与3D姿态估计为姿态估计准备数据集创建姿势估计模型模型结果结论姿态检测是计算机视觉领域的一个活跃研究领域。你可以从字面上找到数百篇研究论文和几个试图解决姿势检测问题的模型。
之所以有如此多的机器学习爱好者被姿势估计所吸引,是因为它的应用范围很广,而且实用性很强。
在本文中,我们将介绍一种使用机器学习和Python中一些非常有用的库进行姿势检测和估计的应用。
什么是姿态估计?
姿态估计是一种跟踪人或物体运动的计算机视觉技术。这通常通过查找给定对象的关键点位置来执行。基于这些关键点,我们可以比较各种动作和姿势并得出见解。姿态估计在增强现实、动画、游戏和机器人领域得到了积极的应用。
目前有几种模型可以执行姿态估计。下面给出了一些姿势估计的方法:
1.Openpose
2.Posenet
3.Blazepose
4.DeepPose
5.Densepose
6.Deepcut
选择任何一种模型而不是另一种可能完全取决于应用程序。此外,运行时间、模型大小和易于实现等因素也可能是选择特定模型的各种原因。因此,最好从一开始就了解你的要求并相应地选择模型。
在本文中,我们将使用Blazepose检测人体姿势并提取关键点。该模型可以通过一个非常有用的库轻松实现,即众所周知的MediaPipe。
MediaPipe——MediaPipe是一个开源的跨平台框架,用于构建多模型机器学习管道。它可用于实现人脸检测、多手跟踪、头发分割、对象检测和跟踪等前沿模型。
BlazePoseDetector——大部分姿态检测依赖于由17个关键点组成的COCO拓扑结构,而Blaze姿态检测器预测33个人体关键点,包括躯干、手臂、腿部和面部。包含更多关键点对于特定领域姿势估计模型的成功应用是必要的,例如手、脸和脚。每个关键点都使用三个自由度以及可见性分数进行预测。BlazePose是亚毫秒模型,可用于实时应用,其精度优于大多数现有模型。该模型有两个版本:Blazeposelite和Blazeposefull,以提供速度和准确性之间的平衡。
Blaze姿势提供多种应用程序,包括健身和瑜伽追踪器。这些应用程序可以通过使用一个额外的分类器来实现,比如我们将在本文中构建的分类器。
你可以在此处了解有关BlazePoseDetector的更多信息:/2025/08/on-device-real-time-body-pose-tracking.html
2D与3D姿态估计
姿势估计可以在2D或3D中完成。2D姿态估计通过像素值预测图像中的关键点。而3D姿态估计是指预测关键点的三维空间排列作为其输出。
为姿态估计准备数据集
我们在上一节中了解到,人体姿势的关键点可以用来比较不同的姿势。在本节中,我们将使用MediaPipe库本身来准备数据集。我们将拍摄两个瑜伽姿势的图像,从中提取关键点并将它们存储在一个CSV文件中。
你可以通过此链接从Kaggle下载数据集
该数据集包含5个瑜伽姿势,但是,在本文中,我只采用了两个姿势。如果需要,你可以使用所有这些,程序将保持不变。
importmediapipeasmp
importcv2
importtime
importnumpyasnp
importpandasaspd
importos
mpPose=mp.solutions.pose
pose=mpPose.Pose()
mpDraw=mp.solutions.drawing_utils#Fordrawingkeypoints
points=mpPose.PoseLandmark#Landmarks
path="DATASET/TRAIN/plank"#enterdatasetpath
data=[]
forpinpoints:
x=str(p)[13:]
data.append(x+"_x")
data.append(x+"_y")
data.append(x+"_z")
data.append(x+"_vis")
data=pd.DataFrame(columns=data)#Emptydataset
在上面的代码片段中,我们首先导入了有助于创建数据集的必要库。然后在接下来的四行中,我们将导入提取关键点所需的模块及其绘制工具。
接下来,我们创建一个空的Pandas数据框并输入列。这里的列包括由Blaze姿态检测器检测到的33个关键点。每个关键点包含四个属性,即关键点的x和y坐标(从0到1归一化),z坐标表示以臀部为原点且与x的比例相同的地标深度,最后是可见度分数。可见性分数表示地标在图像中可见或不可见的概率。
count=0
forimginos.listdir(path):
temp=[]
img=cv2.imread(path+"/"+img)
imageWidth,imageHeight=img.shape[:2]
imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
blackie=np.zeros(img.shape)#Blankimage
results=cess(imgRGB)
ifresults.pose_landmarks:
#mpDraw.draw_landmarks(img,results.pose_landmarks,mpPose.POSE_CONNECTIONS)#drawlandmarksonimage
mpDraw.draw_landmarks(blackie,results.pose_landmarks,mpPose.POSE_CONNECTIONS)#drawlandmarksonblackie
landmarks=results.pose_landmarks.landmark
fori,jinzip(points,landmarks):
temp=temp+[j.x,j.y,j.z,j.visibility]
data.loc[count]=temp
count+=1
cv2.imshow("Image",img)
cv2.imshow("blackie",blackie)
cv2.waitKey(100)
data.to_csv("dataset3.csv")#savethedataasacsvfile
在上面的代码中,我们单独遍历姿势图像,使用Blaze姿势模型提取关键点并将它们存储在临时数组“temp”中。
迭代完成后,我们将这个临时数组作为新记录添加到我们的数据集中。你还可以使用MediaPipe本身中的绘图实用程序来查看这些地标。
在上面的代码中,我在图像以及空白图像“blackie”上绘制了这些地标,以仅关注Blaze姿势模型的结果。空白图像“blackie”的形状与给定图像的形状相同。
应该注意的一件事是,Blaze姿态模型采用RGB图像而不是BGR(由OpenCV读取)。
获得所有图像的关键点后,我们必须添加一个目标值,作为机器学习模型的标签。你可以将第一个姿势的目标值设为0,将另一个设为1。之后,我们可以将这些数据保存到CSV文件中,我们将在后续步骤中使用该文件创建机器学习模型。
你可以从上图中观察数据集的外观。
创建姿势估计模型
现在我们已经创建了我们的数据集,我们只需要选择一种机器学习算法来对姿势进行分类。在这一步中,我们将拍摄一张图像,运行blaze姿势模型(我们之前用于创建数据集)以获取该图像中人物的关键点,然后在该测试用例上运行我们的模型。
该模型有望以高置信度给出正确的结果。在本文中,我将使用sklearn库中的SVC(支持向量分类器)来执行分类任务。
fromsklearn.svmimportSVC
data=pd.read_csv("dataset3.csv")
X,Y=data.iloc[:,:132],data['target']
model=SVC(kernel='poly')
model.fit(X,Y)
mpPose=mp.solutions.pose
pose=mpPose.Pose()
mpDraw=mp.solutions.drawing_utils
path="enterimagepath"
img=cv2.imread(path)
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
results=cess(imgRGB)
ifresults.pose_landmarks:
landmarks=results.pose_landmarks.landmark
forjinlandmarks:
temp=temp+[j.x,j.y,j.z,j.visibility]
y=model.predict([temp])
ify==0:
asan="plank"
else:
asan="goddess"
print(asan)
cv2.putText(img,asan,(50,50),cv2.FONT_HERSHEY_SIMPLEX,1,(255,255,0),3)
cv2.imshow("image",img)
在上面的代码行中,我们首先从sklearn库中导入了SVC(支持向量分类器)。我们已经用目标变量作为Y标签训练了我们之前在SVC上构建的数据集。
然后我们读取输入图像并提取关键点,就像我们在创建数据集时所做的那样。
最后,我们输入临时变量并使用模型进行预测。现在可以使用简单的if-else条件检测姿势。
模型结果
从上面的图像中,你可以观察到模型已经正确地对姿势进行了分类。你还可以在右侧看到Blaze姿势模型检测到的姿势。
在第一张图片中,如果你仔细观察,一些关键点是不可见的,但姿势分类是正确的。由于Blaze姿态模型给出的关键点属性的可见性,这是可能的。
结论
姿势检测是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机构研究报告-Brand KPIs for laundry detergent 1 2 3 in Mexico-外文版培训课件
- 大豆垄三栽培模式实施技术指南
- 柴油微耕机安全操作技术指引
- 康养物资采购库存管理
- 水稻侧深施肥施肥技术规范
- 社区团购蔬菜配送服务标准
- 仪器设备日常维护保养操作指南
- 家政客户投诉处理应急响应方案
- 农产品绿色认证申请流程标准
- 门店消毒卫生检查执行标准
- 加油站施工施工组织设计方案
- 室内设计cad培训
- 六年级数学总复习立体图形名师公开课获奖课件百校联赛一等奖课件
- 2024年西藏自治区中考语文试题卷
- 汽车配件物流运输服务方案
- 英语专业四级英语写作讲解
- CTD申报资料撰写模板:模块三之3.2.S.4原料药的质量控制
- SP电液执行机构使用说明书
- 招标代理机构工作培训课件
- 电化学全套课件
- 红色旅游项目可行性研究报告
评论
0/150
提交评论