您的位置 首页 分销

根据FPGA的手势语音转换器

本文所设计的手势语音识别器大大提高了残疾人与正常人进行交流沟通的方便性。系统的开发与利用将可以促进手势识别技术的发展,具有很强的实用性和广阔的应用前景。

摘要:

一向以来,聋哑人与健康人之间的沟通就十分的困难,特别是没有学习过手语的人。咱们的这个项目旨在打破这个妨碍,让没学过手语的人也能听见聋哑人的心声。咱们的手语语音转化器意图便是便是通过它供给一种有用的途径将聋哑人的手势辨认出来,并转化成咱们普通人所习气的语音信息,然后完结聋哑人与咱们的有用沟通。现在手语辨认能够分为依据视觉的辨认体系和依据数据手套的辨认体系。依据视觉的手势辨认体系选用常见的视频收集设备作为手势感知输入设备,价格便宜、便于装置。鉴于依据视觉的手势辨认办法交互天然便当,适于遍及运用,且更能反映机器模仿人类视觉的功用,咱们这次的辨认办法为依据视觉的手势辨认。

1 序言

1.1 项目布景与剖析

一向以来,聋哑人与健康人之间的沟通就十分的困难,特别是没有学习过手语的人。咱们的这个项目旨在打破这个妨碍,让没学过手语的人也能听见聋哑人的心声。咱们的手语语音转化器意图便是便是通过它供给一种有用的途径将聋哑人的手势辨认出来,并转化成咱们普通人所习气的语音信息,然后完结聋哑人与咱们的有用沟通。

现在手语辨认能够分为依据视觉的辨认体系和依据数据手套的辨认体系。前者需求运用者戴上数据手套,这就给运用者构成必定的不便利,依据视觉的手势辨认体系选用常见的视频收集设备作为手势感知输入设备,价格便宜、便于装置,供给了愈加天然、直接的人机交互办法。在往后的开展中,手势辨认是有着很大的远景,在人机交互中起着不行忽视的作用。

咱们这次的辨认办法为依据视觉的手势辨认。手势辨认分为动态手势辨认和静态手势辨认,动态手势界说为手运动的轨道,而静态手势着重通过手型传递必定的含义。本文研讨静态手势辨认。静态手势辨认一般是依据视觉的2D手势辨认,规划一个手势语音的转化器能够说给聋哑人带来了福音,处理了聋哑人与健康人的沟通困难。

本文所规划的手势语音辨认器大大提高了残疾人与正常人进行沟通沟通的便利性。体系的开发与运用将能够促进手势辨认技能的开展,具有很强的实用性和宽广的运用远景。

手势辨认还能够运用到许多其他的机器视觉范畴,完结人机之间的更好的交互,在越来越重视用户体会的今日,手势辨认的定会在往后的交互中大放异彩。

1.2 现在相关技能的研讨及运用状况

当今社会中中传统的人机交互办法现已不能满意人们对现代日子办法的寻求。传统的一些交互办法在舒适性,易用性,趣味性,个性化等方面现已越来越凸显出不足之处。天然言语是人类沟通的首要手法,通过言语同核算机攀谈无疑是广阔核算机用户朝思暮想的希望新式直观天然的交互办法如动作交互,语音交互越来越成为日子中必要的办法,可是因为因为其技能复杂度高、环境搅扰要素较大、数据处理量大、本钱高,研制速度和研制水相等遭到严峻的限制,可是, 现代化开展的今日,人们又迫切需求愈加舒适愈加天然的交互办法,现在的交互办法逐步不能满意人们的要求。

现在,国内外相关技能研讨大多还处于理论研讨阶段,许多技能都不老练,手势辨认技能却很罕见比较老练的产品呈现,根本上处于理论研讨阶段,即便有,也仅仅对一些简略的动作通过加速度等传感器来完结,相对比较简略。但还没有能将手势通过图画辨认出来的相关产品,咱们的手势语音辨认器便是在手势动作辨认的基础上完结的,将该技能运用在处理聋哑人的言语沟通问题,咱们在这儿对其进行了测验。

2 体系功用描绘及规划

2.1 功用概述

上图是手势语音转化器的体系结构结构图,在手势辨认的时分需求做到准确性,实时性的要求。咱们的规划运用图画传感器在外界环境中的手势图画进行实时收集,通过咱们的体系渠道对图画进行一系列的处理之后,转化为对应的语义,再运用语音组成芯片变为文字语音输出。将手势转化为对应的语音含义输出。其功用结构结构图如下:

2.2 详细计划挑选

2.2.1 图画收集模块

两个计划 1.直接运用USB摄像头进行图画收集2.运用模仿摄像头,通过AD芯片转化

计划一

长处:直接运用电脑的USB摄像头,尽管是CMOS摄像头,可是摄像头现已内置DSP芯片,无需再对模仿数据进行AD转化,FPGA芯片能够直接运用,并且USB接口规范现已十分遍及,所以此计划将会运用很遍及并且十分遍及。咱们也装备了USB摄像头。

缺陷:USB协议十分复杂,不得不熟悉USB协议,可是USB协议学习要很长的时间,别的要增设USB的主从芯片(USB-HOST,比方SL811HS)。这也将会使咱们的项目发展愈加缓慢。

计划二

长处:选用美国OmniVision公司开发的CMOS五颜六色/是非图画传感器芯片OV7620,此芯片的功用比较强壮,外围元件的衔接也很少,能够担任。

