简介

此程序为利用Kinect实现用手指隔空控制鼠标,是我另一个项目的一部分,因为在另外那个项目中鼠标的click是通过一种特殊的方式实现的,因此这个程序只实现了用手控制鼠标的移动,并没有点击的功能。相比Leapmotion,利用Kinect来控制鼠标可以大幅增加操控范围,使用者可以随意走动,而不是被固定在桌面前。

好像很多人需要这个,但是网上为数不多的代码都是Kinect V1的,所以放出我的代码来供大家讨论。

源码

https://github.com/Beginner258/Kinect_Cursor_Control

运行环境

  • Kinect for Windows V2
  • Kinect SDK 2.0
  • OpenCV 3.0

使用方法

首先需要让Kinect识别出你,建议距离0.5m以上4m以内并且正对摄像头,如果位置合适的话瞬间就能识别出,如果几秒钟都没有识别出来就请调节位置。然后将手放入操作窗口就可以控制鼠标了,绿色的点代表指尖。

效果

原理介绍

指尖识别基础

程序的核心在于指尖识别,我发现网上关于指尖识别的资料不多,所以自己想了个很简单的办法,不过效果还不错。首先应该知道三点:

1.  Kinect可以分辨出画面中哪一部分是人体
2.  Kinect带有深度摄像头,可以获取物体到摄像头的距离
3.  Kinect可以获取到人体的最多25个关节点的位置

减小搜索空间

为了寻找指尖,没有必要在整副画面中去搜索,那样会导致效率非常低。指尖肯定是在手部关节点(Hand)附近的,因此只需要获取到手部关节点的位置然后再拓展出一片区域,在这片区域里进行搜索就行了。之所以取Hand而不是取HandTip,是因为后者的稳定性非常差,即使在一个合适的距离正对Kinect也不一定能识别出来。

指尖识别

这时候就可以根据指尖的特征来进行指尖识别了。不过实际上我识别出的不是指尖,而是指尖上方的一点。此点的特征如下:

  1. 不属于人体
  2. 或者属于人体,但是和手部关节点不在同一个平面上(允许有误差)
  3. 到手部关节点的位置在某个合适的范围内
  4. 下面连续N(这里我取N为5)个像素都属于人体

首先,对于第一点很好理解,因为上面说了识别的不是指尖,而是指尖上方的一点。

第二点是用来处理手移动到身边正前方的时候的情况,比如手在胸前,这时候指尖上方的点都是属于人体的,不满足第一点。这里的误差指的是手和小臂成90度时的深度差,一般15cm左右。

第三点是为了消除两根手指根部之间的那个位置形成的误判,同时也进一步减小了搜索空间,正常情况下手指到手腕的距离都在10~25cm范围内,这里把拇指筛掉了,一般也不会用拇指去操作。如果要恢复拇指的话调整下参数就可以。

第四个条件筛选出了离手指尖最近的那个点。

确定操作窗口

为了便于操作和观察,我设置了一个操作窗口,位于肩部的左上方和右上方,根据操作手的左右而调整。这个窗口就代表着电脑的屏幕,手指在窗口里的位置就是鼠标在电脑屏幕上的位置。这里窗口的大小是根据关节点HeadNeck的距离作为单位长度算出来的,也就是说能根据人体到Kinect的距离来调整操作窗口的大小。同时这个窗口是实时更新的,会根据人体的位置而进行调整。

这里要说一下,如果操作的位置相对固定,那么建议识别出窗口后就不要再更新,将操作窗口固定,因为这样能够大幅度提高鼠标的稳定性,同时上传了一份以这种方式来做的代码,不过这份代码只实现了单手控制。

抖动消除

这是个不太好处理的问题,因为容易影响到正常操作。这里我设置了一个移动的阈值,如果和上一个位置相比,鼠标的位置改变很微小,那么就保持上次的位置不变。还可以再加入一个判断位置突变的阈值,如果当前位置和上一次位置相距太远,就可以判断为非法而筛去。

指尖位置与鼠标位置的转换

黑色框为程序里确定的操作窗口,大写的X和Y代表的是屏幕的宽和高,红色框为电脑屏幕,假设人的手指在的位置,如果想将鼠标也映射到同样的位置,那么就有 的等比关系成立。电脑屏幕的宽和高,实际上是不需要考虑分辨率的,因为在鼠标的坐标系下,电脑的宽和高都被分成了65535个单位,所以宽和高可以视为65535。根据这些,就可以算出的值来。

转载于:https://www.cnblogs.com/xz816111/p/5427138.html

