基于STM32的激光投射虚拟键盘设计

2019-05-24 14:21朱春华胡军委邓淼磊
无线互联科技 2019年2期
关键词:图像处理摄像头

朱春华 胡军委 邓淼磊

摘 要:针对虚拟键盘设计中位置的误判导致识别精度低的问题,文章研究了虚拟键盘设计中的空间坐标采集技术,并提出采用手指反射的红外光来确定虚拟键盘的空间坐标。以STM32作为主处理器,其拥有的I/O口数量以及具备的高速工作频率,可以很好地支持摄像头对图像的采集和处理;使用激光进行键盘图案的投影,方法简单,不需要对其进行额外的程序操作;使用红外光进行按键的检测,相比采用空间坐标模块方案和双摄像头方案,更加简单、节约成本;使用摄像头进行图像的采集,将摄像头采集到的数据进行图像分析,从而实现其对手指的准确定位。采用本文所提出的虚拟键盘设计方法,可以实现可靠的文字编辑等操作。

关键词:虚拟键盘;激光投射;图像处理;摄像头;STM32

虚拟键盘的出现促进了电脑的智能化、小型化发展[1],近年来,人们不断地提出新的方法来解决虚拟键盘的设计问题,影响虚拟键盘位置的判断以及识别精度的关键在于空间坐标的采集技术及相应的圖像处理技术。综述现有的文献,虚拟键盘的设计可分为两种实现方法:(1)由特定用途集成电路芯片一起来构成一个键盘扫描系统,利用集成电路芯片所有自有的扫描键盘接口和可编程的逻辑器件来实现半虚拟键盘输入,达到其对计算机的控制。这种虚拟键盘的实现方法有点类似于将键盘的材质特殊化,通过缩小传统键盘的体积来实现半虚拟键盘,这种方法较为复杂,并且仍然占据一定的体积,不便于人们的使用。(2)通过模块产生键盘图案,然后使用三维空间坐标定位模块,来检测对手指是否按下键盘图案。这种方法基本上能够实现虚拟键盘的功能,但三维空间坐标定位模块价格较昂贵,成本太高,不能被人们所接受。本文针对现在市场上对于虚拟键盘的迫切需求,设计了一套基于单片机的激光投影虚拟键盘方案,并搭建了对应的实物,经过测试,能够实现虚拟键盘的基本要求和功能,并降低了虚拟键盘的成本以及开发难度,提高了可靠性和实用性。

1 系统硬件的设计

1.1 系统总体设计

本文提出的虚拟键盘总体设计一共由5个部分组成,分别是STM32F103ZET6主控制器、OV7670摄像头模块、激光键盘显示模块、一字线性红外光发射模块和2.8寸TFT LCD模块。其系统设计的结构如图1所示。

图1中,选用STM32F103ZET6单片机作为主控制器,以求其能够达到满足模块需求的I/O数量口和满足摄像头进行图像处理的高速工作频率,使其能够支持对摄像头的连接和图像的处理;选用OV7670摄像头模块作为键盘图案的采集,因为其具备红外光采集的能力和具有一定的视野范围,能够采集到键盘图像;选用激光键盘显示模块来显示键盘图案,是利用了激光具有相干性好、亮度高、传播距离远的特点[2],即使在外界环境光强较大时,也能显示出人眼可识别图形;选用一字线性红外光发射模块来作为手指触发按键的检测模块,它能够排除可见光以及激光的影响,做到更精准定位手指的位置;选择2.8寸TFT LCD模块作为显示模块,显示模块不仅可以显示摄像头采集到的原图案,还能够显示经过STM32处理后的二值化图案,调试结束后,还可以使用显示模块显示手指按下的按键信息。

1.2 STM32F103ZET6微处理器

STM32F103ZET6是以Cortex‐M3作为内核的一个32位单片机,同ARM7型处理器相比,STM32F103ZET6拥有执行速度高、低成本、低功耗等优势。而且STM32F103ZET6相比其他ARM单片机开发更加简单,这是由于ST官方自己已经提供了一套标准的操作STM32F103ZET6底层库函数,这就使得大家不再需要记忆、配置众多的寄存器,而是直接调用标准的底层库函数就可以达到配置相关功能寄存器的目的。这样不再记忆、操作底层的寄存器,就使得开发者大大减少学习时间,节省了开发的成本,提高了开发的效率[3]。

