opencv运动目标检测,opencv操作
2022年奥运会如期举行,不正确运动的风险在增加。人体姿态估计是计算机视觉领域的一个重要问题。接下来,本文将介绍使用OpenCV检测运动员姿势的功能。有兴趣的朋友来看看吧。
00-1010数据集具体步骤第一步:需求收集(模型权重)并加载网络第二步:读取图像并准备输入网络第三步:进行预测并分析关键点第四步:绘制骨架如今,运动的热潮日益盛行。同样,以错误的方式运动的风险也在增加。有时会造成严重伤害。考虑到这些原因,本文提出了通过分析运动员的关节运动来帮助运动员纠正姿势的解决方案。
人体姿态估计是计算机视觉领域的一个重要问题。其算法有助于定位手腕、脚踝、膝盖等部位。这样做是为了使用深度学习和卷积神经网络的概念来提供个性化的运动训练体验。特别是对于体育活动,训练质量很大程度上取决于图像或视频序列中人体姿态的正确性。
从图像或视频序列中检测运动员的姿态
目录
选择正确的数据集对结果产生适当的影响也是必要的。在这个姿态检测中,模型在两个不同的数据集上进行预训练,即COCO关键点数据集和MPII人体姿态数据集。
1. COCO:可可关键点数据集是一个用于许多人的2D姿势估计数据集,它包含从Flickr收集的图像。迄今为止,COCO是最大的2D姿态估计数据集,它被视为测试2D姿态估计算法的基准。COCO模型有18个分类。COCO输出格式:鼻子—0,脖子—1,右肩—2,右肘—3,右腕—4,左肩—5,左肘—6,左腕—7,右臀—8,右膝—9,右踝—10,左臀—11,左膝—12,左。
2. MPII: MPII人体姿势数据集是一个2D姿势估计数据集,它包含了从Youtube视频中收集的近500种不同的人体活动。MPII是第一个包含各种姿势范围的数据集,也是第一个在2014年发起2D姿势估计挑战的数据集。MPII模型输出15点。MPII输出格式:头—0,颈—1,右肩—2,右肘—3,右腕—4,左肩—5,左肘—6,左腕—7,右臀—8,右膝—9,右踝—10,左臀—11,左膝—12,左。
这些点是由卷积神经网络(CNN)对数据集进行处理和综合训练时产生的。
数据集
具体步骤
训练有素的模型需要加载到OpenCV中。这些模型是在Caffe深度学习框架上训练的。Caffemodel包含两个文件,即。prototxt文件和。caffe模型文件。
的。prototxt文件指定了神经网络的架构。的。caffemodel文件存储训练模型的权重。然后我们将这两个文件加载到网络中。
#指定两个文件的路径
proto file= pose/MPI/pose _ deploy _ line vec _ faster _ 4 _ stages . proto txt
weights file= pose/MPI/pose _ ITER _ 160000 . caffemodel
#将网络读入内存
net=cv2 . dnn . readnetfromcaffe(proto file,weightsFile)
步骤1:需求收集(模型权重)和负载网络
首先,我们需要使用blobFromImage函数将图像从OpenCV格式转换为Caffe blob格式,这样就可以将它作为输入输入到网络中。这些参数
将在blobFromImage函数中提供。由于OpenCV和Caffe都使用BGR格式,因此无需交换R和B通道。
# Read image
步骤3:做出预测并解析关键点
一旦将图像传递到模型,就可以使用OpenCV中DNN类的正向方法进行预测,该方法通过网络进行正向传递,这只是说它正在进行预测的另一种方式。
output = net.forward()
输出为4D矩阵:
第一个维度是图片ID(如果您将多个图片传递到网络)。
第二个维度指示关键点的索引。该模型会生成置信度图(在图像上的概率分布,表示每个像素处关节位置的置信度)和所有已连接的零件亲和度图。对于COCO模型,它由57个部分组成-18个关键点置信度图+ 1个背景+ 19 * 2个部分亲和度图。同样,对于MPI,它会产生44点。我们将仅使用与关键点相对应的前几个点。
第三维是输出图的高度。
第四个维度是输出图的宽度。
然后,我们检查图像中是否存在每个关键点。我们通过找到关键点的置信度图的最大值来获得关键点的位置。我们还使用阈值来减少错误检测。
置信度图
一旦检测到关键点,我们便将其绘制在图像上。
H = out.shape[2] W = out.shape[3] # Empty list to store the detected keypoints points = [] for i in range(len()): # confidence map of corresponding bodys part. probMap = output[0, i, :, :] # Find global maxima of the probMap. minVal, prob, minLoc, point = cv2.minMaxLoc(probMap) # Scale the point to fit on the original image x = (frameWidth * point[0]) / W y = (frameHeight * point[1]) / H if prob > threshold : cv2.circle(frame, (int(x), int(y)), 15, (0, 255, 255), thickness=-1, lineType=cv.FILLED) cv2.putText(frame, "{}".format(i), (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, 1.4, (0, 0, 255), 3, lineType=cv2.LINE_AA) # Add the point to the list if the probability is greater than the threshold points.append((int(x), int(y))) else : points.append(None) cv2.imshow("Output-Keypoints",frame) cv2.waitKey(0) cv2.destroyAllWindows()
步骤4:绘制骨架
由于我们已经绘制了关键点,因此我们现在只需将两对连接即可绘制骨架。
for pair in POSE_PAIRS: partA = pair[0] partB = pair[1] if points[partA] and points[partB]: cv2.line(frameCopy, points[partA], points[partB], (0, 255, 0), 3)
结果
上面显示的输出向我们显示了运动员在特定时刻的准确姿势。下面是视频的检测结果。
项目源码:https://github.com/ManaliSeth/Athlete-Pose-Detection
到此这篇关于使用OpenCV对运动员的姿势进行检测的文章就介绍到这了,更多相关OpenCV运动员姿势检测内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。