OpenCV实现手指识别:只要在空中移动手指就可以弹钢琴

Xsens动作捕捉 2022-10-08 17082


灵感

最近我拜访了我的表妹,她已经尝试学习钢琴有一段时间了。 然而由于疫情,她的老师不能外出,他们正在通过zoom会议练习。 那时我萌生了制作虚拟钢琴的想法,她的老师和她都可以用它来学习音乐。 想到这里,我在想,为什么不跳出键盘呢? 让我们尝试凭空创作音乐? 让我们的创意思维流动,进行这样的互动,让一个人只需在空中移动手就可以弹奏钢琴?! 那时我决定制作“Air Piano”。

技术说明

Air Piano 是一个融合计算机视觉和人机交互的项目。 为了制作 Air Piano,我使用了 Python 语言和 OpenCV 库。 它是一个开源的计算机视觉和机器学习软件库。

另一个帮助我们完成这个项目的重要库是 PyAutoGUI 库。 PyAutoGUI 允许您的 Python 脚本控制鼠标和键盘以自动与其他应用程序交互。 PyAutoGUI 有几个功能:移动鼠标并在其他应用程序的窗口中单击或键入,截屏等。

项目的流程:

第一步是捕获用户的视频流输入。在我们逐帧读取输入后,我们现在需要将 BGR 比例转换为 HSV 比例,以便我们可以更好地处理颜色。

为什么要转换为 HSV 色彩空间?简单的答案是,与 RGB 不同,HSV 将亮度或图像强度与色度或颜色信息分开。在计算机视觉中,您经常出于各种原因想要将颜色分量与强度分开,例如对光照变化的鲁棒性或去除阴影。

使用我们使用 HSV 标度创建的黑色蒙版检测手。为此,我选择戴一副黑色手套,因为检测肤色比较困难,并且会是的项目的泛化性变差。

检测到手后,我们找到轮廓,即我们手的边界。然后我们绘制一个凸包,以找到周围的凸多边形。从这个多边形中,我们使用凸度缺陷函数提取指尖。

什么是凸包?凸包,完全包围对象的最小 n 边凸多边形。

什么是凸面缺陷?轮廓与其凸包的任何偏差都称为凸性缺陷。

OpenCV实现手指识别:只要在空中移动手指就可以弹钢琴  第1张

这里还应用了一个过滤器来使用点之间的距离(即指尖和关节)来获取指尖,同时您也可以选择使用手指之间的角度来实现相同的效果。

在开始使用 PyAutoGUI 功能之前,让我们在框架上绘制钢琴键,这将是我们的“Air Paino Keys”。

最后一部分包括使用 PyAutoGUI 库,它允许您根据手部运动的坐标(准确地说是指尖)进行键盘操作。 现在当这个程序运行时,它会跟踪指尖在框架中的位置并自动按下键盘上提到的键。

这是我们将使用指尖控制的虚拟钢琴。

OpenCV实现手指识别:只要在空中移动手指就可以弹钢琴  第2张

以上就是“Air Piano”项目的详细技术说明,希望你能从中学到很多。 访问 Github 存储库并查看完整代码以获得更好的理解。
umar07/OpenCV-Projects/tree/main/Air-Piano

未来方向和用例

在类似的路线上开发,一整套乐器可以使用与上述相同的原理进行手势控制,从而为学习音乐创造一个非常互动的环境。 我们可以为这个项目添加更多实用程序并使用最先进的开发(例如 MediaPipe 库)。

作者:Umar Masud

The End