灵感

最近我拜访了我的表妹,她已经尝试学习钢琴有一段时间了。 然而由于疫情,她的老师不能外出,他们正在通过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

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

  1. 基于 OpenCv 和 Python 的手指识别及追踪

    本文为 AI 研习社编译的技术博客,原标题 Finger Detection and Tracking using OpenCV and Python,作者为Jason Brownlee 详细代码参考 ...

  2. 基于OpenCV的数字识别系统

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 综述 2012年iOS应用商店中发布了一个名为FuelMate的G ...

  3. OpenCV车牌/数字识别

    opencv 数字识别 附完整代码 Opencv的应用之车牌识别       用的支持向量机 使用opencv进行数字识别       对学习还是有点帮助的 Tensorflow 实现 MNIST 手 ...

  4. 使用opencv作物件识别(一) —— 积分直方图加速HOG特征计算

    使用opencv作物件识别(一) -- 积分直方图加速HOG特征计算 博客分类: 图像识别.机器学习.数据挖掘 CC++C#  方向梯度直方图(Histograms of Oriented Gradi ...

  5. 2021-01-07 python opencv实现车牌识别 颜色定位

    python opencv实现车牌识别 颜色定位 主要代码参考https://blog.csdn.net/wzh191920/article/details/79589506 GitHub:https ...

  6. 怎样使用OpenCV进行人脸识别

    不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...

  7. Java使用OpenCV实现人脸识别

    通过OpenCV实现人脸识别,包括图片,视频,摄像头中人脸识别. 首先看一下效果(在网上随便找的一张图片): 下面开始说一下如何实现的: 第一步:  需要安装OpenCV 下载链接:https://o ...

  8. OpenCV场景文本识别的实例(附完整代码)

    OpenCV场景文本识别的实例 OpenCV场景文本识别的实例 OpenCV场景文本识别的实例 #include <iostream> #include <fstream>#i ...

  9. python使用opencv实现人脸识别系统

    1.首先安装过python环境,在这里就不过说    检测是否安装成功如下,在cmd中输入Python     2.安装numpy 现在开始安装numpy,打开cmd,输入pip install nu ...

最新文章

  1. 判断两个多边形相交的面积_聊聊3D模型组件—顶点,边,多边形
  2. Linux命令:sed
  3. Web前端到底需要学什么?应该怎么学?
  4. GridView 梆定一个实体类
  5. springcloud @EnableDiscoveryClient注解作用
  6. PHP学习笔记(六)
  7. web td不对齐_珍稀干货!阿里 Web 音视频开发趟坑指南
  8. 简单有趣的c语言小程序,一个有趣的小程序
  9. Linux网络 - 数据包的接收过程
  10. dede在发布文章时自动加上关键词链接
  11. 多线程3,线程池封装库
  12. API Monitor简介(API监控工具)
  13. word论文公式编号排版
  14. 计算机蓝屏原因原理,蓝屏炸弹
  15. AUTOCAD——直线命令
  16. 微信网页授权,以及如何在本地调试
  17. 深度学习的过拟合与欠拟合问题的介绍与解决方案
  18. 番茄社区多门店系统介绍
  19. mysql统计一年12月的数据
  20. 为什么每次用计算机算数都不对,Excel算出来的数,和计算器结果对不上?

热门文章

  1. 华为交换机路由器命令手册(企业级设备使用文档)
  2. 计算机系统实验:模型机(十六)另一篇?
  3. 伊宅购伊家田园带你了解行业动态,社区支持农业:中国农业新玩法!
  4. vue获取项目端口号_vue修改vue项目运行端口号的方法
  5. 纯干货!程序员的面试技巧~
  6. 剖析ViewState的作用
  7. 安防监控防雷+防雷工程综合应用解决方案
  8. 智慧党建/党员双报到/党建积分系统/智慧党建小程序/党建云平台
  9. [转] 分析优酷HTML5地址
  10. spring cloud gateway 格式化异常输出