基于物联网的智能家居系统

上传人:仙*** 文档编号:82031622 上传时间:2022-04-28 格式:DOC 页数:40 大小:5.45MB
收藏 版权申诉 举报 下载
基于物联网的智能家居系统_第1页
第1页 / 共40页
基于物联网的智能家居系统_第2页
第2页 / 共40页
基于物联网的智能家居系统_第3页
第3页 / 共40页
资源描述:

《基于物联网的智能家居系统》由会员分享,可在线阅读,更多相关《基于物联网的智能家居系统(40页珍藏版)》请在装配图网上搜索。

1、 博 创 杯 全 国 大 学 生 嵌 入 式 设 计 大 赛螆肆薅袂肄肅芄蚅羀肄蒇袀羆肄蕿螃袂肃蚁薆膁肂莁螁肇肁蒃薄羃肀薅螀衿腿芅薂螅膈莇螈肃膈薀薁聿膇蚂袆羅 2011第七届“博创杯”全国大学生嵌入式设计大赛作品设计报告基于物联网的智能家居系统 Smart Home System based on EPC System Network设计报告参赛学校:辽宁工程技术大学作 者:樊越骁 常明 高峰 指导教师:徐光宪 于淼摘 要智能家居是以住宅为平台,利用综合布线技术、网络通信技术、 智能家居-系统设计方案安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事

2、务的管理系统,提升家居安全性、便利性、舒适性、艺术性,并实现环保节能的居住环境。本系统采用S3C2410、PXA270、AT89S52等芯片进行系统控制。利用IP网和串口进行通信。实现了实时监控、实时温度控制、门禁系统等。并且在娱乐方面利用了QT与FFMPEG开发了嵌入式视频播放器,支持的解码文件有H264、AVI、MPEG-4、3GP等。而且提供了文本阅读、电子相册与主题变换等功能。关键词:智能家居;网络通信;实时监控;QT;FFMPEGIIAbstractIntelligent household is for the platform, and using of comprehensiv

3、e housing muting technology, network communication technology and intelligent household - the system design scheme security presentation technology, automatic control technology, audio and video technology will household life relevant facilities integration, constructing efficient residential facili

4、ties and family affairs of the schedule management system management sys tem, ascending household safety, convenience, comfort, artistic, and realize environmental protection and energy saving living environment. This system USES S3C2410,PXA270, AT89S52 devices such as chips for system control. Usin

5、g IP nets and serial interface communication. Realize the real-time monitoring, real-time temperature control, entrance guard system, etc. And in entertainment use QT FFMPEG developed with the video player, support embedded documents are H264, decoding of AVI, mpeg-4, 3GP, etc. But also provides tex

6、t reading, electronic albums and theme transform, and other functions. Key words: Intelligent household;network communication;real-time monitoring;QT;FFMPEG 目 录基于物联网的智能家居系统I摘 要IAbstractII目 录3第一章绪论11.1 智能家居的现状与开发意义12.2 论文主要内容1第二章 智能家居的总体设计方案32.1 系统核心控制软件流程及其说明32.2 Linux内核移植42.3 QT Embedded移植5第三章 智能家居

7、多功能娱乐系统73.1 基于QT和FFMPEG的嵌入式播放器73.1.1 FFMPEG简介73.1.2 FFMPEG及其编解码库的移植83.1.3 FFMPEG解码流程93.1.4 基于Qt的嵌入式播放器的实现93.1.5 播放器的逻辑结构133.2 基于QtNetwork和V4L的视频监控系统163.2.1 V4L简介163.2.2 基于V4L的视频采集与传输193.3 基于QT MVC结构的电子相册223.3.1 QT的MVC结构223.3.2 相册的文件遍历233.3.3 相册的渐变效果243.4 多功能电子书24第四章 智能家居的控制系统264.1 基于博创UP-STAR2410的无线

8、遥控器26第五章 特色27附录A28第一章 绪论1.1 智能家居的现状与开发意义20世纪80年代初,随着大量采用电子技术的家用电器面市,住宅电子化(HE,Homen Electronics)出现。80年代中期,将家用电器、通信设备与安保防灾设备各自独立的功能综合为一体后,形成了住宅自动化概念(HA, Home Automation)。80年代末,由于通信与信息技术的发展,出现了对住宅中各种通信、家电、安保设备通过总线技术进行监视、控制与管理的商用系统,这在美国称为Smart Home,也就是现在智能家居的原型。中国人口众多,城市住宅也多选择密集型的住宅小区方式,因此很多房地产商会站在整个小区智

