手指滑动控制系统全局音量的程序(中)

这次的目标是做出一个通过摄像头检测手指滑动,从而可以调整系统全局音量的程序

接着上一篇继续讲

功能实现

1.OpenCV的视频处理

在这里插入图片描述
0表示使用系统默认的摄像头
在这里插入图片描述
使用一个用久成立的循环,使视频中的每一帧(视频本质上多个静止的画面连续播放,利用人脑的视觉停留,制造出动态的效果)都会一直被读取进来

read 函数有两个返回值,第一个 ret 表示摄像头的状态,成功开启就是 1 否则是 0 , frame 就是画面图片

接下来,需要将颜色通道转换一下,因为OpenCV 里面默认的颜色通道是bgr ,而后续处理的时候,需要的是 rgb 的颜色通道

55 行就是利用机器学习库对图像进行处理了

2.画出并显示手指关节关键点

在这里插入图片描述
95 行和 96 行,使用 media pipe 自带的库函数,分别画出左右手的关节关键点,最后用 OpenCV 中 imshow 函数将这个图像显示出来

3.计算手指间的距离

在这里插入图片描述
首先需要获取其中一个关节节点的三维空间坐标,在说这个之前,我应该先把传入函数的参数先列出来,没错,就是下面这一行

在这里插入图片描述
这里的这个三维空间的坐标,从输出的结果上来看,有点像一个字典,x y z 分别对应上一个值,形成键值对,但是用 type 函数进行检验的时候发现却不是这么回事,出来的结果是一个名字很长的类型,查阅官方文档之后才发现,需要使用像上图函数中的调用方式来进行调用,这个调用方式有点像类成员进行调用,这也可以同时验证了,这个用来存储 x y z 坐标的这个东西是对象的一种

那么,该选择哪两个点的坐标呢?只要能明显地计算出在手指张开和闭合时的相对距离就行,我选择的是大拇指和食指的最远端,也就是 8 号 和 4 号位,各个手指关节位点的索引(上图函数中,中括号内使用的名字与关节位点的对应如下图,这个是官方网站里面的图)

在这里插入图片描述

现在,坐标已经获取了,该怎么进行计算呢?

这就是高中数学知识了,计算两个点的坐标,在高中数学中常见的是平面中的计算,也就是 sqrt ( ( x1 - x2 ) ^ 2 + ( y1 - y2 ) ^ 2 ) ,网上可以找得到公式,现在是三维空间坐标,只需要在 y 后面加入 ( z1 - z2 ) ^ 2 即可

4.系统音量的控制

具体的实现,请参考这里:
https://www.zhihu.com/question/50565812/answer/2254577839

这里面有完整的程序

5. media pipe 的开头那几行

在这里插入图片描述

在官方文档里面都能找得到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值