缺陷:需求自己衔接硬件电路,收购CCD或CMOS模仿摄像头,并且FPGA内部有必要规划驱动OV7620的电路逻辑。且转化过来的数据量或许比较大,并且需求FPGA里许多的BRAM作为数据缓存。

终究,咱们挑选了计划二作为咱们图画收集的终究计划。

2.2.2 图画收集辨认处理

图画收集处理单元首要包含图画的实时收集,滑润处理、图画区域切割、图画肤色提取、图画矩特征提取和匹配等几个部分。其意图是通过实时的图画收集,得到手势的图画信息,再进行处理得到相应的语义含义。

收集来的图画数据量大,收集来之后咱们应对图画进行预处理,去除图画中的布景噪声,然后提取其特征,现在的特征提取办法有依据图画纹路的特征提取,依据图画形状的特征提取。关于收集得到的图画,其包含了许多的数据,并且收集来的图画的布景的复杂性以及含有噪声,咱们要将图画进行预处理,包含对图画进行滑润,图画增强等一些预处理来消除噪声,布景等对后续处理的搅扰。预处理的意图是改善图画数据,按捺不需求的变形或许增强某些关于后续处理来说比较重要的图画特征。

2.2.3 语音组成模块

一.运用语音组成芯片

芯片挑选是OSYNO6188嵌入式中文语音组成芯片,通过异步串口接纳待组成的文本,可直接通过PWM输出办法驱动扬声器,亦可外接单支三极管驱动扬声器,即可完结文本到声响(TTS)的转化。支撑国家规范GB_2312 一切汉字。

一.自行规划语音组成体系

自行规划的语音体系首要要考虑计划的难易程度问题,现在技能上面选用时域和频域的办法进行语音组成。考虑到计划完结的问题以及现有器材状况,考虑选用较简略的波形修正法,将较短的数字音频段(即组成基元)拼接并进行段音滑润后生成接连语流的办法。这种办法占用的存储空间大,但核算量小、核算速度快,并且组成语音天然度较高,明显比较适合于芯片功用较弱的嵌入式体系方面的运用。

语音组成将选用串口与上位机进行衔接。欲发音汉字的国标码(GB码)由串口送入MCU,MCU将其映射为Flash存储器地址表中对应项的地址,然后依据此地址获得对应项中的指令字,由MCU依据该指令字读取该汉字发音对应的语音数据,接连读出语音数据并以游程码解码算法解码后,依照语音采样时的固定速率通过D/A转化和功率放大播映。本文中语音采样速率为11025B/s。为满意运用需求,本文首要构建易于快速解码的语音库,依据特定Flash存储器的存储格局,以快速多查找表寻址及指令字预先存储的办法安排并存储在Flash存储器中,以满意语音播映的实时要求。相同,MCU的代码也要优先考虑速度而献身比如模块化、可读性方面的要求。终究,出于实用性考虑,体系中需参加满意的输入缓冲区支撑,以满意一次输入多个流字或整句的要求。

一.运用语音组成芯片

长处:运用现有的资料,能够加速整个课题的进展语音组成芯片现已成型,体系运转的质量和作用比自行规划的芯片作用要好体系的可靠性更高

缺陷:芯片会添加整个体系的本钱运用芯片无法充沛运用FPGA的片上资源

二.自行规划语音组成芯片

长处:自主规划语音组成部分,添加了整个体系的技能含量和含金量,充沛开发了Xilinx开发板的片上资源,下降了整个体系的本钱

缺陷:开发的难度加大,开发的周期加长,自主开发的体系没有现有的语音组成芯片功用强壮以及安稳

归纳考虑:我决议在计划的初期运用语音组成芯片,因为这样会加速体系的开发进程,让咱们有更多的时间和精力放在手势辨认和处理方面。

在计划的后期考虑自行开发语音组成芯片,运用FPGA的片上资源。

在这儿咱们分为两部分:前段文本剖析部分和后端语音组成部分。

3、体系硬件规划

3.1 依据FPGA的片上体系规划

本文完结了一个依据FPGA的片上体系,该片上体系能够完结术中图画的实时收集、辨认匹配和其他外设的操控。该体系用XILINX公司EDK(Embedded Development Kit)软件开发,是一个依据Microblaze的嵌入式体系。体系该体系架构如上图所示。

MicroBlaze软核是一种针对Xilinx FPGA器材而优化的功用强壮的32位微处理器,适用于一切现产的FPGA器材MicroBlaze软内核和其它外设IP核一同,能够完结可编程体系芯片(SOPC)的规划MicroBlaze软内核选用RISC(reduced instruction system computer)架构和哈佛(Harvard)结构的32位指令和数据总线,内部有32个通用寄存器R0~R31和2个特别寄存器程序指针(PC)和处理器状况寄存器(MSR)MicroBlaze还具有指令和数据缓存,一切的指令长度都是32位,有3个操作数和两种寻址办法,指令功用区分有逻辑运算,算术运算,分支,存储器读/写和特别指令等,指令履行的流水线是并行流水线,它分为3级流水线:取指,译码和履行。 Microblaze软核,片上本地存储器,规范总线互连以及依据片上外设总线(OPB)的外围设备构成了MicroBlaze嵌入式体系。

3.2 视频收集模块规划

3.2.1 视频收集芯片

