OpenCV实现手指识别:只要在空中移动手指就可以弹钢琴!
灵感
最近我拜访了我的表妹,她已经尝试学习钢琴有一段时间了。 然而由于疫情,她的老师不能外出,他们正在通过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实现手指识别:只要在空中移动手指就可以弹钢琴!相关推荐
- 基于 OpenCv 和 Python 的手指识别及追踪
本文为 AI 研习社编译的技术博客,原标题 Finger Detection and Tracking using OpenCV and Python,作者为Jason Brownlee 详细代码参考 ...
- 基于OpenCV的数字识别系统
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 综述 2012年iOS应用商店中发布了一个名为FuelMate的G ...
- OpenCV车牌/数字识别
opencv 数字识别 附完整代码 Opencv的应用之车牌识别 用的支持向量机 使用opencv进行数字识别 对学习还是有点帮助的 Tensorflow 实现 MNIST 手 ...
- 使用opencv作物件识别(一) —— 积分直方图加速HOG特征计算
使用opencv作物件识别(一) -- 积分直方图加速HOG特征计算 博客分类: 图像识别.机器学习.数据挖掘 CC++C# 方向梯度直方图(Histograms of Oriented Gradi ...
- 2021-01-07 python opencv实现车牌识别 颜色定位
python opencv实现车牌识别 颜色定位 主要代码参考https://blog.csdn.net/wzh191920/article/details/79589506 GitHub:https ...
- 怎样使用OpenCV进行人脸识别
不断维护的地址:http://plzcoding.com/face-recognition-with-opencv/ 怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Re ...
- Java使用OpenCV实现人脸识别
通过OpenCV实现人脸识别,包括图片,视频,摄像头中人脸识别. 首先看一下效果(在网上随便找的一张图片): 下面开始说一下如何实现的: 第一步: 需要安装OpenCV 下载链接:https://o ...
- OpenCV场景文本识别的实例(附完整代码)
OpenCV场景文本识别的实例 OpenCV场景文本识别的实例 OpenCV场景文本识别的实例 #include <iostream> #include <fstream>#i ...
- python使用opencv实现人脸识别系统
1.首先安装过python环境,在这里就不过说 检测是否安装成功如下,在cmd中输入Python 2.安装numpy 现在开始安装numpy,打开cmd,输入pip install nu ...
最新文章
- 判断两个多边形相交的面积_聊聊3D模型组件—顶点,边,多边形
- Linux命令:sed
- Web前端到底需要学什么?应该怎么学?
- GridView 梆定一个实体类
- springcloud @EnableDiscoveryClient注解作用
- PHP学习笔记(六)
- web td不对齐_珍稀干货!阿里 Web 音视频开发趟坑指南
- 简单有趣的c语言小程序,一个有趣的小程序
- Linux网络 - 数据包的接收过程
- dede在发布文章时自动加上关键词链接
- 多线程3,线程池封装库
- API Monitor简介(API监控工具)
- word论文公式编号排版
- 计算机蓝屏原因原理,蓝屏炸弹
- AUTOCAD——直线命令
- 微信网页授权,以及如何在本地调试
- 深度学习的过拟合与欠拟合问题的介绍与解决方案
- 番茄社区多门店系统介绍
- mysql统计一年12月的数据
- 为什么每次用计算机算数都不对,Excel算出来的数,和计算器结果对不上?