9、能化的角度来看待家居的智能化,也就出现了一统天下、无所不包的智能小区。欧美由于独体别墅的居住模式流行,因此住宅多散布城镇周边,没有一个很集中的规模,当然也就没有类似国内的小区这一级,住宅多与市镇相关系统直接相连。这一点也可解释为什么美国仍盛行ADSL、Cable Modem等宽带接入方式,而国内光纤以太网发展如此迅猛。因此欧美的智能家居独立安装,自成体系。而国内习惯上已将它当作智能小区的子系统考虑,这种做法在前一阶段应该是可行的,而且是实用的,因为以前设计选用的智能家居功能系统多是小区配套的系统。但智能家居最终会独立出来成为一个自成体系和系统,作为住宅的主人完全可以自由选择智能家居系统,即使是

10、小区配套来统一安装,也应该可以根据需要自由选择相应产品和功能、可以要求升级、甚至你对整个设计不感兴趣,完全可以独立安装一套。2.2 论文主要内容本轮为围绕着基于物联网的智能家居的开发过程进行论述。主要从软件方面进行详尽的描述并且涵盖了硬件的实施。包括相关的移植和应用技术。并且利用了IP网和串口进行通信。主控部分是建立在操作系统之上,整个系统采用了LINUX。LINUX是一个嵌入式平台十分优秀的操作系统。这要可以保证家居系统的稳定运行。各个功能模块采用物联网的思想进行构建。每个模块若出现故障不会对其他部分造成影响。这样保证了程序的可运行性。第一章介绍了智能家居的现状和与当今的开发意义。第二章主要

11、从整体的软硬件构建流程进行详尽的描述。将整体的流程图与说明结合。从全局观察本系统的各个功能以及实现过程。并且将Linux和QT的移植进行了简要的介绍。第三章从技术角度将QT和FFMPEG构建的嵌入式播放器进行了表述。包括FFMPEG及其应用库的移植,以及介绍了FFMPEG的API和播放器解码流程和逻辑结构。第四章是介绍了安防监控系统。基于QtNetwork和V4L的视频采集传输系统。以及其与主控部分的通信。第五章讲述了QT的MVC结构,以此来实现的多功能电子相册。第六章简要的讲述了电子书的实现过程和原理。第七章简明扼要的概括了本系统的优点以及特色。附录部分展示了程序的主要部分源代码。第二章 智

12、能家居的总体设计方案2.1 系统核心控制软件流程及其说明图 2-1 智能家居系统控制流程图 现代智能家居系统,对于室内温度的控制要求比较高,比如夏天的温度要在26摄氏度左右才适合人体。因此我们决定将温度控制在25至27摄氏度的范围内。一旦温度升高,超过了27摄氏度,这时候空调将自动开启,进行制冷。当传感器温度在27摄氏度以下时,空调停止工作。由于空调对诗文的调节可能是非线性的。并且传感器与空调的位置也可能会影响对于室温的控制。这时候我们选择了25至27摄氏度这个范围内。避免了受固定数值的影响。因为如果将温度设定为一个固定的数值,将可能造成的结果是空调一直工作,不断地调整温度,反复的开关很可能损

13、害空调的寿命,并且对于电力资源的消耗极大。我们出于对环保的高要求考虑进行了以上调整由于现代家居对于门禁系统有较高的要求,传统的钥匙已经不再能满足家庭的需求。因此我们采用了门禁系统。用户刷卡,然后由系统自动识别ID卡,是否开门等。门禁系统的核心采用了AT89S52单片机来进行控制,通过传感器识别ID卡,然后进行判断,如果正确将进行开门。如果不正确将保持关门状态。这使得家庭的安全得到了保障。此智能家居系统不但出于安全性的考虑增加了安防系统。而且对于现代家庭的休闲放松还增加了娱乐功能。有嵌入式播放器,电子相册,文本阅读等等功能,并且对于智能家居的控制系统主题提供了变换功能,不仅可以使用系统默认的主题

14、,还可以根据用户的个人喜好,进行主题的变换。图 2-2 智能家居核心控制软件流程2.2 Linux内核移植对于 PXA270 这样的基于 ARM10 系列的 CPU和S3C2410这样基于ARM9系列的CPU, 支持内存管理单元, 可以采用传统的 Linux 内核,对进程进行保护,提高了嵌入式系统中多进程的保护能力。使用户应用程序的可靠性得以提高,降低了用户的开发难度。现在的Linux版本为2.6.x,最新的内核已经升级到2.6.38,本系统采用了2.6.24内核版本。所谓 Linux 移植就是把 Linux 操作系统针对具体的硬件平台做必要改写之后,安装到该目标平台使其正确的运行起来。这个概

