完整解决方案打包奉送:多点触控智能家居平台软硬件实现
扫描二维码
随时随地手机看文章
绪论
近年来,多点触控(Multi-Touch)成为了代替人机交互传统方式的新方式。它抛弃了键盘,鼠标,实现了多人同时交互,是人机交互的一场革命性创新。但可惜的是,该项技术还处在初级阶段,Multi-Touch的产品很多还只是面向高端或军工用户,价格十分高昂。这对广大消费者来说都是不能承受的。此外,目前基于Multi-Touch应用的软件业相当较少,且大多数停留在游戏娱乐的功能上,这样也限制了该技术的发展和应用。
为此,将Multi-Touch技术应用低廉化、市场化,就显得十分紧迫。考虑到Multi-Touch新鲜而高效的人机交互的方式,我们将其应用在日常的办公生活中,为广大的办公室人群提出了一套提高工作效率、增加工作乐趣的Multi-Touch应用解决方案。
多点触控智能家居平台
一,FTIR原理简述
作为Multi-Touch最初的被提出的实现方法,FTIR(Frustrated Total Internal Reflection,受抑全内反射)一直是最热门和被研究得最透彻的实现方法。其原理是在较厚的透明有机玻璃侧面放置红外LED,使红外光在玻璃内部产生全反射,当有手指触碰到有机玻璃表面时,全反射的平衡会被打破,于是会有部分的光散射到下面来,从而被摄像头捕捉到。由于有机玻璃是全透明的,在有机玻璃上部或下部还要附上一层背投影屏幕。综合来看,虽说效果不错,但此方案因为要合理地调整侧边入射的灯,且对材料的要求也很高,所以实现过于复杂。
图一
二、DI原理简述
DI的原理最初由微软提出,其实现原理见图2。图中,用户接触的平面不一定用有机玻璃,而整个技术的关键在于屏幕下方的红外散射光源,此光源将红外光均匀地散射在多点触摸屏的一面,当手指触碰到表面后,由于手指挡住了光向上散射的路线,此时在图像中会有一个阴影出现。经过进一步的图像处理,就可以提取有关手指的位置信息。
图二
具体实现上,DI可以变得简单一些。图1所示的是Back DI(背投光DI)的原理,可以看到红外光从下方入射。这种Back DI的好处是光源在触摸屏下面,可以自己控制,并且可以合理控制红外光的亮度;它不仅仅实现阴影捕捉,更可以实现物体识别。但是,这种方案需要合理摆放红外LED的位置,并且保证所有的红外LED的亮度几乎一致,还要达到最理想的均匀光照的效果,所以实现的难度很大。
实际操作中,我们尝试了一种Front DI(外光DI)的方案。与Back DI相反,Front DI负责采集的红外光来自触摸屏外。同样,由于手指的遮光作用,也会捕捉到阴影。虽说没有Back DI那样那样高清的分辨能力,但对于桌面应用,已经足够。
分析和实践了FTIR实现方案后,考虑到产品的成本和复杂度,我们尝试了DI的方案,效果较理想,而且DI的价格便宜,系统简单,更易于组装和实现。于是最终作品选用了DI的方案。
三、系统组成结构
整个系统主要有四个部分组成:PC,摄像头模块,投影仪及用户的桌面。总的说来,该系统硬件组成比较简单,摄像头原型使用罗技的一款高清摄像头产品,经过去除可见光滤光片并加装红外滤光片后,供系统采集手指位置信息,而投影仪作为显示部分,选用了爱普生的EB-X7。外框上,我们自行设计了平台的框架的组成结构和各部件的安装与工作方式。
四、软件部分
4.1 软件概述
在系统设计中,我们选择采用C#进行编写程序,将手指触摸事件用UP,DOWN,MOVE分别表示手指接触触摸屏,在触摸屏移动,离开触摸屏三个事件,并利用CCV来编写整个触摸屏的手指识别程序,并封装成动态链接库,方便后续程序的调用。
CCV(Community Core Vision)是一款解决计算机视觉和机器感应的开源/跨平台的软件。可识别出因为碰到手指而反射回来的红外光,在经过数据处理是图像更为清晰,再将事件传递给已编写好的DLL动态链接库文件,从而使软件识别出具体的手指动作。
用户可以在显示缓冲区上通过绘图绘制图形。图形系统使用了GDI+,GDI+提供了较为强大的绘图功能,这比较适合本系统提供的应用。可以通过一个函数提供获得GDI+绘图对象的指针。显示缓冲区在用户绘制完成后要更新到父窗口以最终显示到屏幕上。
每个消息处理队列都对应一个独立的消息处理线程,负责处理各种事件,特别是用户操作事件。事件以消息的方式发送到消息处理队列中,消息处理线程从队列中取出消息,处理后返回。消息发送有两种模式,一种是发送后返回,另一种是发送后等待消息处理完后再返回。消息处理线程直到窗口关闭才被销毁。消息队列是窗口系统具有了多线程的特性,可以使多个窗口在英特尔双核处理器上同时工作,大大提高了窗口的性能,特别是多个用户同时执行复杂操作的时候,可以大大提高并行能力。
消息队列的操作是互斥的,每次仅有一个线程能够对其中的元素进行添加删除操作。所以就需要一个锁的机制来保护。
对于用户操作,父窗口将位于子窗口内的用户操作通过消息的的方式发送给子窗口,这样一级一级地传递下去。特别需要介绍的是手指消息,手指消息分为手指放下、手指移动和手指离开,窗口通过消息参数中的手指ID实现不同手指的识别。
多个手指的操作基于一个窗口维护的活动手指表,标准记录了所有绑定在这个窗口上的手指。该表通过平衡二叉树实现,以提高速度。
本系统设计的窗口可以以任意角度旋转,这样可以支持从各个角度观看的用过户,以适合小型会议的需要。窗口内置支持一种环形的菜单,这种菜单通过一个消息通知窗口用户的选择。窗口另外支持键盘操作,键盘通过字符消息通知窗口。
4.2 应用功能
4.2.1 白板
白板作为会议中常用的功能,特别是在与设计有关的会议中,如果设计人员能够面对面地讨论,并在白板上表达自己的看法是非常有效的,传统的纸质白板能够提供多人讨论的环境,但不能够方便地修改设计,而一般的网络白板能够提供交流的平台,却不能够让很多人聚在一起讨论并同时操作。Multi-Touch技术完美地解决了它们存在的问题,给人们一个可以充分交流的平台。
4.2.1 虚拟键盘
在应用当中,用户不仅仅需要画图,在很多情况下需要打字,这是只有白板功能就不能满足客户打出标准汉字的要求,所以添加了虚拟的触摸键盘,可以在触摸屏上利用键盘输入文字,触摸键盘还带有搜狗输入法,可以输入中文汉字。