欢迎来到深圳市安瑞创电子科技有限公司 !

基于DSP的手势识别电视遥控器设计(最全图文详解)

 发布时间:2015-09-07


由于传统电视机遥控器的按键操作比较机械且缺乏娱乐性,设计了一种以DSP2812为核心的手势识别算法。通过将用户手势运动的信息转换成相应的红外信号,从而实现手势遥控电视机更换频道和调节音量的目的。该系统主要由双端口RAM通信的双DSP 并行处理器、CMOS 数字摄像头、红外遥控模块、上位机调试软件和以太网通信模块组成。实验测试表明,该系统能够实现用户手势图像的采集、手势动作的识别、红外遥控及以太网通信功能。

传统电视机遥控器是一种按键操控方式,其操作比较机械且缺乏娱乐性。本文提出一种采用直接判断使用者手部动作的方法遥控电视机,使用者在摄像头拍摄范围内按照规定的摆放方式移动手部,就能够遥控电视机进行音量增减或频道变换等操作。设计使人们对电视机的遥控操作更加便捷、人性化,丰富大众的日常生活。

1 系统设计方案

手势识别电视机遥控器是集合图像采集、手势识别和红外遥控三大主要功能的控制装置。依据要实现的采集图像能力和DSP 处理视频流能力的功能要求,确定系统结构如图1 所示。
手势识别电视遥控器系统结构
图1 手势识别电视遥控器系统结构
本系统采用了双DSP 共同工作的方式,主要由六个模块组成。
1) 摄像头模块: 由摄像头OV7620 及驱动电路组成,负责手势图像采集。
2) DSP1: 核心是TMS320F2812,负责对图像采集及预处理,与上位机网络通信和用户按键信息的输入。
3) 上位机: 显示实时采集的图像,图像处理结果和调试参数等。
4) 双端口RAM 模块: 实现两个DSP 之间的高效数据通信。
5) DSP2: 负责提取手势图像特征和向红外遥控模块发送指令。它从双端口RAM 获取图像数据,从图像中提取有用的特征,并将判断结果转换成相应的遥控指令。
6) 红外遥控模块: 负责学习电视机配套遥控器的红外遥控指令,将其放入指定的存储空间中。在DSP2 给出发射指令时,查询存储空间,获取对应的红外指令并发射。

2 系统硬件设计

2.1 双DSP 处理器及内存空间设计

本设计使用双TMS320F2812 的DSP 进行图像采集、图像处理并且实现红外遥控和网络通信等功能。这样可以满足并行图像处理能力和快速响应的速度要求,同时两个DSP 扩展了512 K × 16 位的RAM 空间,以满足图像处理的空间要求。

为了实现双DSP 之间的通信,系统采用Cypress公司的一款64 K × 16 位的双端口RAM 芯片CY7C028 搭建一个数据通道。DSP1 把采集到的图像通过时间控制有规律写入数据通道中,DSP2 从数据通道中提取图像数据存放到自己的RAM 中,然后进行相关的图像处理。在设计工作状态时,使用双端口中断判优方式,数据传递采用握手的通信模式。当DSP1 向双端口RAM 中写完数据之后,通过中断握手的方式,通知DSP2 读取数据。DSP2 要求数据时,也会以同样的方式通知DSP1,从而实现双DSP 高速有规律地数据传递。双端口RAM 与两个DSP 之间的硬件连接如图2 所示。
双端口RAM 与双DSP 的硬件连接图
图2 双端口RAM 与双DSP 的硬件连接图

2.2 图像采集电路设计

本系统直接使用DSP1 通过外部中断NMI 和INT2,分别同步摄像头OV7620 的VSN 和HREF 信号,同时通过绑定DSP 的8 根I /O 线同步读取图像到DSP 内存中,从而实现了系统的图像采集工作。为了让DSP 的时钟频率与OV7620 的时钟频率匹配,必须要降低摄像头的输出时钟频率。对摄像头OV7620 内部的寄存器进行设置,达到减慢数据传输速度的目的。OV7620 模块与DSP1 的硬件连接和OV7620 的同步读取时序分别如图3 和图4 所示。
蓝牙发送模块接口电路
图3 蓝牙发送模块接口电路
OV7620 同步读取时序图
图4 OV7620 同步读取时序图

通过时序图可知,DSP 先捕获摄像头的场中断信号,准备好存储一帧图像的数组。然后,DSP 等待HREF 行中断信号。最后,在行中断中判断PCLK信号,当PCLK 处于高电平时,DSP 读取该像素值。为了在不丢失手势特征信息的前提下采集尽量小的图像,DSP 采集视野中间隔行的100 × 100 大小的图像,存放在100 × 100 的数组中。通过修改读取程序可以改变采集图像的大小。