15、念目前在嵌入式开发领域讲的比较多。其基本内容是:获取某一版本的 Linux 内核源码,根据我们的具体目标平台对这源码进行必要的改写(主要是修改体系结构相关部分),然后添加一些外设的驱动,打造一个适合于我们目标平台的新操作系统,对该系统进行针对我们目标平台的交叉编译,生成一个内核映象文件,最后通过一些手段把该映像文件烧写(安装)到我们目标平台中。而通常对 Linux源码的改写工作难度较大,它要求不仅对 Linux 内核结构要非常熟悉,还要求您对目标平台的硬件结构要非常熟悉。同时还要求您对相关版本的汇编语言较熟悉因为与体系结构相关的部分源码往往是用汇编写的。所以这部分工作一般由目标平台提供商来完成

16、。比如说针对目前嵌入式系统中最流行的ARM平台,它的这部分工作就是由英国ARM公司的工程师完成的,我们所要做的就是从其网站上下载相关版本 Linux内核的补丁(Patch)。把它打到我们的 Linux 内核上,再进行交叉编译就行。其基本过程是这样的:1)到ftp:/ftp.arm.Linux.org.uk上下载Linux2.6.24内核及其关于ARM平台的补丁。2)给Linux2.6.24打补丁。3)准备交叉编译环境。交叉编译环境工具链一般包括binutils(含AS汇编器,LD链接器等),arm-linux-gcc,glibc等。4)修改内核目录下的makefile文件,主要是以下几行:AR

17、CH:=$(shell unamem | sed e s/i.86/i386/-e s/sun4u/sparc64/ -e s/arm. */arm/ - e s/sa110/arm/)这一行。ARCH :=改为ARCH := arm CROSS_COMPILE:=改为CROSS_COMPILE=交叉编译工具中 arm-linux所在目录/arm-linux-例如:CROSS_COMPILE=/opt/crosstool/arm-Linux/bin/arm-linux-5)此后就可以进行编译。 6)以上可以使他在目标板上跑起 Linux 系统。有了操作系统对于V4L,UDP,无线网卡等驱动就简

18、单了很多。并且多任务的调控完全交给了操作系统支配。2.3 QT Embedded移植Qt/Embedded的底层图形引擎完全依赖于FrameBuffer,因此在移植时需考虑目标平台的Linux内核版本和FrameBuffer驱动程序的实现情况,包括分辨率和颜色深度等在内的信息。当前嵌入式CPU大多内部集成LCD控制器,并支持多种配置方式。Qt/Embedded能够较好地根据系统已有的FrameBuffer驱动接口构建上层的图形引擎。Qt/Embedded图形引擎中的图形绘制操作函数都是由源代码目录src/kernel/中的src/kernel/qgfxreaster_qws.cpp所定义的Qg

19、fxRasterBase类发起的声明。对于设备更加底层的抽象描述,则在src/kernel目录qgfx_qws.cpp的Qscreen类中给予相应定义。这些是对FrameBuffer设备直接操作的基础,包括点、线、区域填充、alpha混合和屏幕绘制等函数均在其中定义实现。在FrameBuffer驱动程序调试通过后,配置Qt/Embedded的编译选项,可以保证Qt/Embedded的图形引擎正常工作。Qt/Embedded中的输入设备,同样分为鼠标类与键盘类。其中鼠标设备在源码目录中的src/kernel/qwsmouse_qws.cpp中实现,从该类中又重新派生出一些特殊鼠标类设备的实现类。

20、当然也可以根据具体的硬件驱动程序实现的接口,实现类似的接口函数。Qt/Embedded中对于键盘响应的实际函数位于src/kernel/qkeyboard_qws.cpp中,在qkeyboard_qws.h中,定义了键盘类设备接口的基类QWSKeyboardHandler。具体的键盘硬件接口依然要建立在键盘驱动程序基础上,移植时需要根据键盘驱动程序从该类派生出实现类,实现键盘事件处理函数processKeyEvent()即可。 Qt/Embedded内部对于字符集的处理采用了UNICODE编码标准。Qt/Embedded同时支持两种对于其他编码标准(如GB2312和GBK)的支持方式:静态编译