本项目运用的视频解码器是图画传感器选用美国OmniVision公司开发的CMOS五颜六色图画传感器芯片OV7620,该芯片将CMOS传感器技能与数字接口组合,是高功用的数字图画传感器,可供给五颜六色/是非多种格局的输出;内置10位双通道A/D转化器,输出8位/16位图画数据;具有主动增益和主动白平衡操控,能进行亮度、对比度、饱和度等多种调理功用。可通过SCCB进行内部寄存器编程装备。只需求外接一个27MHz的晶振,就可输出数字视频流的一同还供给像素时钟PCLK、行参阅信号HREF、笔直同步信号VSYNC,便于外部电路读取图画,并可编程设置HREF、VSYNC在图画部分开窗,输出窗口图画。它支撑接连和隔行两种扫描办法,VGA与QVGA两种图画格局;最高像素为664492,帧速率为30fp8;数据格局包含YUV、YCrCb、RGB三种,能够满意一般图画收集体系的要求。OV7620内部可编程功用寄存器的设置有上电办法和SCCB编程办法。本体系选用SCCB编程办法,接连扫描,16位YUV数据输出。

在这儿咱们要用到SCL和SDA对图画传感器进行装备,传感器有16位的数据输出还供给像素时钟PCLK、行参阅信号HREF、笔直同步信号VSYNC。

VSYNC是笔直场同步信号,其下降沿表明一帧图画的开端;HREF是水平同步信号,其上升沿表明一行图画数据的开端;PCLK表明输出数据同步信号

3.2.2 SCCB总线对OV7620的装备

OV7620的操控选用SCCB(SeriaI Camera ControlBus)协议。SCCB是简化的I2C协议,SIO-l是串行时钟输入线,SIO-O是串行双向数据线,别离相当于I2C协议的SCL和SDA。SCCB的总线时序与I2C根本相同,它的呼应信号ACK被称为一个传输单元的第9位,分为Don’t care和NA。Don’t care位由从机发生;NA位由主机发生,因为SCCB不支撑多字节的读写,NA位有必要为高电平。别的,SCCB没有重复开端的概念,因而在SCCB的读周期中,当主机发送完片内寄存器地址后,有必要发送总线中止条件。否则在发送读指令时,从机将不能发生Don’t care呼应信号。因为I2C和SCCB的一些纤细差别,所以选用GPIO模仿SCCB总线的办法。SCL所衔接的引脚一向设为输出办法,而SDA所衔接的引脚在数据传输进程中,通过设置IODIR的值,动态改动引脚的输入/输出办法。SCCB的写周期直接运用I2C总线协议的写周期时序;而SC-CB的读周期,则添加一个总线中止条件。OV7620功用寄存器的地址为0x00~0x7C(其间,不少是保存寄存器)。通过设置相应的寄存器,能够使OV7620作业于不同的办法。

SCCB的寄存器是EEPROM,由所以OV6620/OV7620的片内EEPROM,安稳性不高。尽管理论上SCCB写入一次,毕生受用,可是数据简略丢掉,因而,SCCB程序的写入应在读图画之前每次写入,并把IICENALBE拉高使能,使SCCB寄存器起作用。

下面列出了一些常用的OV7620寄存器:

在对OV7620进行装备的时分,主设备有必要做以下操作:

①发生开端/中止信号

②在 SCL上施加串行时钟

③将7位从设备地址,读写位和8位子地址串行放到 SDA 上

读的一方有必要在承认位时间里拉低 SDA,回来一个承认位作为对写设备所写数据的承认。

在写周期里,OV7620 回来承认位,在读周期里,主设备回来承认位,除非读的数据是终究一个字节。假如读的数据是终究一个字节,主设备并不回来承认位,告诉从设备读周期能够中止。每一字节内,最高位总是先传输。读/写操控位是榜首字节的最低位。规范 IIC 通讯仅需两个管脚:SCL 和 SDA。 SDA 设置成开漏双向端口。SCL 为高时,SDA 上从高到低的转化表明开端。SCL 为高时,SDA 上从低到高的转化表明完毕。只要主设备能够发生开端/完毕信号。

除了以上两种状况外,协议要求 SDA 在时钟 SCL位高电平器材坚持安稳。只要当 SCL为低时每一位才答应改动状况

OV7620 的 SCCB接口支撑多字节读写操作。主设备有必要在写周期而不是读周期内供给子地址。因而,OV6620/7620 读周期的子地址是前一个写周期的子地址。在多字节读写周期中,在榜首个数据字节完结后,子地址主动递加,使得接连方位的存取能够在一个总线周期内完结。多字节周期改动了本来的子地址。因而,假如在一个多字节周期后有一个读周期,就有必要刺进一个单字节写周期来供给新的子地址。

SCCB的详细完结:

OV7620支撑单个从设备.,当一只要仅有个从设备时,6620 ID须置为0XC0 (写)和0XC1 (读)。7620 ID是0X42(写)和 0X43(读)。 在写周期中,IIC 总线上的榜首个字节是挑选单个片内寄存器的子地址,第三个字节是读写该寄存器的数据。写一个未界说的子地址将被疏忽。在读周期中,I%&&&&&% 总线上的榜首个字节是读写该寄存器的数据,子地址用前面的。读一个未界说的子地址,回来数据不定。

3.2.3 OV7620收集图画的流程

