hello,大家好,这次给大家带来的是一个隔空输入的小demo:通过摄像头识别手势,判断手势位置然后输出的相关的文本并且实时展示。并且有清除文本的功能。
之所以想做这个东西,是看到了油管上"Murtaza's Workshop - Robotics and AI"视频,感觉他的视频都很有意思,他的视频很多是关于opencv的一些好玩的应用。看了几个他的视频之后,学习了一些知识,然后做了自己的一个隔空输入脚本。
翻译翻译,什么叫隔空输入(demo2)
通过摄像头获得视频,这里使用的是opencv-python;
生成各个键盘对应的区域,也就是一个键盘是有两个属性,一个是这个键盘对应的字母,一个是这个键盘的矩形坐标。
获得图像里面的手的数据(包括手的各个关节);这里使用的是谷歌发布的mediapipe包;这个包可以识别手的各个关节的位置。
判断手指是否放在一个键盘上:这里使用的是食指的指尖(也就是上图的数值8的位置),如果数值8的位置在具体的一个键盘帽的范围内,那么就代表“我将手指放在了这个按键上”。
判断是否应该点击一个键盘:这里是通过判断大拇指指尖和中指指尖的距离来确认是否点击这个键盘(也就是上图的数值4到数值12的距离小于100,就代表“点击这个键盘”)。
防止点击多次键盘:在步骤5的过程中,如果我们的手指的节点4和手指的节点12的距离在变大和变小的过程中,可能会导致连续输入一个字母,所以我在这里对虚拟键盘的点击做了一个“缓冲区”。这个缓冲区就是可以缓解一部分我们点击键盘的压力。
对于我们是否将手指节点8放在键盘上,我也对手指数值8的位置也做了数值平滑,这样可以保证我们的点击位置基本上都是稳定在一个键盘键帽内,不会不停的在不同的键帽内切换。
防止我们不小心输入了一些我们不想要的字符,我加了一个清除按钮。点击这个按钮,就可以清除刚才输入的字符。
最后我结果保存到一个队列里面,保证我们只是取最新的20个字符。并且这个结果实时显示在窗口上。
后面可能会加上别的功能,比如创建一些更加有用的界面。
后续可能做更加有趣的基于计算机视觉的应用。代码为:
https://github.com/yuanzhoulvpi2017/tiny_python/blob/main/gethand/cv_letter.py