21、和动态插件装载。通过配置config.h文件添加相应的编码支持宏定义,可以获得其他编码标准向UNICODE的转换支持,从而在Qfont类中得以转换与显示。由于UNICODE涵盖了中文部分,所以Qt/Embedded对中文支持也非常好。安装交叉编译工具链arm-linux-gcc3.4.1。并设置环境变量安装QT 4.6 for ARM./configure -make libs -embedded arm -xplatform qws/linux-arm-g+ -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -little-endian -no-qt3

22、support -no-libmng -no-mmx -no-sse -no-sse2 -no-3dnow -no-openssl -no-webkit -no-qvfb -no-phonon -no-nis -no-opengl -no-cups -no-glib -no-xcursor -no-xfixes -no-xrandr -no-xrender -nomake examples -nomake tools -nomake docs -nomake demo -D_ARM_ARCH_5TEJ_ 由于在系统中没有使用触摸屏,所以没有对tslib进行编译。而是使用usb鼠标进行控制。这样

23、触摸屏与视频显示之间的冲突将可以避免。第三章 智能家居多功能娱乐系统3.1 基于QT和FFMPEG的嵌入式播放器3.1.1 FFMPEG简介FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。电影文件有很多基本的组成部分。首先,文件本身被称为容器Container,容器的类型决定了信息被存放在文件中的位置。AVI和Quicktime就 是容器的例

24、子。接着,你有一组流,例如,你经常有的是一个音频流和一个视频流。(一个流只是一种想象出来的词语,用来表示一连串的通过时间来串连的数据元 素)。在流中的数据元素被称为帧Frame。每个流是由不同的编码 器来编码生成的。编解码器 描 述了实际的数据是如何被编码Coded和解码DECoded的,因此它的名字叫做CODEC。Divx和 MP3就是编解码器的例子。接着从流中被读出来的叫做包Packets。包是一段数据,它包含了一段可以被解码成方便我们最后在应用程序中操作的原始帧的 数据。根据我们的目的,每个包包含了完整的帧或者对于音频来说是许多格式的完整帧。FFmpeg是一个集录制、转换、音/视频编码解

25、码功能为一体的完整的开源解决方案。FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用。FFmpeg支持MPEG、DivX、MPEG4、AC3、DV、FLV等40多种编码,AVI、MPEG、OGG、Matroska、ASF等90多种解码. FFmpeg主目录下主要有libavcodec、libavformat和libavutil等子目录。其中libavcodec用于存放各个encode/decode模块,libavformat用于存放 muxer/demuxer模块,libavutil用于存放内存操作等常用模块。FFMPEG常用的数据结构有:AVFormatCont

26、ext 音视频文件输入和输出保存数据的结构AVCodecContext 保存AVCodec指针和与codec相关的数据AVCodec 编解码器信息AVFrame 帧AVPacket 包AVPicture 图像的存储格式AVStream 流结构FFMPEG常用的接口函数有:av_register_all();初始化函数avcodec_find_decoder();查找解码器avpicture_fill();初始化帧存储空间img_convert();色彩变换av_free_packet();释放包空间av_free();释放解码空间等等。3.1.2 FFMPEG及其编解码库的移植FFMPEG本身

27、支持多种音视频格式的编解码,但是有一些是需要在FFMPEG编译之前编译好,并且在配置的时候指明其库的路径。而且FFMPEG的各个版本就间存在差异,接口函数并不完全统一。因此,很难做到一次写代码不用修改的就在各个版本之间实现。而且,FFMPEG的移植也会因交叉编译环境而产生不适应。所以应该选合适的版本。这次,我选用的是ffmpeg0.6,交叉编译环境是arm-linux-gcc3.4.6.主机gcc版本为4.2.3. 首先,需要在本机编译和移植以下库 libfaad、libfaac、libx264、libxvid。libfaad libfaac、解码aac音频格式libx264 更优秀算法的符合

28、H.264/MPEG-4 AVC视频压缩编码标准格式的编码库libxvid开放源代码的MPEG-4视频编解码器FFMPEG交叉编译环境的配置如下./configure -cross-prefix=/usr/local/gcc-3.4.6-glibc-2.3.6/arm-linux/bin/arm-linux- -enable-shared -disable-static -disable-yasm -disable-armv6 -disable-armv6t2 -disable-armvfp -disable-asm -disable-optimizations -disable-ffmpeg