2.3 内存及DSP 网络通信设计

本系统采用RTL8019AS 与DSP1 通过连接对应的地址数据总线,设置片选信号,实现DSP 的以太网通信。RTL8019AS 与DSP1 的硬件连接如图5 所示。

RTL8019AS 内部有两块RAM 区,一块16 K 字节,地址为0 × 4000 ~ 0 × 7FFF; 一块32 个字节,地址为0 × 0000 ~ 0 × 001F。RAM 按每256 字节为一页存储。一般将RAM 前12 页( 即0 × 4000 ~ 0 ×4BFF) 存储区作为发送缓冲区; 后52 页( 即0 ×4C00 ~ 0 × 7FFF) 存储区作为接收缓冲区。第0 页只有32 字节( 地址为0 × 0000 ~ 0 × 001F) ,用于存储以太网物理地址。要接收和发送数据包就必须通过DMA 读写RTL8019AS 内部的16KB RAM。
RTL8019AS 与DSP1 硬件连接图
图5 RTL8019AS 与DSP1 硬件连接图

2.4 红外遥控模块电路设计

红外遥控模块包括三个部分: 接收部分、发送部分和数据处理部分。接收部分包括光电转换、解调、高速采样以及数据分析等模块,发送部分包括遥控发送和电光转换模块,数据处理部分包括中央处理以及存储模块。

3 系统软件设计

3.1 手势图像预处理算法

手势图像提取算法选择帧间差分的方法实现手部图像分割。利用间隔短暂时间的两帧图像比较,获取两张图像运动方向的手部围成的一小段白色区域,然后采用阈值分割的方法对获取的图像二值化,消除噪声,最后根据此图像序列含有的白色像素点的多少来确定图像序列中有无物体存在。对手势图像预处理的算法描述如下:

1) 从视频图像序列中选取相邻n 帧的两帧图像,其中前一帧图像为Pk-1( x,y ) ,如图6( a) 所示,后一帧图像为Pk( x,y) ,如图6( b) 所示;
从视频图像序列中选取的图像
图6 从视频图像序列中选取的图像

2) 为了减少计算量,将480 × 640 的图像隔4 行6 列提取像素点,左右各忽略20 列,上下各忽略40行,获得两帧100 × 100 的图像
和,如图7( a) 和7( b) 所示;
缩小后的图像
图7 缩小后的图像

3) 计算后一帧与前一帧的差为Gk( x,y) ,得到目标的变化量,如图8 所示;
两幅图像的目标变化量
图8 两幅图像的目标变化量

4) 对帧间差分法得到的图像按选定的阈值进行二值化,得到目标图像序列的二值化图像序列Fk( x,y) ,如图9 所示。其中,
目标图像序列的二值化图像序列Fk( x,y)
式( 1) 中,T 为阈值。对于给定视频序列的图像,假设像素点k 处没有运动,其帧差dk服从均值为0,方差为σ2 的Gauss 分布N( 0,σ2) :
公式2
式( 2) 中,H0表示无运动假设,σ2 是帧差的统计方差,通常认为它等于摄像头噪声方差的两倍。根据概率统计假设检验“3σ”法则和“正确的阈值T 应该能消除大部分噪声”的原则。经试验测试得阈值T选择在35 ~ 45 之间比较合适。二值化后的图像如图9 所示。观察Fk( x,y) 的图像序列,可以看到图像中的噪声很少,这是因为①帧间差分法达到了加大目标信息的权重,同时抑制了静态背景的效果;②摄像头采集范围背景比较单一,光线均匀。

Fk( x,y) 中主要存在两大类的噪声。一种是由于光线变化产生的噪声,这种噪声往往以孤立的黑色像素点的形式出现。第二种噪声是一些面积较小的背景块。为了尽可能消除这两种噪声,可以求每个N × M 小块的灰度平均值,根据灰度平均值可估计出白色区域的大小。当灰度平均值小于某一阈值时,可以认为是噪声,把对应的N × M 个点赋值为0。算法实现如下:

( 1) 建立一个大小是Fk( x,y) 的1 /25 倍的矩阵来存20 × 20 个5 × 5 像素块的平均灰度值fk( x,y) 。

( 2) fk( x,y) 和Hk( x,y) 满足如下关系:
公式3
噪声消除后的图像
图10 噪声消除后的图像

