​使用Mediapipe对图像进行手部地标检测-600学习网

600学习网终身会员188,所有资源无秘无压缩-购买会员

总结

在本文中,我们将使用深度库(即Mediapipe)作为基本库,并使用计算机视觉预处理的其他CV2库来创建手部地标检测模型。市场上有很多关于这个问题的用例,例如与业务相关的虚拟现实和游戏部分的实时体验。

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

行业使用案例

1.智能家居:这是计算机视觉的现代使用案例之一。人们使用智能家居来过更舒适的生活,这就是为什么智能家居不再是一个利基领域,但它也在向普通家庭传播。

2.智能电视:我们经常看到这样的用例。您可以使用手势更改音量.频道等。

3.游戏:为了获得真实体验,这项技术越来越多地融入到互动游戏中。

让我们构建我们的手检测模型

导入库

在这里,我们将导入整个管道中所需的所有库。

导入cv2

将numpy导入为np

将mediapipe导入为mp

将matplotlib.pyplot导入为plt

使用Mediapipe初始化手的地标检测模型

第一步是使用有效参数初始化模型。无论我们使用什么检测技术,它都可以是Mediapipe或Yolo。初始化模型很重要。遵循同样的原则。我们将遵循所有给定步骤:

#第一步是初始化Hands类并将其存储在变量中

mp_手=mp.solutions.hands

#现在第二步是设置指针功能,该功能将保持地标点

hands=mp_hands。hands(静态_图像_模式=True,最大_num_手=2,最小_检测_置信度=0.3)

#最后一步是在图像上设置手标志的绘制功能

mp_drawing=mp.solutions.drawing_utils

代码分解:

1.首先,使用mp.solutions。hands初始化变量mphands。然后使用相同的变量通过mp为hands设置函数。解决。手。手()。

2.到目前为止,我们已经了解了手模型初始化的结构。现在让我们深入研究函数中使用的参数手。

·Static _image _mode:此参数将布尔值作为其有效值,即可以为true或false。处理视频流时,默认条件为False,这意味着它将减少处理延迟,也就是说,它将继续关注特定的手并定位同一只手,直到它跟踪的手消失。当我们必须在实时流或视频中检测手时,这可能是有益的。根据我们的要求,我们必须检测图像上的地标,因此我们将该值设置为True。

·Max_num_hands:此参数表示模型在实例中检测到的最大手数。默认情况下,该值为2,这也是有意义的。虽然我们可以改变它,但我们希望至少检测到一只手。

·Min_detection_confidence:它提供置信水平的阈值。最小检测置信度的理想范围为[0.0,1.0]。默认情况下,它保持在0.5,这意味着如果置信度小于50%,则在输出图像中不会检测到手。

最后,我们将使用mp.solutions。drawing_utils,它将负责绘制输出图像上的所有手标志。这些地标由我们的Hands功能检测。

读取图像

这里,我们将首先使用cv2.imread()读取要执行手部检测的图像,并使用matplotlib库显示特定的输入图像。

#读取我们将对其执行检测的样本图像

sample_img=cv2.imread(‘媒体/sample.jpg’)

#这里我们指定了图形的大小,即10-高度10-宽度。

plt.figure(图=〔10,10〕)

#这里我们将显示示例图像作为输出。

plt.title(“样本图像”)plt.轴(“关闭”)plt.imshow(示例_ img〔:,::-1〕)plt.show()

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

执行手标志检测

因此,现在我们已经初始化了手部检测模型,下一步将处理输入图像上的手部地标检测,并使用上述初始化模型在图像上绘制所有21个地标。我们将完成以下步骤。

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

结果=hands.process(cv2.cvtColor(样本_img,cv2.COLOR_BGR2RGB))

如果结果。多个手标志:

对于手牌不,手牌在枚举(results.multi-手牌

印刷品(‘)

对于范围(2)中的i:

打印(f’{mp}hands.HandLandmark(i).name}:’)

print(f’{hand_landmarks。landmark〔mp_hands。HandLandmark(i).value〕}’)

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

代码分解:

1.首先,我们使用Mediapipe库中的process函数将手标志检测结果存储在变量结果中。同时,我们将图像从BGR格式转换为RGB格式。

2.进入下一步时,我们将首先检查一些验证,以查看是否检测到点,即变量结果应存储一些结果。

3.如果是,我们将遍历图像中检测到手标志的所有点。

4.现在在另一个循环中,我们可以看到只有两次迭代,因为我们只想显示手的两个地标。

5.最后,我们将根据需要打印出所有检测到的和过滤过的地标。

通过上述处理,我们发现所有检测到的地标都被归一化为一个共同的尺度。但现在对于客户端来说,这些缩放点是不相关的,因此我们将这些地标恢复到其原始状态。

图片高度,图片宽度,样本形状

如果结果。多个手标志:

对于手_否,枚举中的手_界标(results.multi-手_界碑):

打印(f’手号:{手号+1}’)

印刷品(‘)

对于范围(2)中的i:

打印(f’{mp}hands.HandLandmark(i).name}:’)

打印(f’x:{hand_landmarks.landmarks[mp_hands_hand landmark(i).value].x*image_width}’)

print(f’y:{hand_landmarks.landmarks[mp_hands.HandLandmark(i).value].y*image_height}’)

print(f’z:{hand_landmarks.landmarks〔mp_hands.HandLandmark(i).value〕.z*image_width}n’)

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

代码分解:

我们只需要在这里执行一个额外的步骤,也就是说,我们将从我们定义的示例图像中获得图像的原始宽度和高度,然后所有步骤都将与我们之前所做的相同,唯一的区别是现在没有标点符号的特殊缩放。

在图像上绘制地标

由于我们已经从上述预处理中获得了手部地标,现在是时候执行我们的最后一步了,即在图像上绘制点,以便我们可以直观地看到我们的手部地标记检测模型是如何实现的。

img_copy=sample_img.copy()

如果结果。多个手标志:

对于手_否,枚举中的手_界标(results.multi-手_界碑):

mp_drawing。draw_地标(图像=img_副本,地标_列表=手_地标记

连接=mp_手。手_连接)

图=plt.figure(图=〔10,10〕)

plt.title(“合成图像”)plt.轴(“关闭”)plt.imshow(img _副本〔:,:,:-1〕)plt.show()

输出:

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

代码分解:

1.首先,我们将创建原始图像的副本。这一步是出于安全目的,因为我们不想失去图像的原创姓。

2.然后我们将处理之前完成的验证工作。

3.然后我们将手拿着手走过每个地标。

4.最后,借助mp_draw_landmarks函数,我们将在图像上绘制地标。

5.是时候使用matplotlib绘制图像了。首先,我们将给出图形大小(这里是宽度-10和高度-10)。然后,最后,我们将画画。imshow将BGR格式转换为RGB格式后,图像将使用该函数,因为它对RGB格式更有意义。

结论

在整个流水线中,我们首先初始化模型,然后读取图像,查看输入图像,然后执行预处理。我们减少了地标,但这些点与用户无关,因此我们将它们恢复到原始状态,最后我们将在图像上绘制地标。

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站,本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
600学习网 » ​使用Mediapipe对图像进行手部地标检测-600学习网