STM32F103ZET6外部共有144个引脚,其中有112个高速I/O引脚,并且它外部资源的可扩展性非常好,其外部扩展方便、多样,应用自然就是极其强大。另外,STM32F103ZET6的内部资源也十分丰富,在可接外设引脚多的情况下,每个外部引脚都对应有它们各自独特的功能。速度方面,由于其外部扩展8 MHz的晶振,内部进行倍频之后,最高可达72 MHz的运行速度,相比较51单片机最高40 MHz足足提升了近一倍。由于其在功耗低的情况下,运行速度仍然快速,这是它应用非常广泛的最主要的原因。

1.3 OV7670摄像头模块设计

OV7670摄像头模块具有体积小、工作电压低,能够产生VGA和QVGA等图像功能的特点。OV7670摄像头模块是使用SCCB接口来控制摄像头命令和数据的传递,它最大的像素图片,VGA图像最高能够达到30帧/秒。OV7670摄像头模块具备许多图像处理功能,都可以通过SCCB接口编程,从而来提高影像质量,得到非常清晰的、稳定的彩色图像。OV7670摄像头模块具备许多的特点,包括灵敏度高,适合嵌入式场景;具备SCCB接口,并且能够兼容I2C接口,便于数据的传输;其可以输出RawRGB格式和RGB565格式的图像;支持VGA和QVGA等格式的图像尺寸[3]。OV7670摄像头模块的原理如图2所示。

1.4 激光键盘显示模块设计

本文采用小功率红色激光发生器作为投射光源,并以自主设计制作的键盘字模,覆盖于激光光源表面,激光透过字模将键盘图形投射到表面上,从而实现虚拟键盘的呈现效果。

1.5 一字线性红外光发射模块设计

将一字线性红外光发射模块置于投影装置底部,发射出的一字红外信号用于检测是否有手指按下。若有手指按下时,红外线就会以一定角度被反射,而安置于一字红外光源上方的摄像头则会接收被反射的红外信号,达到检测手指按下按键的目的[4]。

1.6 2.8寸TFT LCD模块

TFT LCD也被叫作真彩液晶显示器。TFT LCD模块有许多特点:集成度高,在非常小的面积上可以集成很高的像素用来显示图像;成本低,尽管TFT LCD能够实现很高像素的效果,但其工艺性简单的特点决定了它的成本很低;应用广泛,TFT LCD被应用到生活各个方面的显示器上,给人们带来了巨大的便利[5]。2.8寸TFT LCD也有许多的优点,其具备320×240的像素分辨率,支持16位彩色图像的显示,支持65K色彩的显示。TFT LCD模块的电路原理如图3所示。

2 系统软件的设计

本系统工作的主要流程首先是将各个模块进行初始化,将其各个模块之间进行配合,从而达到实现总体功能的目的。在本文中,主函数需要进行的初始化包括中断函数初始化、延迟函数初始化、TFT LCD液晶初始化、串口初始化和OV7670摄像头初始化。然后才会进行摄像头的数据传输、图像处理、按键判断以及按键显示过程[6]。其工作流程如图4所示。

2.1 2.8寸TFT LCD模块软件设计

在使用TFT LCD液晶显示屏时,首先需要对其进行初始化,才能使LCD液晶正常工作。TFT LCD液晶屏初始化时,首先需要进行硬件初始化,包括STM32的GPIO初始化、FSMC初始化、读取LCD的ID、设置为竖屏、点亮背光和清屏等操作。然后就可以等待LCD的复位键使能,对LCD进行读写命令的操作[7]。其读写操作的流程如图5所示。

2.2 OV7670摄像头模块软件设计