通过这种处理方法,原图像中的小块噪声和椒盐噪声基本被消除,手部图像边缘的某些像素点也会被当作噪声消除,但是不影响后续处理。经过噪声消除后的图像如图10( a) 所示。使用同样的处理算法,可以得到后一帧的图像处理结果如图10( b)所示。

3.2 特征提取及动作识别

获取只含手部运动区域的图像Hk( x,y) 和Hk+1( x,y) 后,扫描出手部图像边界,通过比较与计算判断手摆放位置和区域中心位置Pk( xk,yk) 和Pk+1( xk+1,yk+1) 。手部摆放位置可以判断手的上下或是左右运动。图像处理和特征提取流程图如图11 所示。

(1)Hk+1( x,y ) 和Hk( x,y ) 是相同的纵向摆放位置,手部在左右运动。

(2)根据列坐标的大小来判断手左右方向的移动如下:
根据列坐标的大小来判断手左右运动方向
判断上下运动的算法与判断左右类似。若出现无法判断的情况,则重新采集图像,进行处理和判断,直到能够判断方向为止。
图像处理算法流程图
图11 图像处理算法流程图

3. 3 红外遥控算法原理

本系统选择最常用的一种编码方式uPD6121进行学习、解码和发射。红外遥控器的红外信号一般都是通过38 ~ 40kHz的载波调制而成。先对接收到的红外信号进行解调,再记录遥控编码信号的脉冲宽度。学习子程序的流程图如图12 所示。采用计数器对信号高低电平计数的方法采集数据并保存。

发射模块根据DSP2 发送的指令找到对应的编码信号在外扩RAM 的位置,将编码调入内存,然后通过编码发送子程序,将编码调制在38 kHz 载波上发送出去。用定时中断0 产生38 kHz 的载波信号,用学习到的遥控编码信号的低电平去控制载波输出,此时定时器0 定时长度由相应的遥控信号低电平宽度计数值确定。如果需发射的遥控信号为高电平,关定时中断0; 如果为低电平,则开定时中断0,从而实现遥控信号的脉宽调制发射。发射子程序流程如图13 所示。
学习子程序流程图
图12 学习子程序流程图

发射子程序流程图
图13 发射子程序流程图

3. 4 网卡驱动程序及上位机软件设计

3. 4. 1 网卡驱动程序及UDP 协议实现

RTL8019AS 已经实现以太网通信物理层功能,只需初始化芯片相应的寄存器,编写DSP 下驱动,便可启动RTL8019AS。本系统采用TCP /IP 协议族中的UDP 协议( user datagram protocol) 进行通信,实现通过网络把DSP 采集到的图像信息发送到上位机。

3. 4. 2 上位机软件编写

上位机软件采用C#语言编写,实现UDP通信协议。上位机软件实现接收下位机的数据,还原图像数据并显示等功能。同时,上位机还可以向下位机发送命令,方便系统调试。

3. 4. 3 图像数据发送及还原

下位机采用UDP发送数据,把数据的每一行作为一个UDP数据包,一幅图像分成100个数据包进行发送。为了让上位机完整接收一幅图像,在每幅图像开始发送之前,先发送一个规定的帧开头数据包,在每一幅图像发送完毕之后,也发送一个规定帧结尾数据包。上位机根据这些标定将100个数据包利用C#语言的相关函数,转换一定的图片格式,在上位机进行显示。

4 系统测试

4. 1 测试流程

创建手势样本库、手势图像预处理、特征提取、实时手势图像与库模型预测、识别结果、执行操作等。

4. 2 测试结果

本设计自定义手势及编号如图14所示,其中手势1表示开机,手势2表示关机、手势3表示换台的递增,手势4表示换台的递减,手势5表示音量增加,手势6表示音量减小等功能。

对组装好硬件电路系统进行整体测试。测试者在摄像头的拍摄范围内进行上述6种手势各从左向右、从右向左、从上向下和从下向上10次缓慢运动,在每种手势40次的识别中识别率如表1所示。
手势识别率表格
表1 识别率

测试结果表明,本算法识别手势的准确率在96%左右,遥控的有效范围在4 m 左右,能够实现电视机的频道更换和音量调节功能。

5 总结

本文设计的手势识别电视遥控器系统,利用摄像头使手势动作与电视机进行交互,采用红外信号遥控电视机,在红外传输有效距离内,可以根据个人喜好,任意改变手势识别样本库系统,使得电视遥控更加人性化,并为实现家庭数字设备操控一体化提供可能。

自定义手势

图14 自定义手势

点击:
关键字:手势识别,电视遥控器
分享到QQ空间 分享到新浪博客 分享到人人网 分享到腾讯微博 分享到微信