用了这种键盘后,我发现了新世界!

640?wx_fmt=gif


640?wx_fmt=jpeg

作者 | 张巧龙

责编 | 伍杏玲

有没有觉得键盘太占地方,敲起来声音太大?今天给大家带来一个超酷炫、无实物的虚拟键盘:基于激光投影技术的虚拟键盘。

键盘运行视频:

没错,就是这么炫酷!


640?wx_fmt=png

扫描二维码关注公众号,回复: 5256373 查看本文章

系统总成 


本系统包含两个部分:硬件信号获取和软件数据处理。

硬件部分由广角摄像头、980nm红外滤光片、红外一字激光、键盘投射激光以及覆铜板支架组成。

软件部分由Visual Studio开发环境结合OpenCV视觉库编写和编译而成的上位机软件。

整个系统是由软硬件协调完成。

系统框架如下:

640?wx_fmt=jpeg


640?wx_fmt=png

原理介绍


640?wx_fmt=png

如上图所示,在最下面的红外一字激光发射出红外线覆盖空间中的一个面,当然这个平面要覆盖整个键盘的范围,在中间的键盘投影键盘发出的是键盘形状的轮廓图形主要用于位置的标定。

在最上面的摄像头实时拍摄外界图形并且把数据传递给电脑,因为一字激光发出的光线是和水平面平行的,所以没有物体遮挡时摄像头是不能检测到红外线信号的,但是如果有物体在红外一字激光区域中时,遮挡物体表面就会覆盖,有红外线摄像头就会检测到红外线信号,电脑获取到摄像头发送过来的信号后,经过一定的算法之后,得到红外线亮点在图片中的坐标,然后把这个坐标映射到现实中键盘的位置从而实现其功能。


640?wx_fmt=png

硬件设计


摄像头

摄像头选择的是:普通CCD摄像头500W像素33帧频,如下图所示,普通的摄像头的镜头的视角是90°的,所以检测到的面积很小,这样就会导致摄像头固定的高度会很高才能检测全部的键盘范围,摄像头安装过高就会减少光线的进入量,从而减少了信号的输入,不方便信号的检测和转换。

640?wx_fmt=png

红外激光

使用红外线作为信号检测的光源,之所以选择红外激光是因为激光的具有低功耗和集成度效果好,而且其发出光的频率几乎专一,可以让人眼觉察不到,为了考虑到人身安全状况,故选择30mW的980nm红外激光,由于键盘是一个平面,所以不能使用传统的单束激光作为光源,所以只能选择一字形激光,其线角度为120°,只有调节好投影键盘的位置,一字激光可以完全覆盖到所有的键盘范围。

键盘投影激光

此模块用于键盘坐标的标定,在平面上投射出键盘的形,状给用户一个键盘位置的确认,选择650nm的可见光激光因为是650nm波长,所以不会对摄像头检测980nm信号有干扰。

640?wx_fmt=png


640?wx_fmt=png

软件设计


使用Visual Studio通过OpenCV库对摄像头数据的读取和算法实现,使用cvCapture- FromCAM函数和cvSetCaptureProperty就可以直接连接到PC端的摄像头。摄像头拍摄的原图如下图:

640?wx_fmt=png

本系统设计感兴趣的是亮光点,和相关的颜色信号无关,所以必须把图片二值化,以方便后面算法的实现,当然,为了进一步提高后面定位的精确性,所以在图片二值化前,可以使用cvThreshold 对单通道图片数据应用固定阈值操作。该函数的典型应用是对灰度图像进行阈值操作得到二值图像同时取得噪声,列如滤掉很小或者很大的图形点。二值化的图如下。

640?wx_fmt=png

得到二值化图像后,接下来要做的就是查找所有兴趣点的轮廓,OpenCV里的find Contours是轮廓检测函数之一,这个函数可以使用多边形来近似表示一个轮廓其次,多边形逼近的目的是为了减少轮廓的顶点数目。

但多边形逼近的结果依然是一个轮廓,只是这个轮廓相对要粗旷一些。如果要使得查找的轮廓平滑一点,可以使用approxPolyDP函数对该多边形曲线做适当近似,如果要画出查找到的轮廓的话,就可以配合使用drawContours函数,使用函数boundingRect,还可以得到轮廓的外包络矩形。

定位包络矩形的中心点在图片中的坐标,然后就可以检测到手指的位置,最后投射到键盘对应的位置。查找轮廓后的图片如下图:

640?wx_fmt=png

找到兴趣点的轮廓和定位到对应兴趣点在图片中的位置后,接下来的就是映射键盘了,虽然镜头是有线性失真的,但是通过一定的算法校正后,还是能保持线性的,所以只要把图片比例化之后,然后划分按键位置的坐标就可以直接映射到对应的按键位置了。

键盘映射后面的图片如下图:

640?wx_fmt=jpeg

程序流程图设计

640?wx_fmt=png

作者简介:张巧龙,一名硕士在读的95后男生,一个爱电子、爱生活的标准工科男。目前兼职于一家机器人公司研发工作。

公众号:大鱼机器人(ID:All_best_xiaolong)

源码地址:

https://blog.csdn.net/best_xiaolong/article/details/87624053

声明:本文为作者投稿,版权归其个人所有。

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=gif

 热 文 推 荐 

故宫“瘫痪”程序员怎么办?

印度封禁抖音,称导致该国年轻人“文化堕落”!

程序员如何避免“滴滴式裁员”悲剧?

可视化编程真的有那么糟糕?

微服务、Kubernetes和无服务器之后,即将发生的……

打打游戏就能在北京二环买套房?区块链大神说:你能靠VR刷怪升级还房贷!

帅气中国小哥出“大招”,程序员跳槽面试刷题必备

35岁程序员 节后第一天被辞退!

 
  

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

640?wx_fmt=png 喜欢就点击“好看”吧

猜你喜欢

转载自blog.csdn.net/csdnsevenn/article/details/87745639