29、 -disable-ffplay -disable-ffserver -disable-doc -disable-ffprobe -disable-network -target-os=linux -arch=arm -enable-libfaac -enable-libfaad -enable-libfaadbin -enable-libxvid -enable-libx264 -enable-libmake & make install3.1.3 FFMPEG解码流程l 注册全部文件格式和编解码器l 打开输入文件l 查找输入流l 确定输入的音频流和视频流l 打开音频、视频解码器l 初始化声

30、卡设备,并打开声卡设备l 初始化解码所需空间开辟新的内存区域l 初始化图像缩放结构l 等待解码指令l 解码成功执行下一条,不成功退出l 判断包的数据类型,音频或者视频l 如果是音频,则解码并将数据写入到声音设备中l 如果是视频则将其保存在固定的内存地址中l 循环解码直至完毕,或者接受到终止指令3.1.4 基于Qt的嵌入式播放器的实现在这部分中,需要写两个类,一个是QPlay,用于实现播放器的初始化和播放器的解码工作。由于播放器需要实现文件的解码和图像的显示,并且能够接受鼠标的事件,所以对于QPlay类需要继承QThread。使用多线程技术来实现解码工作。类的声明如下:class QPlay :

31、public QThreadQ_OBJECTpublic:QPlay();QPlay(char *); /带参数的构造函数,用于接收来自主线程的文件名AVFormatContext *oc;AVPacket packet;struct SwsContext *sws;AVCodecContext *pCodecCtx;AVCodecContext *aCodecCtx;AVCodec *pCodec;AVCodec *aCodec;AVFrame *pFrame;AVFrame *pFrameRGB;int audioStream;int videoStream;int fd;unsigned

32、 int i;int datasize;unsigned char buff6000; /声音解码的工作空间char *filename;int numBytes;uint8_t *buffer;int frameFinished;QString maxtimestr; /视频文件的播放时长int nb_index_entries;float maxtime;float frametime;float timeframe;float nowtimetmp;int nowtime;int max4;void init(char *inputfilename);void stop();void p

33、lay(int timestamp);bool initok;void halt();bool isstop;signals:void threadstop();void valuechange(int);void imagechanged(struct SwsContext *);void stopright();public slots:void time_out();void rightstop();protected:void run();private:volatile bool stopped;核心解码部分void QPlay:run() while(!this-isstop) u

34、sleep(28000); if(av_read_frame(oc,&packet)nowtimetmp+=this-frametime; this-nowtime=(int)this-nowtimetmp+0.5); emit this-threadstop(); return; if(packet.stream_index=videoStream) avpicture_fill(AVPicture *)pFrameRGB,buffer,PIX_FMT_RGB24,pCodecCtx-width,pCodecCtx-height); avcodec_decode_video(pCodecCt

35、x,pFrame,&frameFinished,packet.data,packet.size);/解码视频 if(packet.stream_index=audioStream) datasize=FFMAX(packet.size*sizeof(*buff),AVCODEC_MAX_AUDIO_FRAME_SIZE); avcodec_decode_audio2(aCodecCtx,(int16_t*)buff,&datasize,packet.data,packet.size); write(fd,buff,datasize); this-nowtimetmp+=this-frameti

36、me; this-nowtime=(int)this-nowtimetmp+0.5); emit this-valuechange(this-nowtime); emit this-stopright();3.1.5 播放器的逻辑结构图3-1 播放器主界面截图在播放器上方为主菜单选择按钮。中间栏左侧为视频显示区,用于显示视频图像信息。中间栏右侧,为播放列表,列出在指定目录下所有的音视频文件。双击播放列表下的视频文件名,则会播放该视频文件。此处,以QT的MVC架构实现。双击文件名,产生一个时间触发一个信号,将此信号与一个自定义的槽函数相关联,槽函数在接到事件所传来的QModelIndex的对象后

37、读出QModelIndex中的文件名信息,并且开始播放。播放刘表下面实时显示播放时间于总时常。功能按钮上有一个进度条,用于实时现实播放进度。并且,拖动进度条可以将视频文件定位到相应的时间继续播放。本嵌入式视频播放器共有三种播放模式。顺序播放,单曲循环和全部循环。单曲循环是循环当前播放的歌曲。顺序播放,从播放列表当前播放的文件开始,顺序向下播放,当最后一首歌曲播放完毕后,播放器停止。全部循环则是在顺序播放基础上,仅在最后一首歌曲播放完毕后,开始跳转到列表中的一首歌曲。以此往复。图3-2 播放器软件流程图控制按钮所实现的功能有:上一曲,快退、播放与暂停、停止、快进、下一曲、选择模式。播放器内部共有

