元器件交易网-中发网全新升级平台
关注我们:
首页 > 技术资料 > 正文

对于制作有趣的触摸屏鼠标的设计原理

  给笔记本电脑添加触摸屏功能,通过手指在屏幕上的指点动作操作鼠标。这个小制作可以不对计算机进行任何改动,仅通过一个“小手柄”实现简易触摸屏的功能,即用这个“手柄”在屏幕上的指点来控制鼠标的移动。是不是觉得不可思议?其实它的原理很简单,有兴趣的朋友跟我们一起动起手来DIY 吧!

  要实现触摸屏功能,首先需要计算机对我们的动作进行感知识别。传统的触摸屏是基于硬件传感器的,即通过电阻分压计算AD 值的方式获取坐标。本制作采用图像识别方式,当然也有传感器,这就是大家常用的网络摄像头。图2清晰地说明了本制作的核心思想:屏幕平面与摄像头采集到的虚拟图像平面存在一一映射关系。如能在摄像头采集到的图像中检测出手的位置,就可以将手指的图像坐标映射至屏幕上的实际坐标,达到我们的“触摸”效果。当然,计算机是很“笨”的,想让它直接识别我们的手指,可能是一个复杂的问题:它得先分析图像,二值化,再提取“手指模型”特征,再……。是不是又有读者准备翻页了?请再次打住!毕竟我们不是专业搞计算机图像识别的,让我们换一个思考方式吧,简化一下,为何不在手指上附加一种特殊标志,只让计算机识别这个特殊标志呢?最直接的想法是识别颜色,因为这比其他任何基于形状识别的方法都要简单。比如,在手里握一支颜色“足够红”的笔,让计算机在采集的图像中按像素逐个寻找R 分量值最高的点即可。图3为计算机识别钟表起子尾部红色物体的屏幕截图,黄线十字处为识别到的区域,即使快速晃动起子,计算机也能马上感应出来。

  这个实验是在较理想的环境下进行的,如果背景较复杂,存在太多五颜六色的物体时,这种仅基于颜色的识别方法便无法使用。因为仅根据颜色信息,计算机无法准确识别背景还是手中的物体。笔者突发奇想, 如果有一种“红外摄像头”,它仅能获取红外光谱的图像,用其来识别握在手里的红外LED 不就可以了吗?这样,背景将是一片漆黑,视野中只有一个亮点,非常适合计算机处理。下面就通过一步步的硬件改造来说明这个“创意”。

  图1 实验最终效果

  图6 摄像头镜头及拆卸出的红外滤镜

  硬件制作及改装

  首先准备好工具和要用到的元器件,见图4。锉刀、剪刀等工具是必不可少的;另外还需准备一个网络摄像头、一张软磁盘、一块手机锂电池或其他电池、一个红外发光二极管、一个120Ω限流电阻。

  不论手机摄像头还是常用的USB 接口网络摄像头,其内部核心基本都是CMOS 图像传感器,这类传感器的一大特点是不仅可响应可见光,还对波长为800nm 左右的不可见红外光敏感。大家可以做一个小实验,用家里的电视遥控器对着摄像头按键,你会发现图像中出现一个微微闪亮的光斑。对!这就是红外光了。

  着急的读者这时一定想问:这么微弱的光有什么用呢?问题提得很好!这么弱的光会被淹没在强烈的其他光照背景下,的确很难直接提取光斑特征。为了简化图像识别算法,我们需要对摄像头做一些小小的改造。1.将普通摄像头改装成红外摄像头大家已经知道,CMOS 感器对红外光有一定的敏感度,但是正常的使用中需要看的仅仅是可见光谱部分。为了提高画质,大部分的摄像头商家都会在镜头中添加一个红外滤镜,尽量将那些没用的光谱段滤去,参见图5的示意图。

  然而,我们的制作却恰恰需要采集红外信号,因此需要反其道而行之:保留红外光,滤除可见光。小心拧下你手中摄像头的镜头,如果在镜头组的最后面看见一个方形或圆形的“彩色”玻璃片,那么恭喜你,这意味着你的摄像头可以方便地改装;这张玻璃片就是所谓的红外滤镜了,大多数情况下,它被一滴胶水粘在镜头组上,我们接下来要做的就是将它去除。

  准备一根最细的缝衣针,沿边缝小心将其挑起后取出,见图6。需要注意,滤镜片很薄很脆,用力千万小心,如果破碎,虽然不会影响本实验,但是你的摄像头就无法复原了。取出滤镜后再将镜头装回摄像头,调好焦距后插入电脑看看效果。是不是发现画面显示并无异样,只是图像有些微微发红呢?此时,我们的摄像头已经可以允许接受可见光和红外光谱范围内的图像了,再按下遥控器试试,你会惊奇的发现,原先那微弱的亮点变成了一个大光斑。

  仅仅能观看到红外光还不够,因为光斑依然不能与背景构成较大的对比反差,第二步要做的是滤除可见光。“可见光滤镜”是一种看起来黑黑的镜片,可滤除光线中的可见光成分,在红外摄影爱好者中广泛使用,淘宝网上也多有出售,可惜价格不菲。这里笔者介绍一种在室内环境中使用的廉价土办法:用完全曝光的照相底片或软磁盘代替昂贵的可见光滤镜。根据经验,软盘片表面光洁度和均匀程度较底片好,是DIY 制作的首选。选一张废弃的干净软盘,小心拆开,取出盘片,剪出几张大小合适的圆片,见图7。用双面胶将其粘在镜头前即可,见图8。

  用电视遥控器可以检验我们摄像头改造的效果。对着摄像头按遥控器,应该在画面中看到深色的背景上一个闪亮的光点。如果背景依然较亮,可以再重叠一张,但重叠的盘片最好不要超过三张,因为如重叠过多,在滤除可见光的同时也会减少红外光的通光量。

  2.红外目标指示器的制作有了红外摄像头,就可以方便地采集红外图像信号。但是我们不能一直拿着闪闪发光的的遥控器充数吧?这里需要我们自己制作一个红外目标指示器,用以向计算机指引我们手指的位置,如图9所示。

  图7 可以用废弃的软盘基片制作可见光滤镜

  图8 改装好的“红外摄像头”

 

  图9 制作好的红外目标指示器及LED 改进细节

  红外目标指示器的电路非常简单,原理图见图10,电池可任意选择,只是限流电阻应根据实际情况进行调整。尽管电路简单,但笔者还是要对红外LED 的改造唆一下。为了使红外摄像头能从各个角度看见红外LED 的光,首先需要用锉刀将LED 周围打磨一圈,以实现红外光线的漫反射;再在LED 顶端粘贴一个用锡箔纸剪成的反光片,以方便摄像头能从背后捕捉到足够亮度的红外光。制作完成后将指示器在红外摄像头前晃动,如能在全黑背景下看见一个清晰的光点则表示成功。至此,所有的硬件改造完成。

  软件设计

  写到这一章时笔者有些为难,软件向来是最让人头疼的部分,但又不能不说,笔者不知道如何向读者阐述清楚自己的想法,应当像上面的硬件改装部分那样手把手地和盘托出?还是大概介绍原理?想来想去,还是决定照顾大多数人的口味,毕竟代码那些东西太让人觉得枯燥了,这里,笔者将避开复杂的代码,仅介绍流程、原理和注意事项。

  由于摄像头得到的画面非常简洁,一幅几乎没有背景,只有标志物的画面能很方便地被计算机处理。为了尽量降低开发难度和周期,本制作的软件部分使用VB6.0开发。首先做的是获取USB 摄像头的图像信息。网上支持USB 摄像头的第三方VB 控件很多,笔者选择的是VideoOCX 1.62。安装注册后仅需编写几行代码就可以正常显示视频画面了。由于获取的图像基本是黑白画面,彩色信息在这里没有太多的作用,将其处理成灰度画面反而更利于计算机处理,另外,灰度图像只有一个亮度通道,相对于其他的颜色识别,灰度图像

  识别还减少了处理时间,见图11。有了灰度信息,就方便进行图像二值化处理:这里需要手动设置一个合适的阈值,然后遍历每一个像素,根据阈值计算出红外斑点的X、Y 轴边界坐标。如有需要,用线条控件将斑点标记出来,见图12。

  图11 采集到的灰度化红外LED 图像

  图12 识别并标记出红外LED 光斑边界

  图14 整套系统示意图

  确定出斑点的边界,即可算出斑点中心的坐标,但是这依然不是需要的最后结果,我们需要将这个图片坐标映射至计算机屏幕坐标,见图13。坐标校正算法是必不可少的,关于这个算法,读者朋友可以参考手机触摸屏的三点或四点校正文章介绍,笔者在这里就不多费笔墨了。

  调试通过前面一系列的准备,我们已经万事具备,只欠东风。通过下面的最后三步安装调试,就可以享受自制的“高科技”啦。

  1.将摄像头对准计算机屏幕。由于目前Beta 版程序中坐标矫正算法不是十分完善,在较大偏角和倾斜状态下的误差较大,所以要求调整位置时尽量使摄像头处于屏幕的正前方,画面不能过多的倾斜,使屏幕充满整个画面为好。这里,笔者建议使用便宜的数码相机支架来固定摄像头,以方便调节水平和各个角度和高度,参见图14说明。

  2.设置图像识别参数。启动VB 程序,在镜头前挥动我们制作的红外目标指示器,根据实际环境调整灰度阈值大小,使之能良好识别手中的红外光斑。需要注意,灰度阈值应当比临界值稍小一点,这样有助于软件识别慢速移动的物体。

  3.矫正坐标。进入软件坐标矫正界面,将红外目标指示器指点在屏幕上的十字矫正点上,点击“下一步”;这样的动作需连续进行三次。此时,调试工作全部完成,你可以在屏幕上任意指点,鼠标光标应能立即显示在你指点的位置。

  需要注意,摄像头应在整个操作期间保持固定,否则无法得到正确的矫正坐标。操作期间如计算机屏幕或摄像头移位,则需重新进行校正步骤。另外,附带示例程序中的矫正参数是针对1280×800的宽屏笔记本电脑屏幕,如果你的显示器分辨率与此不同,修改源程序中的相关参数即可。

  如果已经动手实践了的朋友会发现,虽然系统可以正常运行,但是在计算机边缘的鼠标和触摸位置有一些偏差,而且这个偏差还与摄像头的摆放位置有关。限于笔者的水平,暂且做到这一步,待日后改进坐标矫正算法。

  另外,细心的朋友也会发现,似乎鼠标的响应速度有些“慢”。这是由于普通摄像头的电子快门速度较低,高速运动的物体显示出来的画面就是一条模糊的线,计算机无法正常识别。既然是DIY,大家将就一下吧,等以后有钱买得起专业的相机再讨论响应速度的问题吧。

  结束语及后记本文介绍的作品仅仅是半成品,更多有待扩展研究。通过合理的改进,不仅可作为桌面型计算机的辅助输入设备,甚至可用于大屏幕投影仪教学中的演示。当然,本文的软硬件甚至原理上都可能有不妥之处,还请大家多多指出。

  啰嗦了这么半天,不知道笔者有没有将自己的思路讲清楚,毕竟众口难调,文章中忽略了不少令人头疼的计算推导和代码说明。如果读者看完后觉得不知所云,请多给自己一些信心.

  • 微笑
  • 流汗
  • 难过
  • 羡慕
  • 愤怒
  • 流泪