咱们的收集是接连收集办法,用到了三个同步信号:像素时钟PCLK、行参阅信号HREF、笔直同步信号VSYNC,在这三个信号中,因为咱们选用的是GPIO来作为图画数据的收集端口,而通过咱们的测验,GPIO端口的时钟频率在5MHz,而在咱们的ov7620的三个同步信号里边,PCLK的周期最短,当ov7620选用27MHz的体系时钟频率的时分,默许的PCLK的周期为74ns,而咱们的microblaze的中止呼应时间远大于这个周期,在图画数据的匹配的时分,咱们只能通过改动Ov7620的寄存器的值来下降ov7620的PCLK频率。通过设置时钟频率操控寄存器,可将PCLK的周期设为200ns。

3.2 语音组成模块

3.2.1语音组成芯片OSYNO6188

运用语音组成芯片OSYNO6188嵌入式中文语音组成芯片,通过异步串口接纳待组成的文本,可直接通过PWM输出办法驱动扬声器,即可完结文本到声响(TTS)的转化。支撑国家规范GB_2312 一切汉字。

该模块OSYNO 6188 供给一组全双工的异步串行通讯(UART)接口,完结与体系板相衔接,进行数据的传输。OSYNO 6188运用TxD和 RxD 以及 GND 完结串口通讯。其间GND 作为信号地。

其端口特性如下:1、 初始波特率:1200 bps ,开端位: 1 , 数据位:8 ,校验位:无,中止位:1 ,流操控:无。

信息终端以信息帧格局向 TTS 芯片发送指令码,对 TTS芯片进行体系设置。TTS芯片依据指令码及参数进行相应操作,并向信息终端回来指令操作成果。规则每个信息帧最多 56 个字节,榜首个字节为开端字节 0x01,第二三四个字节为参数描绘字节,后边最多跟着 50个数据字节,以 0x04为完毕字节,终究一个字节为发送异或校验字节。

3.2.2语音组成芯片的数据包办法:

每次都是以数据包的办法进行传送,其办法如下:

实践输出典范:

  1. 汉字语义:这是咱们的手势语音转化器

输出数据包:0x1 0x80 0x87 0xE1 0xD5 0xE2 0xCA 0xC7 0xCE 0xD2 0xC3 0xC7 0xB5 0xC4 0xCA 0xD6 0xCA 0xC6 0xD3 0xEF 0xD2 0xF4 0xD7 0xAA 0xBB 0xBB 0xC6 0xF7 0xA3 0x8D 0xA3 0x8A 0x4 0xF1

  1. 汉字语义:该手势意思是A

输出数据包:0x1 0x80 0x87 0xE1 0xB8 0xC3 0xCA 0xD6 0xCA 0xC6 0xD2 0xE2 0xCB 0xBC 0xCA 0xC7 0xA3 0xC1 0xA3 0x8D 0xA3 0x8A 0x4 0xA7

  1. 汉字语义:没有找到该手势的意思

输出数据包:0x1 0x80 0x87 0xE1 0xC3 0xBB 0xD3 0xD0 0xD5 0xD2 0xB5 0xBD 0xB8 0xC3 0xCA 0xD6 0xCA 0xC6 0xB5 0xC4 0xD2 0xE2 0xCB 0xBC 0xA3 0x8D 0xA3 0x8A 0x4 0xCD

4、软件规划

4.1 图画的预处理

在摄像头传入的信号受环境的影响,后期的转化,总要构成图画的某些降质。有必要考虑对图画进行改善处理。关于手势辨认体系,咱们首要用到一些图画增强技能。

图画增强技能一般有两类办法:空间域法和频率域法。

空间域法首要是空间域中对图画像素灰度值直接进行运算处理。

频率域法只要是将图画改换到其他域中,对图画改换值进行一些操作后,再改换会本来的空间域。一般选用傅立叶改换对图画操作。

在本体系规划中,软件选用了图画的滑润,根本现已够用。而图画的改换域处理办法没有选用,首要是软件在时间域处理的作用现已够用了。

图画的锐化处理没有选用,因为在完结中发现作用不是很好,并且引进了噪声。

4.2.1 图画的滑润处理

本体系的滑润用到了模板操作滑润,将原图中的一个像素的灰度值和它周围附近的八个像素的灰度值相加,然后求得平均值(除以9),取平均值作为新图中的灰度值。

滑润模板能够滤掉必定的噪声,可是也有必定程度的含糊。这儿,咱们选用了不同的矩阵模板来消除不同状况下的噪声。其间用到的模板有:

通过滑润处理后的图画接着送图画切割处理,然后切割出人体区域和布景图画区域。

4.2.1 图画的布景减法

图画布景减法在图画的切割的前期作业起到了必定的作用。

(1)初始化布景 没有远景方针进入环境之前,首要对布景接连收集n幅图画,通过这n幅图画,能够树立一个初始布景的核算模型,布景中的每个点i,界说

为该点的色彩希望,为色彩值散布的方差,有如下的公式:

其间为i点在t幅图画中的色彩值。这样,一切的点构成了初始布景模型。

(2)远景区域的提取 初始布景树立往后,关于每一幅新收集的当时土地,就能够进行远景区域的提取了。设当时图画中点i的色彩值为,能够通过以下公式将图画二值化:

其间,一切标志为1的点构成远景区域,为0的点构成布景区域,k为自行设置的常数。K值的选取对切割作用具有直接的影响,当k过小时,提取了手部区域的一同还提取了部分的布景区域;当k过大时,会使提取的手部区域不完整。通过许多的试验,选取k=4时能够获得较好的切割成果。

(3)布景模型更新 跟着时间的推移,布景中不行避免的会发生一些改动。假如一向运用开始的布景模型,长时间后就会发生较大的差错。为了处理这个问题,选用了布景模型更新的办法。设平均值和方差别离为时间t点i的色彩希望和方差, 为时间t收集到的图画中点t的色彩值,则t+1时间,有:

其间α为学习率,可依据实践状况进行调停。这样,布景模型在每一时间不断的得到更新,以便和实践状况尽或许坚持共同。

完结如下:

n张图片中一副布景图片:

图1-1 布景图片

远景图片混合布景图片:

图1-2 远景图片混合布景图片

布景图画减法处理之后的成果

图1-3 布景减法处理后得到的图画

调查处理成果能够得到,手部的图片大致地保存下来,布景图片绝大部分被剪掉了。

布景减法的缺陷是,假如布景和远景色彩挨近,远景图片的数据会丢掉,如上图,手部图画里边有黑色条纹,这是布景图片部分像素值和远景(及手势图画像素)挨近,而被减掉了。别的,经布景减法处理后的图画,边际部分会呈现锯齿,所以要继续进行形状学滤波、空泛填充和中值滤波处理的到终究的切割成果。

布景图画减法需求和图画肤色提取一同运用,相得益彰才干得到比较好的处理成果。

4.2 图画的肤色提取

图画处理中区别人体与外界的一个很大的特征便是肤色,通过这一特征能够将图画切割成众多分立的小块。通过这一个操作后图画面积大大削减,提高了处理功率的一同又削减了许多外界环境的搅扰,是图画处理中的很重要的一环。

人体的皮肤肤色受许多种要素的搅扰,这手部图画的提取带来了许多的困难。例如不同人种的肤色就有不同差异,不同的人也有纤细的差异,就算是同一人不同身体不同部位肤色也有些差异。肤色相同遭到外界环境的影响,这其间最首要的便是光照。通过剖析发现,光照要素分为光照强度,是否直射和光照色彩这几个部分,其间后两者是能够人为操控的(手的正面比较润滑,在光直接照耀时呈现反射,导致摄像头捕获的数据是纯白色,而大多数搅扰也是白色),而光照强度择优光照间隔的远近,是否遮挡以及周围环境反射状况决议。假如在室内,按现在的光照环境(光照环境分为天然光环境和人工光环境,现在照明首要选用日光灯,能够疏忽光照色彩的影响,照明比较充沛时,间隔也能够疏忽),能够只考虑遮挡带来的肤色改动,而遮挡本质也便是亮度的改动,假如有某个色彩状况不受亮度影响或与亮度是简略的线性联系(也便是零阶对应联系或一阶对应联系,高于一阶则对搅扰过于灵敏,规律性不强)。

2.1 色彩空间的挑选

肤色提取常用的色彩空间除RGB外还有YUV、HSV等,在光照改动时,肤色在RGB色彩空间中的值都有较大的改动,有必定的线性度,但很简略受搅扰(肤色发生较小的改动时,其值改动过于剧烈),不能直接用来做肤色提取,假如在YUV空间中,则Y值剧烈改动,线性度较差,而U、V则呈现非线性改动,也不便利于作为肤色提取的色彩空间,而通过对HSV空间中的剖析也不太抱负,首要是在这些之中S、V尽管动摇相对较小,但规律性不强,H简直捕捉不到其规律性,且其转化进程也过于繁琐,相比之下RGB略为占优。

图2-4 RGB随亮度的添加的改动示意图

2.2 肤色的特征值

在调查HSV色彩空间中的H值转化时发现R、G、B彼此之间差值的动摇规模较小,并且调查R-G与G-B比H值愈加有用,因为它们在亮度改动时只要细小的动摇,例如在对某一个人进行测验时R-G仅在15-35之间动摇,G-B则在18-33动摇,且动摇并不是由光照直接导致,其依据便是在光照比较激烈的状况下和光照很弱的状况下,其动摇的规模并没有因而而改动,监狱对这个特性的研讨,咱们提出了一种不同于以往的肤色提取的办法,下面的公式便是将肤色提取并转化为灰度图画的一个经历方程。

上式中:C表明表征肤色的量(肤色标量),数值越小越挨近肤色;R、G、B为RGB色彩空间的三种色彩的值;i,j表明横向和纵向的坐标值。下面的批改公式各参数的含义与此处相同。

2.3 搅扰按捺

因为肤色亮度规模也并不是越大越好,在过亮和过暗的状况下会引进许多不必要的搅扰,需求依据亮度的规模对这些搅扰进行按捺。为了简化核算,在已有的基础上能够仅用G来代表亮度(C较大时批改值的比重很小,能够疏忽,C较小时R,G,B彼此间的差在一个很小的规模内,G与亮度的线形相关度较好,且两个差值都与G有关),肤色的亮度规模大致在10-170,按捺项选用|90-G|时作用最好,通过屡次试验,终究将这一系数确定在了2,这样的补偿能够使阈值在一个规模内调整,对过亮和过暗的色彩进行按捺作用,终究得到的肤色经历公式为:

图2-5动态阈值示意图

2.4 表征肤色的二值化图画

因为公式中触及到了二次项,而批改项为一次项,这使得灰度值与G-B,G-B在三维空间中表现为一个相似抛物面的曲面,这样,肤色转变到非肤色时,C的值改动将会很敏捷(阈值为1000时,R-G或G-B改动1,阈值将改动45-65),假如要将灰度图画转化为二值化图画,阈值的规模将比较自在,通过剖析发现,不考虑批改项时,阈值取在200-900间的值时,图画的改动并不大。从按捺搅扰的视点动身,以及对后边的面积处理算法的归纳考虑,咱们将阈值定在1000。