38、6种状态。VIDEPPLAYING 视频播放VIDEOSTOP 视频停止VIDEOSUSPENDED 视频暂停VIDEOFASTINTO 视频快进VIDEORETREAT 视频快进VIDEOEND 视频结束播放即正常播放视频,进入停止状态后,视频解码器不关闭,但是停止解码,停止播放,并且将视频的位置信息置0.再次播放时,从头开始播放。视频快进、快退状态为视频的加速解码,设置一个定时器,当选中快进或者这快退后,定时器快开始工作,在解码完当前帧后,跳过几帧后,再解码一次,并刷新图像,刷新时间。当时间小于10秒时无法进行快退,当播放时间大于总时长-10秒时,无法进行快进。当快退至小于10秒时或者快进

39、至大于总时长-10秒时,则自动进入播放状态。当点击播放按钮后,会停止快进或者快退定时器,由此进入播放状态。视频的进度条和快进快退的定位由FFMPEG提供的APIav_seek_frame(AVFormatContext *s, int stream_index,int64_t timestamp,int flags);此函数,主要功能是根据流控制信息与输入的时间戳和标志信息,将文件流定位到与之对应的时间戳。再次解码时则从定位后的流开始再次解码。由此而实现播放器的快进、快退与进度条的定位功能。除了可以以当前大小观看视频,还可以全屏幕观看,对播放窗口双击鼠标,或者点击全屏幕按钮,就可以将视频画面设

40、为全屏幕。全屏幕的实现主要重写了QLabel类的鼠标双击事件。并且定义一个bool变量来监控是否进入全屏幕状态。当对QPlayLabel双击之后,产生一个双击信号。在主程序中接收双击信号,如果不是全屏幕,就将画面设置为全屏640*480。如果是全屏幕,则恢复原窗口大小。在全屏幕状态下,单击鼠标右键可以显示控制栏。包括,快进、快退、上一曲、下一曲、暂停与播放、停止、全屏幕及播放状态等按钮和时间进度条。再次单击右键也可以隐藏这些工具。3.2 基于QtNetwork和V4L的视频监控系统3.2.1 V4L简介ideo4Linux(简称V4L)是Linux中关于视频设备的内核驱动,它为针对视频设备的应

41、用程序编程提供一系列接口函数(API),这些视频设备包括现今市场上流行的TV卡、视频捕捉卡和USB摄像头等。视频编程的流程:(1)打开视频设备,在Linux中万物皆文件。打开设备采用驱动程序提供的open函数。(2)读取设备信息,对设备的读取操作与普通文件相像,用驱动程序提供的read函数。(3)更改设备当前设置(可以不做),通过驱动程序提供的ioctl函数实现对设备的设置,如采集图像的分辨率等等操作。(4)进行视频采集,两种方法:内存映射b.直接从设备读取(5)对采集的视频进行处理,这个是为了对视频的下一步操作,例如压缩等操作。(6)关闭视频设备。二、Video4linux支持的数据结构及其

42、用途(1)video_capability 包含设备的基本信息(设备名称、支持的最大最小分辨率、信号源信息等)name32 /设备名称maxwidthmaxheightminwidthminheightChannels /源个数type /是否能capture ,彩色还是黑白, 是否能裁剪等等。(2)video_picture 设备采集的图像的各种属性Brightness /065535 亮度huecolourcontrastwhitenessdepth /8 16 24 32 色深palette /VIDEO_PALETTE_RGB24 | VIDEO_PALETTE_RGB565等调色板信

43、息(3)video_channel 关于各个信号源的属性Channel /信号源的编号nametunersType /VIDEO_TYPE_TV | IDEO_TYPE_CAMERANorm /颜色制式 PAL|NSTC|SECAM|AUTO(4)video_window 包含关于capture area的信息x /windows 中的坐标.y/windows 中的坐标.width/采集图像的宽度height/采集图像的高度 chromakeyflagsclipsclipcount(5)video_mbuf 利用mmap进行映射的帧的信息size /每帧大小Frames /最多支持的帧数Off