利用Kinect实现用指尖隔空控制鼠标(源码放出)相关推荐

  1. 3·15报道:“隔空盗刷”资金骗局曝出

    近些年顾客的网上购物等服务愈来愈多,许多犯罪分子根据"ETC卡禁止使用"."快递丢失赔付"等骗术,哄骗顾客登陆诈骗网站对它进行行骗.3·15晚会视频表明,陈女士 ...

  2. 隔空操作鼠标——基于人工智能的鼠标控制器

    首先检测手的标志,然后根据这些标志点进行跟踪和点击,外加一些平滑技术以使其更加流畅. 效果: 运行AiVitrualMouse.py文件. 食指是鼠标的移动模式,当食指和中指都翘起来且靠近时,是鼠标的 ...

  3. 隔空操控iPhone!苹果新获悬停手势专利

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 之后,只需要挥挥手,就能够操控iPhone了. 这一消息,来自于专门关注苹果公司的行业网站Patently Apple. 报道中表示,美国 ...

  4. python人工智能【隔空手势控制鼠标】“解放双手“

    大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识h ...

  5. python手势控制游戏_欢乐的计算机视觉-隔空玩游戏(python手势控制飞机大战)

    每个人儿时都有一个武侠梦,梦想自己有一天10块钱买到一本如来神掌,从此仗剑走天涯,不过在桃花岛,真的有一本秘籍:隔空玩游戏,今天,就带领大家翻阅翻阅这本秘籍. 这本秘籍全部都是用python来完成的哦 ...

  6. 隔空作画,握拳清屏,这个手部跟踪项目火了,在线可玩

    在屏幕上隔空作画是近来新兴的一种有趣应用,其中涉及复杂的手部跟踪技术,这类技术成熟之后可用于提升应用程序的交互体验.此前机器之心曾报道过可以隔空写字.绘图的有趣项目「air-drawing」,该项目利 ...

  7. 靠脑机接口“隔空探物”,大脑植入芯片可实现“心灵感应”

    来源:脑极体 1979年,在四川大足县的12岁农村少年唐雨突然具有了"耳朵识字"的神通.原本是当地的一件稀罕的谈资,结果后来引起了当地媒体的报道,后来又居然经过中国的权威科技期刊& ...

  8. 电脑断网也难逃黑客攻破!风扇在转,手机放桌上,数据就被隔空窃取了

    十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 网络安全.网络安全,有网络才不安全. 那么断网不就好了. 现在也不行了.万万没想到,用来散热的电脑风扇,也成了黑客窃取数据的对象. 让我们先 ...

  9. 电脑上装蓝牙_指甲盖变触控板,隔空就能操控手机和电脑!

    来源:Maxidea极创意  koala爱睡觉作为一名靠码字讨生活的小编,有时候真恨不得像吒儿一样长出三头六臂,这样我就可以一边工作,一边接客户电话,顺便还能把刚点的小龙虾吃了,很明显这是天方夜谭.但 ...

最新文章

  1. 前端优化系列之一:dns预获取 dns-prefetch 提升页面载入速度
  2. 周志华:深度学习理论探讨比应用滞后太多
  3. 写给MongoDB开发者的50条建议Tip25
  4. OSChina 周二乱弹 ——假期综合症
  5. python中list的运算,操作及实例
  6. zookeeper 安装及集群
  7. 读书笔记_中国期货市场量化交易(李尉)05
  8. VXLAN配置实例(一)——VXLAN基本配置
  9. JAVA创建对象有哪几种方式
  10. Quartus II13.1破解
  11. APDU指令返回码及其代表含义
  12. php物联网智能家居系统源代码,基于物联网技术的智能家居控制系统设计方案
  13. C语言常用库函数实现(一)_内存拷贝
  14. Linux下测试SSD硬盘读写速率
  15. 《Python数据分析与挖掘实战》第8章——中医证型关联规则挖掘(Apriori关联)
  16. bcn_timout,ap_probe_send_start
  17. 【数据结构复习自用】树的性质
  18. 基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)
  19. qsnctf nisc_easyweb wp
  20. vue element datepicker八小时时间差

热门文章

  1. python mongodb_python实现mongodb的增删改查
  2. 如何将手机投屏到电脑_使用向日葵软件如何将手机投屏到电脑上
  3. 通用 字符串工具类
  4. 西门子plc200 c语言转换,s7-200程序转换成s7-1200方法
  5. Linux 端口侦听不到,在linux上,如何在不尝试连接的情况下检查端口是否处于侦听状态...
  6. 苹果CMS V10 播放记录_苹果cms采集后无法播放怎么解决?
  7. python32位 最大内存_64位windows上的Python 32位内存限制
  8. c语言判断一个已知的二叉树是否是二叉排序树_从ServiceComb学习写好go代码---二叉排序树...
  9. 使用R语言的BNLearn包实现贝叶斯网络
  10. java 解析tgw_给Java新手的一些建议——Java知识点归纳(Java基础部分)