手势识别控制音视频和图像播放系统设计与实现.docx
- 文档编号:11789155
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:33
- 大小:759.11KB
手势识别控制音视频和图像播放系统设计与实现.docx
《手势识别控制音视频和图像播放系统设计与实现.docx》由会员分享,可在线阅读,更多相关《手势识别控制音视频和图像播放系统设计与实现.docx(33页珍藏版)》请在冰豆网上搜索。
手势识别控制音视频和图像播放系统设计与实现
手势识别控制音视频和图像播放系统设计与实现
摘要
基于ARM-cortex-A53开发的手势交互娱乐影音系统,通过对ARM+Linux系统设备控制的灵活运用与嵌入式的特点,应用C语言,开发一款能够实现与用户良好交互的手势识别控制音视频和图像播放系统。
本课题开发的手势识别控制音视频和图像播放系统分为六个模块,即起始登录界面模块;功能选择模块;相册的浏览模块;音乐的播放与停止模块;视频的播放与停止模块;安防监控模块。
各模块的功能互相独立,同时构成统一的整体。
本系统具有安全性高,功能完备,交互性好且导航清晰,多媒体素材重点突出等特点。
本文重点介绍了在开发功能的过程中的步骤,和重点讲解,并简要说明一些相关理论基础,和软件方面的操作与硬件设备方面的介绍。
关键词:
手势识别;嵌入式;LINUX;ARM;智能交互娱乐
DesignandImplementationofHandGestureRecognitionControlSystemforAudioVideoandImagePlaying
Abstract
ThegestureinteractiveentertainmentvideoandaudiosystemdevelopedbyA53,throughtheflexibleuseofARM+Linuxsystemequipmentcontrolandembeddedfeatures,theapplicationofClanguagetodevelopagoodinteractionwiththeusergesturerecognitioncontrolaudio,videoandimageplaybacksystem.
Thedevelopedgesturerecognitioncontrolaudio,videoandimageplaybacksystemisdividedintosixmodules:
logininterfacemodule,functionselectionmodule,photoalbumbrowsingmodule,musicplaybackandstopmodule,videoplaybackandstopmodule,andsecuritymonitoringmodule.Thefunctionsofeachmoduleareindependentofeachotherandformawholeatthesametime.Thesystemfeatureshighsecurity,completefunctions,goodinteraction,clearnavigationandmultimediamaterials.
Thispapermainlyintroducesthestepsandkeypointsintheprocessoffunctionaldevelopment,andbrieflyintroducestherelevanttheoreticalbasis,aswellastheoperationofsoftwareandhardwareequipment.
Keywords:
gesturerecognition;embedded;LINUX;ARM;intelligentinteractiveentertainment
1前言
嵌入系统是软、硬件相结合,以应用为中心,以计算机技术为基础,软、硬件可裁剪,手势互动的娱乐影音系统与嵌入式相结合,更能人性化、智能化。
伴随着因特网技术和计算机科学的兴起和迅速发展,人类已步入后PC时代,人与计算机的交互作用也从过去以计算机为中心,发展到现在以人为中心,因此,多媒体互动展示系统也逐渐朝着更加快捷、自然、人性化的方向发展。
以高性能的手势识别传感器模块为基础的多媒体交互显示控制系统正是顺应这一趋势而不断研发的,并取得了良好的效果。
以ARM-cortex-A53为系统处理器内核,具有低功耗、高性能、易于扩展等特点,在当前市场中具有一定的优势。
当影音娱乐产品的市场竞争逐渐演变为服务竞争时,考虑到系统的成本和适用性,采用嵌入式系统来设计图像、声音和视频系统,后期可以根据市场的需要,对硬件进行裁剪,设计控制硬件的程序,以满足市场的不同需求。
1.1本设计的目的、意义及应达到的技术要求
1.1.1本设计的目的
结合ARM+Linux系统,通过对JPG图片的解码,设计出界面美观,操作方便的用户界面,结合嵌入式软件和硬件的可裁剪性,可以不断的根据用户需要去修改和完善,增加相应的硬件控制程序,实现对设备的控制,从而达到多功能,独具特色的人机手势交互娱乐影音系统。
1.1.2本设计的意义
手势识别在人类的生产、生活中应用也比较广泛,所以,研究手势识别并且结合多媒体互动展示系统对于人类生活水平的提高具有重要意义。
本论文的研究重点是在家庭电视和车载娱乐系统方面。
就家庭娱乐而言,像三星、TCL等厂商都已经开始生产基于手势识别的电视机,并将其推向市场。
使用者可直接通过一些简单的手势动作,例如,挥动手心,上下移动,完成电视页面切换,确认,旋转,缩放等基本功能。
所以,研究手势识别、音视频、图像播放等控制系统的设计与实现,对于提高人们的生活水平具有重要意义。
现代社会经济的快速发展,人们的生活水平明显提高,同时人们对精神娱乐和科技的追求也日益突出。
工作忙碌之后,适当的放松可以让人精神振奋、身心舒畅,手势互动娱乐影音系统可以满足当代人们的需要。
手语娱乐影音交互技术是在传统产业的基础上发展起来的,与之相比,手语娱乐影音交互技术以其智能化、人性化、科技先进等特点得到了人们的认可,在当今社会的发展趋势也越来越好,手语娱乐影音交互技术通过使用智能影音设备来构建符合人们需求的系统,根据需求来设计系统,实现人性化,将智能科技融入家庭和社会,让人们也能享受到科技发展所带来的好处,从而推动社会的经济发展,同时也促进了科技的发展,使人们能够更方便、人性化、智能化的使用,从而提高消费者的生活质量。
1.1.3本设计应达到的技术要求
1.合理选择硬件以及手势识别模块进行开发。
2.对6818开发板、手势识别模块以及IIC通信接口整个系统架构进行分析与设计。
3.采用嵌入式ARM处理器,搭载Linux系统。
4.图像的编解码。
5.手势识别模块通过IIC通信接口实现手势动作的采集。
6.通过手势识别模块控制音视频、图像的播放,切换。
7.对各项设计进行测试以及功能完善,保证系统功能实现和可靠运行。
1.2本设计在国内外的发展概况及存在的问题
人与机器的交互是当前计算机科技领域的一个重要研究课题,手势是一种自然、直观、易学的人机交互方式,手势输入是实现自然、直接的人机交互的关键技术。
目前,手势识别技术主要有数据手套法和视觉法。
基于视觉的动态手势识别系统是当前研究的热点之一。
手势输入作为一种自然、丰富、直接的交互方式,在人机交互技术中占有重要地位。
尽管手势识别技术起步较早,但绝大多数还停留在软件层面,其中有一些只是进行简单的比对,速度慢、实时性差,还有一些识别效率不高。
因此需要从硬件,尤其是手势识别设备入手,来弥补上面两个不足。
1.3本设计应解决的主要问题
1.分析并选择合适的语言进行后台的开发。
2.对图像在开发板上的显示进行理解以及应用。
3.手势识别的准确性,算法识别率要高,因此需要选取高精度手势识别模块来进行研究。
4.辨识算法要求简单,辨识速度较快。
由于是通过手势来控制多媒体交互显示系统的各个模块,应该保证系统的实时性,如果系统响应的时间在1秒或1秒以上,就会给家庭用户或司机带来不好的体验,相反,不如按钮操作或触屏操作来得更直接。
5.环境的搭建与配置。
2总体设计
2.1设计原理
2.1.1总体设计逻辑
1.手势识别模块可以识别9种姿势(如下介绍),本代码只使用了上、下、左、右、向前五种,上下左右用于在某个菜单界面上切换功能,向前用于当选择好功能之后确认选择该功能的。
2.整个项目的界面切换是通过定义的全局变量g_sys_state实现的。
2.1.2手势识别模块原理
PAJ7620U2-手势识别模块驱动文件:
/dev/IIC_drv
通信协议:
用read函数每次只能读取1个字节并且100ms后会后返回值
返回值-->-1:
没有探测到手势1-9:
分别对应9种手势
接线说明:
手势识别模块<--连接--->GEC6818
VCCPIN1
GNDPIN19/20
SCLPIN15
SDAPIN17
INT不用接线
使用read函数读取一个字节数据,读取的结果1到9分别对应如下手势
case1:
printf("上\n");break;
case2:
printf("下\n");break;
case3:
printf("左\n");break;
case4:
printf("右\n");break;
case5:
printf("向前\n");break;
case6:
printf("向后\n");break;
case7:
printf("顺时针\n");break;
case8:
printf("逆时针\n");break;
case9:
printf("摆动\n");break;
2.2方案选择
关于整个项目的UI,有两种选择,第一种选择是采用JPG图片显示UI,lcd_draw_jpg(x坐标,y坐标,JPG路径,摄像头存放JPG数据的指针,摄像头画面大小,0);该函数将任意大小JPG的显示跟摄像头拍摄画面的显示合二为一,最后一个参数设置为0,则摄像头拍摄画面大小为640*480,最后一个参数设置为1,则摄像头拍摄画面大小为320*240。
而第二种选择是采用BMP图片显示UI。
由于JPG图片占用空间小,且摄像头输出的YUV格式的图片可转化为JPG,因此在本设计中采用方案一。
2.3软硬件开发环境
2.3.1GEC6818开发板
图2.1GEC6818开发板
GEC6818开发板是集多种功能于一身的掌上微机,具有体积小、便携性强、功能强等特点,可运行系统,速度快,开发时间短,源代码全方便开发者使用,无需扩展底板即可直接嵌入自己的设计中,实现更高效、快速、方便的开发。
采用6818开发板的理由:
①处理能力强,配合三星Cortex-A53八核处理器,主频最高可达1.4GHZ。
提升用户运行速度,带来更佳的使用体验。
整机稳定性好,核心板采用十层板材工艺设计,确保稳定可靠。
保证了程序的稳定性和产品在设计过程中的安全性。
有丰富的外部接口,如LCD接口,Touch接口,音频接口,SD卡接口,emmc接口,以太网接口,USBHOST接口,USBOTG接口,UART接口,PWM接口,IIC接口,SPI接口,ADC接口,Camera接口,HDMI接口,VGA接口,启动配置接口等等。
④支持多种操作系统,具有ARM微处理器系统驱动实验,嵌入式实时操作系统开发Linux,嵌入式Android系统开发。
便于后期根据用户需求进行功能更改和增强功能。
2.3.2手势识别模块
图2.2手势识别模块PAJ7620U2
手势识别模块采用了PAJ7620U2式手势识别传感器,该芯片与通用I2C接口实现了手势识别功能。
本系统可以识别9种手势,包括:
上下、左右、前后、圆-顺时针方向、圆-逆时针方向、摇摆。
这些手势信息只需通过I2C总线即可访问。
手势辨识传感器模块的核心芯片PAJ7620U2,是一种能够与I2C协议进行交互的人体红外识别芯片。
PAJ7620U2的手势识别传感器有如下特点:
①最多可识别9种手势。
②在普通模式下,手势动作的速度为60°/s至600°/s,而游戏模式为60°/s至1200°/s。
③环境光对模块的免疫能力:
<100kLux。
④在模块内部具有接近检测功能;⑤I2C接口的传输速率达到400kbit/s。
2.3.3LinuxUbuntu16.04
与Windows相比,Linux系统对硬件的支持要好得多,Linux中的开放源码程序不断更新,因此它支持很多老式硬件,而Ubuntu对系统的低需求也能延长公司硬件的寿命。
Ubuntu系统在服务器,云计算等领域得到了广泛的认可,在一些运行UbuntuLinux的移动设备上得到了广泛的应用。
2.3.4SecureCRT
SecureCRT是一个支持SSH的终端模拟器,它可以登录到Windows系统,操纵Linux服务器或者主机。
它是Linux和Windows两个系统连接的理想工具。
2.3.5应用软件交叉开发环境
在交互式环境基础上构建的嵌入式应用软件开发是基于交互式环境的,它是编译、连接和调试应用软件的环境,与运行应用软件的环境不同,它采用主机和目标机模式。
主机主机是一个包含了当前市场上流行的Windows和Linux操作系统的通用主机,以及丰富的开发工具,可以加快开发者开发嵌入式应用程序的速度,提高开发者的效率。
该目标机用于应用软件的开发与调试,它可以是一个应用软件的开发环境,也可以是一个代替实际运行环境的仿真系统。
内嵌的交叉开发环境包括交叉编译、交叉调试和系统模拟,交叉编译的作用是将编写好的代码生成二进制代码,在目标机上运行,而交叉调试和系统模拟器则用来调试主机和目标机上的嵌入式软件。
嵌入式软件的交叉开发环境是软件开发的基础,也是关键。
2.4图片的映射
Framebuffer是一种底层机制,即帧缓冲机制,在Linux系统中,内核提供了一个虚拟层,覆盖了芯片之上,抽象出显卡或显存设备,屏蔽了各种不同显示设备的具体细节,提供了统一的,抽象的,简洁的接口,使开发人员能够更容易地进行图形编程,使系统能够将显卡硬件抽象为一块可直接操作的内存,提供封装的函数式接口和设置,提高开发人员的开发效率。
framebuffer使编写显卡驱动很方便。
LCD的设备文件通常与/dev/fb0对应。
然而,通常系统中的显示设备有多个,分别对应于/dev/fb1或/dev/fb2等等。
此设备文件作为向LCD屏幕读写数据的通道。
在这个时候,我们可以使用mmap函数来为这些设备文件映射一块大小适中的内存来处理它。
同样,我们可以将帧缓冲区所对应的物理内存映射到用户内存空间,这样我们就可以通过直接写入屏幕来播放显示效果。
2.5音视频的播放
2.5.1音频概念
在播放音乐的过程中,系统将模拟信号转换成数字信号,并通过几步转换、采样、量化、编码等过程完成。
取样是对一段连续的模拟信号进行离散化,量化是对连续的模拟信号进行幅值离散化,脉冲编码调制是将一个连续的、取值连续的模拟信号转换为离散的数字信号传输,是对模拟信号进行抽样、幅值量化再编码的过程。
ALSA是Linux高级声音体系结构的缩写,它在Linux操作系统上提供音频和MIDI支持。
连接标准音频接口ALSA的步骤:
安装ALSA,下载,解压缩,向环境变量添加安装后的库位置路径,编译音频程序,包含头文件,链接ALSA库。
2.5.2MPlayer播放器简介
mplayer是一个开放源码的多媒体播放器,它使用本地的codec来播放大多数格式的视频,它可以在多种操作系统上运行,Mplayer支持多种输出设备,并且可以使用GGI和SDL以及某些低级硬件驱动模式。
mplayer也支持通过MPEG硬件解码卡显示。
2.5.3Madplay播放器简介
madplay播放器拥有大多数音乐播放器的功能,比如快进播放,seek播放,暂停播放等,但目前该播放器不支持网络播放,其他功能可以使用。
2.6界面的切换
该程序实现了多个独立窗口,彼此独立且有联系,可以在一个界面跳跃到另一个界面,具有良好的人机交互性,具有多种功能界面,增加了程序的操作性。
3详细设计与实现
3.1设计手势交互娱乐影音系统主要问题的解决方法
3.1.1交叉环境的搭建
执行交叉开发的原因在上面也有提到,主要是由于嵌入产品的软件硬件资源非常有限,如果我们直接在产品的Linux平台上编写代码,需要配置大量的编译工具和库文件,造成了资源的浪费,还导致产品的运行速度降低,因此需要使用交叉编译来解决这个问题。
交叉编译工具链的具体搭建步骤如下:
①下载arm-2009q3.tar.bz2编译器到Ubuntu。
②解压arm-2009q3.tar.bz2编译器,命令是tar-xjvfarm-2009q3.tar.bz2。
③编译代码./arm-2009q3/bin/arm-none-linux-gnueabi-gcchello.c-ohelloarm。
④由于在我的Ubuntu的版本是16.04,它默认把所有的32位的库删除,所以就用不了arm-2009q3编译工具,因此需要安装32位的库,命令:
sudoapt-getinstallzlib1g:
i386libstdc++6:
i386libc6:
i386。
⑤打开配置文件:
gedit/home/gec/.bashrc,然后在文件末尾添加自己需要修改的环境变量:
exportPATH=/home/gec/arm-2009q3/bin/:
$PATH,最后创建软连接:
ln-sarm-none-linux-gnueabi-gccarm-linux-gcc。
3.1.2移植JEPG的步骤
(1)把jpegsrc.v8c.tar.gz上载到开发板,并放在共享目录中
(2)将文件解压缩到主目录下:
tar-zxvfjpegsrc.v8c.tar.gz-C~
(3)打开jpg-8c配置文件:
cd~/jpg-8c
(4)配置文件,如果home目录没有jpeg目录,则需要自己创建./configure--host=arm-linux--prefix=/home/gec/jpeg
(5)编译:
make
(6)安装:
makeinstall
(7)进入jpeg目录如果文件夹是正确的,则表示编译成功
3.1.3图片的显示
采用JPG图片显示UI,显示JPG图片的函数原型为:
intlcd_draw_jpg(unsignedintx,unsignedinty,constchar*pjpg_path,
char*pjpg_buf,unsignedintjpg_buf_size,
unsignedintjpg_half);
其中参数1为x坐标,参数2为y坐标,参数3为JPG图片路径,参数4为摄像头存放JPG图片数据的指针,参数五为摄像头画面大小,该函数将任意大小JPG图片的显示跟摄像头拍摄画面的显示合二为一,最后一个参数设置为0,则摄像头拍摄画面大小为640*480,最后一个参数设置为1,则摄像头拍摄画面大小为320*240。
显示JPG图片的步骤:
申请jpg资源,权限可读可写,jpg_fd=open(pjpg_path,O_RDWR)。
获取jpg文件的大小,jpg_size=file_size_get(pjpg_path)。
为jpg文件申请内存空间,pjpg=malloc(jpg_size)。
读取jpg文件所有内容到内存,read(jpg_fd,pjpg,jpg_size)。
创建解码并直接解码内存数据,读文件头,然后开始解码。
图2.3读取解码数据代码
3.1.4图片的切换
通过使用函数lcd_draw_jpg(0,0,jpgpath,NULL,0,0)将图片显示出来,实现的原理是将开发板上的图片文件名与指定路径拼接起来,切换的时候则读取相应路径的图片数据,并设置一个标志位,若到达第一张图片用户选择切换上一张则自动切换到最后一张图片。
到达最后一张若用户切换下一张则显示第一张图片,通过UI界面上的上一张或下一张的选择按钮实现图片的切换。
3.1.5Madplay移植
将Madplay移植到开发板中,方便后期在播放音乐的时候使用。
移植步骤:
①编译zlib,修改Makefile中的交叉工具链,将库文件设置到交叉编译环境目录下。
②编译libid3tag,指明库运行的环境arm-linux-gnueabinf,指定库文件路径。
③编译libmad。
④编译并移植Madplay,生成的Madplay程序通过串口拷贝到目标机上即可利用system命令播放音乐。
3.1.6音乐的播放、停止与暂停
为了实现音乐的播放,使用system()函数调用Madplay来播放音乐,系统将创建一个子线程,调用Madplay来执行用户想播放的音乐。
system("madplay/gesturetest/test.mp3&"),有一点要注意,当您使用system函数时,您应该将Madplay设置为后台,以便实现下一步的停止、暂停。
信号控制Madplay进程以实现停止和暂停功能,信号是进程之间的通信方式,具有以下特点:
①非实时信号不排队,响应互相嵌套。
②目标对信号没有及时响应,将丢弃后续信号。
③每个非实时信号对应一个系统事件,事件发生时,信号产生。
④若进程的挂起信号包含实时信号和非实时信号,则进程对实时信号的响应先高后低,非实时信号无固定顺序。
把9号信号KILL和19号信号STOP发送给Madplay来实现音乐控制。
KILL信号和STOP信号这两种信号都是特殊信号,不能忽略,不能阻塞,不能捕获,只能通过默认动作进行响应。
System("killall-KILLmadplay")使音乐停止。
System("killall-STOPmadplay")实现音乐暂停功能。
System("killall-CONTmadplay")实现继续播放音乐的功能。
图2.4Linux信号列表
3.1.7Mplayer播放器的移植
实现原理:
①通过system函数调用Mplayer,使视频可以在当前界面播放。
②使用Slave模式,Mplayer运行时通过Mplayer-inputcmdlist接收输入命令,或使用kill函数向Mplayer进程发送信号,以控制进程状态,Mplayer在Slave模式下可以与系统的标准输入输出进行信息交互。
移植步骤:
①在线下载libmad-0.15.1b.tag.gz和mplayer-1.0rc2.rar文件并进行解压。
②CC=/usr/local/arm/4.1.2/bin/arm-linux-gcc,进入libmad-0.15.1.b,配置生成Makefile指定库的最终安装路径,以指定交叉编译工具。
③在lib目录下生成include和lib文件夹,在相应的文件夹中生成mad.h和lbmad.a文件,以便进行Mplayer编译。
④交叉编译产生可执行程序mplayer,上传到开发板,准备下一步播放视频。
⑤通过调用Mplayer进程来播放视频,使用system函数调用Mplayer来播放视频,执行播放视频操作。
3.1.8视频的播放与停止功能
同样通过调用system()函数来调用MPlayer,让系统创建一个子线程来实现视频的播放和停止,而视频的播放则通过调用在系统内部搭
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 手势 识别 控制 视频 图像 播放 系统 设计 实现