咱们在后期的处理中首要用二值化后的图画进行形状学的处理,而灰度图画则因为其数据信息量较大,用于后期的特征提取的批改。

二值化图画的获得办法是阈值的处理,其间阈值有表征肤色的RGB值求出,当算得量在阈值内时,取为1(色彩值为255),当算得量超越阈值时,取为0(色彩值为0)。

4.3 区域切割处理

肤色提取确实将图画处理成了一块块的分立区域,但体系并不知道这些区域的方位、巨细等信息,在进行后续的处理前有必要将这些区域切割出来。

4.3.1 笔直投影与切割

图画通过肤色提取之后构成一个个分立的肤色区域,当然也存在一些搅扰,接下来的作业便是将这些区域进行切割,确保终究进行辨认时每个单元都只要一块简略肤色区域,并且要求算法具有优秀的抗搅扰性。

图画中,能够通过肤色提取挑选的首要是人的面部,手以及手臂。从人体结构与一些平常的动作考虑,假如在水平方向上投影,则会经常呈现手与手的堆叠或手与脸的堆叠(这儿不切割手与手臂的区域),而在笔直方向则相对不太简略构成堆叠。依据对此的考虑,咱们只进行了笔直方向的投影,用来切割笔直的区间。

笔直投影只需在肤色处理时同步将一切值向下累加即可:

上式中:T表明投影值;C表明肤色标量;i,j别离表明横向和纵向坐标。

剖析这些投影曲线,将其间投影值较大且接连散布的区域切割出来,在图画上,就将图画切割成了笔直的长条状的区间,而这些长条区间仍是有或许是由多个堆叠的投影叠加而成,所以有必要进行进一步处理。

4.3.2 水平积分与切割

笔直投影并没有将各个区域切割开,但却为水平投影供给了可行性。假如对每个区间都再进行一次投影,作业量比较大,其实有许多简略的修正办法:在作笔直投影时,顺带做一次水平从左到右积分,那么笔直的长条图画右侧积分值减去左边的积分值就能够得到投影值,削减循环次数。在获取水平投影后,在重复方才的切割就能够大略的找到肤色区域存在的区间。

4.3.3 切割后的收拾

在完结后上述切割后发现,即便区间区分的阈值获得再恰当也会呈现将一个大的接连的区域被切割成多个小区域的状况,假如直接将相距比较近的区域进行组成,则由会呈现有些较近的区域无法切割开的状况,并且小面积的搅扰也有或许被和并成一个大区间,引进不必要的费事,针对这种状况,咱们将与大区间相邻的小区间兼并,而必定规模内无区间或只要小区间则将其放弃,这样,大区间别离的一些小区间能够被兼并,而聚在一同的搅扰则因为没有一个大区间作为中心而被放弃,在处理了区域割裂的状况的一同又完结了一些抗搅扰的功用。

4.3.4 面积挑选算法的选用

在二值化图画通过水平缓笔直方向上的积分挑选之后,总会有些肤色挨近的区域留传,可是,这些区域巨细不是很大,所以,咱们这儿选用了面积挑选的算法。

在图画对水平缓笔直方向进行投影的一同,核算水平缓投影方向阈值接连部分的长度,得到矩形区域的面积。

在这些面积中,将矩形面积过小的区域予以删去,得到如下的作用。

图3-1运用面积删选算法处理图片

剖析成果能够看到,因为手部矩形区域面积比较大,所以,手部矩形区域之外的挨近肤色搅扰小区块被去除掉了。当然,矩形面积算法也有瑕疵的当地,手指上端的图画被切掉了一小部分,并且手部矩形区域仍然有搅扰点的存在。

可是,归纳全体作用,能够看出,手部的形状特征得到了保存,因而矩形区域面积挑选算法可行。在后边的图画矩特征的提取现已够用。

4.4 图画矩特征提取及分配

即便知道了手势存在的区域,面积状况,可如此巨量的数据关于辨认来说仍是过于巨大了,面临这一问题,最常见的办法便是只提取概括,因为图画自身是一块关闭的区域,那么概括和区域图画能够彼此转化,也便是说:在这种状况下,概括和区域图画具有相同的信息量。而概括数据少的多,并且具有许多一维的特性,能够很便利地转成一维数据来进行剖析,这比直接剖析区域的二维特征愈加简略和直观。

在提取概括特征后进行几许矩的核算,则形状学特征转化成一维数据。

4.4.1 图形矩界说简略阐明

将一幅图画当作一个二维密度散布f(x,y),函数值f(x,y)表明点(x,y)处图画像素的亮度值。

图画f(x,y)的(p+q)阶几许矩的界说为:

其间f(x,y)是图形函数

是图画亮度函数f(x,y)界说的像素空间区域

是改换核

称为p+q级几许矩。

4.4.2 运用几许矩进行图画的形状描绘

图画不同阶的几许矩表明了图画亮度散布的不同空间特征。因而一个几许矩集能够成为一幅图画全体形状的描绘子。下面阐明其间一些几许矩的物理含义。

零阶几许矩代表一副图画的总高度。关于剪影图画,是方针区域的调集面积。

一阶几许矩,是图画关于x轴和y轴的亮度矩。其亮度的“矩心”

关于一副剪影图画,点给出了图画区域的几许中心。一般,能便利核算出将参照系原点移至图画亮度矩心的几许矩,称为中心矩。这一改动使矩的核算独立于图画的参照系。