44、sets /每帧相对基址的偏移(6)video_mmap 用于mmap三、关键步骤介绍(1)打开视频:int v4l_open(char *dev, v4l_device *vd)if (!dev)dev = ”/dev/video0”;if (vd -fd = open(dev, O_RDWR) picture.colour = 65535;/也可以在此设置其他的分量值if(ioctl(vd-fd, VIDIOCSPICT, &(vd-picture) udpsocket=new QUdpSocket;while(1) v4l_grab_sync(vd,0); buffer=(char *)

45、v4l_get_address(vd);this-udpsocket-writeDatagram(QByteArray(const char *)buffer,176*144*2),176*144*2,QHostAddress(192.168.1.105),8000);192.168.1.105为PXA270的IP。当接收到数据后,判断数据的大小是否够一帧图像。如果够一帧图像,将其覆盖在内存的缓冲区上,并且利用QLabel显示。设置一个定时器,为了是视频播放流畅。定时器设置间隔为20毫秒。由于程序需要进行数据处理,和图像的转换等,CPU所耗资源比较大,因此实际显示的时间间隔要大于20毫秒,但是

46、,介于网络传输的速度等,每秒图像的传输速度应该10-20帧之间,因此,不会造成图像的接收完毕未被显示有丢弃的情况。这里显示端的缓冲区为char buffer176*144*2;由于摄像头型号比较陈旧,并且QUdpSocket传输一次最大数据量约为60000字节左右,因此数据采集时图像格式选用176*144.由于是RGB格式的图像,因此一帧图像的大小为176*144*2.为什么不采用图像的压缩?由于UP-start2410的性能有限,而且视频的压缩比较占用CPU资源,并且在采集数据的同时还要将数据发送到上位机上,为了保证实时传输视频,不造成延迟,因此没有采用视频的压缩技术。而是传输视频的原始图像

47、。但这样的缺点是视频数据量非常大。因而解决这一矛盾的办法如上所述,采用图片大小为176*144.由于PXA270的液晶屏幕为640*480。所以将采集的视频数据进行一定的放大之后,效果在可以接受的范围内,因此,这是个折中的办法。程序显示部分主要代码如下。 this-udpsocket = new QUdpSocket( this ); this-udpsocket-bind(8000); connect(this-udpsocket,SIGNAL(readyRead(),SLOT(received(); ui-label-setAutoFillBackground(true); this-ti

48、mer=new QTimer(this); connect(this-timer,SIGNAL(timeout(),this,SLOT(timerout(); this-timer-start(20);void received() while(this-udpsocket-hasPendingDatagrams() ) this-udpsocket-readDatagram(buffer,176*144*2);void timerout() photospalette.setBrush(QPalette:Window,QBrush(QImage(unsigned char *)buffer,

49、176,144,QImage:Format_RGB16).scaled(ui-label-size(),Qt:IgnoreAspectRatio,Qt:SmoothTransformation); ui-label-setPalette(photospalette);363.3 基于QT MVC结构的电子相册3.3.1 QT的MVC结构Model-View-Controller(MVC), 是从Smalltalk发展而来的一种设计模式,常被用于构建用户界面。MVC 由三种对象组成。Model是应用程序对象,View是它的屏幕表示,Controller定义了用户界面如何对用户输入进行响应。在MV

50、C之前,用户界面设计倾向于三者揉合在一起,MVC对它们进行了解耦,提高了灵活性与重用性。在model/view构架中,model为view和delegates使用数据提供了标准接口。在Qt中,标准接口QAbstractItemModel类中被定义。不管数据在底层以何种数据结构存储,QAabstractItemModel的子类会以层次结构的形式来表示数据,结构中包含了数据项表。我们按这种约定来访问model中的数据项,但这个约定不会对如何显示这些数据有任何限制。数据发生改变时,model通过信号槽机制来通知关联的views。model/view组件之间功能的分离,允许创建model利用现成的vi

51、ews。这也可以使用标准的功能 图形用户接口组件像QListView,QTableView和QTreeView来显示来自各种数据源的数据为。QAbstractListModel类提供了非常灵活的接口,允许数据源以层次结构的形式来管理信息,也允许以某种方式对数据进行插入、删除、修改和存储。它也提供了对拖拽操作的支持在model/view架构中,view从model中获得数据项然后显示给用户。数据显示的方式不必与model提供的表示方式相同,可以与底层存储数据项的数据结构完全不同。内容与显式的分离是通过由QAbstractItemModel提供的标准模型接口,由QAsbstractItemview

52、提供的标准视图接口共同实现的。普遍使用model index来表示数据项。view负责管理从model中读取的数据的外观布局。它们自己可以去渲染每个数据项,也可以利用delegate来既处理渲染又进行编辑。除了显示数据,views也处理数据项的导航,参与有关于数据项选择的部分功能。view也实现一些基本的用户接口特性,如上下文菜单与拖拽功能。view也为数据项提供了缺省的编程功能,也可搭配delegate实现更为特殊的定制编辑的需求。一个view创建时必不需要model,但在它能显示一些真正有用的信息之前,必须提供一个model。view通过使用selections来跟踪用户选择的数据项。每个

53、view可以维护单独使用的selections,也可以在多个views之间共享。有些views,如QTableView和QTreeView,除数据项之外也可显示标题(Headers),标题部分通过一个view来实现,QHeaderView。标准view类提供了缺省的选择模型,它们可以在大次数程序中使用。一个view中的选择模型可以通过调用view的函数selectionModel()取得,也可以通过setSelectionModel()在多个views之间共享选择模型,因此总的来说构建一个新的模型一般情况不太必要。通过给QItemSelection指定一个model,一对model index

54、es,可以创建一个选择。indexes的用法依赖于给定的model,这两个indexes被解释成选择的区块中的左上角项和右下角项。model中的项的选择服从于选择模型。3.3.2 相册的文件遍历QDir类提供了访问目录结构。所以先创建一个QDir的对象用于遍历相册文件目录下的相册文件。并且只查找相册文件目录下的文件信息。并且按照名字进行排序。之后将遍历得到的相册文件名保存在QStringList类的对象中,用于对相册文件的遍历。在主程序的构造函数里,当遍历完相册目录时,将所得到的相册文件名的列表中默认项加载到屏幕上。主要代码如下:QDir photosdir;photosdir.setPath

55、(PHOTOSDIRPATH); photosdir.setFilter(QDir:Files); photosdir.setSorting(QDir:Name);this-photoslist=photosdir.entryList(); this-photoname=PHOTOSDIRPATH+this-photoslist.at(this-photosat); QPalette photospalette; QImage photosimage; photosimage.load(this-photoname);photospalette.setBrush(QPalette:Window

56、,QBrush(photosimage.scaled(ui-label-size(),Qt:IgnoreAspectRatio,Qt:SmoothTransformation); ui-label-setPalette(photospalette);3.3.3 相册的渐变效果在相册中,不同的相片之间的切换不是瞬间变化的。因为瞬间变化让相册看起来不够圆滑,有些生硬。那么,为了让相册更能够为用户带来更好的体验,因此我们选用了简便的效果来为相册增光添彩。渐变的原理如下,在相册之上建立一个QDialog对象,平时,设为隐藏。当切换相片时,QDialog对象逐渐显示出来,透明度由0逐渐到1.当透明度到1

57、时。这时候QDialog 对象覆盖在原来的相册之上,使相册不可见。这时候将相片切换到下一张。然后逐渐将QDialog对象的透明度由1降至0.这样相册又重新显示出来了,但是相片已经切换到了下一张。这样使得相册看起来十分优雅。渐变效果主要是依靠QTimer类的对象来设置一个定时器。每一个时间QDialog对象的透明度由0至1不等。这样连续起来,就有了渐变的效果,当相册隐藏起来之后,进行照片的切换。当照片切换后并且QDialog对象的透明度为0时,停止定时器。定时器的时间间隔设置为20毫秒,一次执行30次。理论上应该是60毫秒执行完毕,但是在嵌入式开发平台上,硬件所具有一定的局限性,因此将会在1.3

58、秒左右执行完毕。这样看起来比较圆滑,不会太生硬。这也是根据特定的硬件所进行的调整。3.4 多功能电子书电子书采用的是QT 的MVC结构进行设计的。其主要流程为遍历电子书文件夹。然后将文件作为列表显示在QListView对象上。电子书的工作流程是首先双击QListView,根据信号与槽机制触发槽信号。QFile根据传递的model中的文件名将电子书打开,依靠QTextStream将电子书内容保存在textBrowser中。 图 6-1 多功能电子书程序运行图第四章 智能家居的控制系统4.1 基于博创UP-STAR2410的无线遥控器遥控器的功能主要是对智能家居进行无线控制。无线遥控器采用的是arm处理器与无线网卡来进行控制与连接。而且遥控器采用的是触摸屏来进行与用户交流。界面采用QT来进行开发,使用UDP进行通信。采用UDP通信的主要考虑是节省带宽,不必像TCP连接一样实时需要传输控制信息。因为在网络中可能要使用安防系统进行视频监控,这样占用带宽比较大所以使用UDP通信可以减少视频传输的丢包现象。界面的风格采用简洁的画面,方便用户使用,提高了用户体验。4.2 基于AT89S52的数据采集

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!