在使用OV7670摄像头模块时,应先对其进行初始化,其初始化流程包括初始化摄像头与STM32F103ZET6相连接的I/O口;然后通过I/O口读取摄像头的ID编号,如果成功读取到摄像头的ID,则说明摄像头的安装是正确的,否则,说明摄像头安装错误;如果摄像头的安装正确,之后就会进行OV7670摄像头相关寄存器的配置,也就是执行初始化的序列;最后就完成了OV7670摄像头模块的初始化,就可以对摄像头进行下一步的操作,例如采集图像等。

OV7670摄像头模块进行图像采集时,需要先进行帧信号的判断,即等待帧同步信号,然后将FIFO写指针复位、写使能,以此循环往复就能够从摄像头中采集到图像数据。

经过上述步骤后,OV7670摄像头已经正确地采集到数据,也就是说,摄像头已经成功“看到”了图像,但这只是摄像头所采集的信息,STM32F103ZET6处理器还没有得到图像的数据,这是就需要通过相应的处理,从摄像头的FIFO芯片中得到所需要的图像数据。首先,将FIFO读指针进行复位,实现读FIFO时钟的输出工作,准备读取其已经缓存的图像数据;然后判断图像像素的数据是否已经读完,如果没有读完,继续读取图像像素数据,否则,结束图像像素数据读取过程。在读取图像像素数据的过程中,首先需要讀低8位的二进制像素数据,然后读取高8位的二进制像素数据,这是因为STM32每个时钟只能从摄像头中读取8位的二进制数据,而摄像头图像像素二进制数据是16位的,故每个像素数据需要分两次才能读取完成[8]。

2.3 图像处理软件设计

经过上述的步骤之后,接下来就是对得到的图像数据进行分析,也就是进行图像数据的处理。图像处理部分由3部分构成,包括图像像素值进行二值化、记录手指按下的图像像素值坐标和输出该点对应字符的ASCII码。

当摄像头采集到320×240个像素后,将其保存在一个二维数组中,选取其中的一部分像素值求其平均值作为阈值,然后对每一个像素和已求得阈值进行判断,大于阈值的重新将其赋值为0xFFFF,小于阈值的赋值为0x0000,这样就完成了图像的二值化处理;二值化处理完成后,其大于阈值的像素值的数组下标号即可作为按下按键的坐标;接下来对所得的按键坐标进行判断,即可得到按键对应字符的ASCII码;最后,只需要将字符的ASCII码显示出来,便完成了虚拟键盘的设计[9-10]。

3 实验结果

实验调试时,对LCD初始化后,首先显示LCD、摄像头是否初始化正确,如果正确则进行下一步,如果错误则显示错误。在调试过程中,LCD能够正常显示摄像头采集到的实时图像、二值化图像、手指按下按键的图像,最终程序能够在LCD上显示虚拟按键的键值。

OV7670摄像头模块已经能够正确地显示320×240像素的实时图像,可以清晰地采集到键盘的图案,经过二值化处理后手指的图像,还有手指按下键盘反射的红外光的图像。OV7670摄像头模块成功采集到桌面键盘图案,其调试结果如图6所示。

本文将采集到的摄像头图像进行二值化处理,滤除可见光部分,产生仅仅由手指反射到的图像,通过这个图像便可以对手指按下的按键位置进行定位,找到其对应的ASCII码。本文所制作的实物显示以及一个按键的位置坐标如图7所示。

为了验证激光投影虚拟键盘的可靠性,分别对虚拟键盘在室外(白天阳光下)、室内(白天)以及室内夜晚3种场景下进行测试。测试结果如表1所示。

4 结语

本文提出了一种虚拟键盘的实现方法,并根据此方法给出了软件优化和和硬件选择方案,完成相应的制作。所提出的方法以及采用的方案,与现有虚拟键盘设计相比,具有成本低、代码简单的优点。本文所提出的虚拟仪器设计方法也可扩展应用到其他虚拟技术上,甚至是实现立体空间的虚拟技术上。

猜你喜欢
图像处理摄像头
浙江首试公路非现场执法新型摄像头
摄像头连接器可提供360°视角图像
基于图像处理的机器人精确抓取的设计与实现
机器学习在图像处理中的应用
基于太赫兹技术的新一代摄像头及其在安防领域的应用探讨
基于图像处理的定位器坡度计算
Photo Shop通道在图像处理中的应用