中心矩:一幅图画相关于亮度矩心所核算出来的几许矩成为中心矩。它表明为:

这一矩相当于将坐标原点移至处,并核算得到了关于图画位移不变的中心矩

4.4.3 几许矩不变量

图画平面改换中具有不变形的几许矩函数被运用与方针辨别和办法辨认等范畴中,图画的形状特征通过一系列的核算能得到一组几许矩特征不变量的调集,能够用来辨认能够的不同巨细和不同方向上的具有相同特征的某一类图画。

依据Hu氏理论,通过各种不同等级几许矩的数学组合,能够得到七个特征量。这七个特征量具有当图画f(x,y)移动、滚动与份额巨细改动时坚持其数值不变的特性。因而称它们为不变矩特征量。这七个重量别离是:

其间:是归一化的中心矩:

不变矩特征量的平移、移动与份额巨细改动而其数值不变的性质以及其它这儿就不证明了。

正是因为几许矩具有这样的不随方位、方向、巨细的改动而改动的杰出性质,所以才将这一办法引证到手势辨认(手势图画的方位、方向、巨细极易发生改动)这一体系中来。

4.4.4 本体系的特征空间

考虑到完结的作用和核算复杂度,决议运用前四个不变矩特征量,并运用这四个矩的调集组合构成特征向量,因为这每一重量都具有旋转、平移、份额等不变性,故由其组合而成的矢量也具有相应的不变性。这样能够开始构成特征空间,取七个特征向量的前四个组组成特征空间。

4.4.5 图画矩特征的匹配

一副图画或一组图画集的特征向量或特征矩阵有必要与先验存储的一类特征向量或特征矩阵进行比较和匹配,以便树立给定图画和规范图画之间的共同性联系,用于办法辨认、方针辨别和图画分类中。

关于一种矩特征向量的前n个元素可组成一个有限特征向量。所以,咱们用下式来表明第k个图画所对应的一个特征向量:

咱们的样本图画取了四个特征量组组成矩特征向量。

下面的作业便是核算矩特征匹配算法的挑选。

核算办法有:

加权欧几里德间隔法,相联系数法,对数间隔法。

本体系首要用到加权欧几里德间隔法。

向量的加权欧几里德间隔法界说如下:

这儿表明对重量的加权系数,这样做能够在动态规模内平衡各变量。使得函数D取最小值的k所对应的图画被选作匹配图画。

4.5 完结成果及剖析

体系在Windows XP 的VC6.0环境下作业,再移植到Virtux-5开发板上。故这儿只做VC6.0处理的阐明。

图5-1 体系流程图阐明

4.5.1 手势图画几许矩的提取

下面列出几许矩核算的部分源码:

finger_charactor DIBBARYCENTERMOMENT(unsigned char *imgBufIn,int imgWidth,int imgHeight)

{

int lineByte=(imgWidth+3)/4*4;

int PixelValue;// 图象象素值

float nBarycentrMoment;//图画重心矩

float m00,m10,m01;//0次矩m00,x方向的一次矩m10,和y方向的一次矩m10

int BarycenterX,BarycenterY;//重心x y坐标

int i,j;

float temp;

finger_charactor temp_charactor;

m00=0;m01=0;m10=0;nBarycentrMoment=0;

int m02,m20,m11,m03,m30,m21,m12;

float u20,u11,u21,u30,u02,u12,u03;

float t1,t2,t3,t4,t5,t6,t7,t8,t9;

m02=0;m20=0;m11=0;

m03=0;m12=0;m21=0;

m30=0;u20=0;u11=0;

u21=0;u30=0;u02=0;

u12=0;u03=0;t1=0;

t2=0;t3=0;t4=0;

t5=0;t6=0;t7=0;

t8=0;t9=0;

//求0次矩m,x方向的一次矩m01和y方向的一次矩m10

for(j=0;jimgHeight;j++)

{

for(i=0;iimgWidth;i++)

{

PixelValue=*(imgBufIn+i*lineByte+j)/255;

m00=m00+PixelValue;

temp=i*PixelValue;//有问题的当地

m01=m01+temp;

temp=j*PixelValue;

m10=m10+temp;

}

}

BarycenterX=(int)(m01/m00+0.5);

BarycenterY=(int)(m10/m00+0.5);

printf(%d,%d\n,BarycenterX,BarycenterY);

*(imgBufIn+BarycenterX*lineByte+BarycenterY)=0;

*(imgBufIn+(BarycenterX+1)*lineByte+BarycenterY)=0;

*(imgBufIn+BarycenterX*lineByte+BarycenterY+1)=0;

*(imgBufIn+(BarycenterX+1)*lineByte+BarycenterY+1)=0;

int ii,jj;

ii=0;jj=0;

for(j=0;jimgHeight;j++)

{

for(i=0;iimgWidth;i++)

{

PixelValue=*(imgBufIn+i*lineByte+j)/255;

m00=m00+PixelValue;

temp=i*PixelValue;//有问题的当地

m01=m01+temp;

temp=j*PixelValue;

m10=m10+temp;

m02=m02+(i-BarycenterX)*(i-BarycenterX)*PixelValue;

m20=m20+(j-BarycenterY)*(j-BarycenterY)*PixelValue;

m11=m11+(i-BarycenterX)*(j-BarycenterY)*PixelValue;

m30=m30+(j-BarycenterY)*(j-BarycenterY)*(j-BarycenterY)*PixelValue;

m03=m03+(i-BarycenterX)*(i-BarycenterX)*(i-BarycenterX)*PixelValue;

m21=m21+(j-BarycenterY)*(j-BarycenterY)*(i-BarycenterX)*PixelValue;

m12=m12+(i-BarycenterX)*(i-BarycenterX)*(j-BarycenterY)*PixelValue;

}

}

u20=m20/(m00*m00);u02=m02/(m00*m00);

u11=m11/(m00*m00);u21=m21/(pow(m00,2.5));

u12=m12/(pow(m00,2.5));u30=m30/(pow(m00,2.5));u03=m03/(pow(m00,2.5));

t1=m02/(m00*m00)+m20/(m00*m00);

t2=((m20-m02)/(m00*m00))*((m20-m02)/(m00*m00))+4*(m11/(m00*m00))*(m11/(m00*m00));

t3=m20*m02/(m00*m00*m00*m00)-(m11/(m00*m00))*(m11/(m00*m00));

t4=u02+u20;

t5=(u20-u02)*(u20-u02)+4*pow(u11,2);

t6=(u30-3*u12)*(u30-3*u12)+pow((3*u21-u03),2);

t7=(u30+u12)*(u30+u12)+(u03+u21)*(u03+u21);

printf(图画的几许矩为(%f,%f,%f,%f),t4,t5,t6,t7);

temp_charactor.t1=t4;

temp_charactor.t2=t5;

temp_charactor.t3=t6;

temp_charactor.t4=t7;

return temp_charactor;

}

