灵感
最近我拜访了我的表妹,她已经尝试学习钢琴有一段时间了。然而由于疫情,她的老师不能外出,他们正在通过zoom会议练习。那时我萌生了制作虚拟钢琴的想法,她的老师和她都可以用它来学习音乐。想到这里,我在想,为什么不跳出键盘呢?让我们尝试凭空创作音乐?让我们的创意思维流动,进行这样的互动,让一个人只需在空中移动手就可以弹奏钢琴?!那时我决定制作“Air Piano”。
技术说明
Air Piano 是一个融合计算机视觉和人机交互的项目。为了制作 Air Piano,我使用了 Python 语言和 OpenCV 库。它是一个开源的计算机视觉和机器学习软件库。
另一个帮助我们完成这个项目的重要库是 PyAutoGUI 库。PyAutoGUI 允许您的 Python 脚本控制鼠标和键盘以自动与其他应用程序交互。PyAutoGUI 有几个功能:移动鼠标并在其他应用程序的窗口中单击或键入,截屏等。
项目的流程:
第一步是捕获用户的视频流输入。在我们逐帧读取输入后,我们现在需要将 BGR 比例转换为 HSV 比例,以便我们可以更好地处理颜色。
为什么要转换为 HSV 色彩空间?简单的答案是,与 RGB 不同,HSV 将亮度或图像强度与色度或颜色信息分开。在计算机视觉中,您经常出于各种原因想要将颜色分量与强度分开,例如对光照变化的鲁棒性或去除阴影。
使用我们使用 HSV 标度创建的黑色蒙版检测手。为此,我选择戴一副黑色手套,因为检测肤色比较困难,并且会是的项目的泛化性变差。
检测到手后,我们找到轮廓,即我们手的边界。然后我们绘制一个凸包,以找到周围的凸多边形。从这个多边形中,我们使用凸度缺陷函数提取指尖。
什么是凸包?凸包,完全包围对象的最小 n 边凸多边形。
什么是凸面缺陷?轮廓与其凸包的任何偏差都称为凸性缺陷。
这里还应用了一个过滤器来使用点之间的距离(即指尖和关节)来获取指尖,同时您也可以选择使用手指之间的角度来实现相同的效果。
在开始使用 PyAutoGUI 功能之前,让我们在框架上绘制钢琴键,这将是我们的“Air Paino Keys”。
最后一部分包括使用 PyAutoGUI 库,它允许您根据手部运动的坐标(准确地说是指尖)进行键盘操作。现在当这个程序运行时,它会跟踪指尖在框架中的位置并自动按下键盘上提到的键。
这是我们将使用指尖控制的虚拟钢琴。
以上就是“Air Piano”项目的详细技术说明,希望你能从中学到很多。访问 Github 存储库并查看完整代码以获得更好的理解。https://github.com/umar07/OpenCV-Projects/tree/main/Air-Piano
未来方向和用例
在类似的路线上开发,一整套乐器可以使用与上述相同的原理进行手势控制,从而为学习音乐创造一个非常互动的环境。我们可以为这个项目添加更多实用程序并使用最先进的开发(例如 MediaPipe 库)。
作者:Umar Masud
原文地址:https://towardsdatascience.com/air-piano-using-opencv-and-python-298cb22097d9