4.5.2 手势图画的匹配

在特征匹配进程中,咱们挑选的是改善的欧式间隔。

运用欧几里德间隔,咱们能够这样界说输入的手势图画与手势库中的任一手势图画之间的间隔:

别离核算库中各手势图画与输入图画的间隔最小的那副图画即为与输入手势匹配的手势。

其源码如下:

void match(finger_charactor temp)

{

int i;

/* temp.t1=temp.t1*100;

temp.t2=temp.t2*100000;

temp.t3=temp.t3*1000000;

temp.t4=temp.t4*100000;*/

float distance[NUMBER];

float lib[NUMBER][4]={

{0.978988,0.033434,0.041461,0.463083},//1

{0.738859,0.200313,0.008426,0.096310},//2

{0.695933,0.140033,0.004225,0.120884},//3

{0.585566,0.082715,0.014987,0.063054},//4

{0.650015,0.069188,0.013489,0.019868},//5

{0.812733,0.103417,0.054060,0.005729},//a

{1.042509,0.290926,0.031394,0.214864},//b

{0.932284,0.033224,0.030549,0.236714},//c

{0.571468,0.042114,0.011919,0.011260},//d

{1.186403,0.272240,0.330265,0.576809},//e

{0.060099,0.001802,0.000009,0.000001},//f

{0.045080,0.000206,0.000004,0.000001},//g

{0.057199,0.000116,0.000021,0.000025},//h

{0.046879,0.000133,0.000014,0.000003},//i

{0.050615,0.000029,0.000029,0.000005},//j

{0.054486,0.000735,0.000006,0.000001},//k

{0.059298,0.001286,0.000066,0.000056},//l

{0.043326,0.000131,0.000004,0.000000},//m

{0.046381,0.000206,0.000023,0.000002},//n

{0.051253,0.000032,0.000061,0.000008},//o

{0.051904,0.000511,0.000055,0.000013},//p

{0.052215,0.000403,0.000011,0.000004},//q

{0.059072,0.001608,0.000030,0.000013},//r

{0.043743,0.000254,0.000011,0.000000},//s

{0.044977,0.000256,0.000012,0.000001},//t

{0.056229,0.001272,0.000030,0.000013},//u

{0.074957,0.001632,0.000190,0.000040},//v

{0.046419,0.000015,0.000032,0.000002},//w

{0.050211,0.000031,0.000018,0.000001},//x

{0.051339,0.000011,0.000041,0.000003},//y

{0.059218,0.000423,0.000142,0.000003}//z

};

char gesture[NUMBER][2]={1,2,3,4,5,a,b,c,d,e,

f,g,h,i,j,k,l,m,n,o,

p,q,r,s,t,u,v,w,x,y,z

};

for(i=0;iNUMBER;i++)

{

distance[i]=fabs(temp.t1-lib[i][0])+fabs(temp.t2-lib[i][1])+fabs(temp.t3-lib[i][2])+fabs(temp.t4-lib[i][3]);

}

printf(\n);

printf(match distances are:);

printf(\n);

for(i=0;iNUMBER;i++)

{

printf(%f\n,distance[i]);

}

float best_distance=distance[0];

int best_flag=0;

for(i=1;iNUMBER;i++)

{

if(best_distance>distance[i])

{

best_distance=distance[i];

best_flag=i;

}

}

printf(The best distance is %f,best_distance);

printf(\n);

printf(The gesture is %s,gesture[best_flag]);

printf(\n);

}

4.5.3 手势库样本的树立

样本库的树立,咱们选用了世界手语中的26个英文字母作样本,每个手势取三个图片,求得特征矩,然后树立样本库。其作业流程如下:

4.5.4 实践运转状况

这是将收集到的图画进行切割处理之后得到的图画:

c1.bmp(意思为C) b2(意思为b)

在PC终端运转状况如下。

通过各个手势的测验之后,手势的辨认率只要60%,不是很高,首要是手势库树立还没有完善,需求许屡次的数据和测验,核算完结。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/199444.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部