首页 1152.基于Windows CE的智能家居安防系统

1152.基于Windows CE的智能家居安防系统

举报
开通vip

1152.基于Windows CE的智能家居安防系统1152.基于Windows CE的智能家居安防系统 85861463.doc的研究 1 / 29 基于Windows CE的智能家居安防系统的研究 --Intelligent Security System for House 摘要 eDog系统是一个面向家庭用户的基于eBoxII在Microsoft Windows CE 5.0平台下开 发的智能家居安防保全系统。eDog可以通过摄像头将采集到的实时视频图像进行运动 检测,当发现有运动产生时,通过拨打电话等多种方式自动向用户发出警报,同时将 实时捕获的图...

1152.基于Windows CE的智能家居安防系统
1152.基于Windows CE的智能家居安防系统 85861463.doc的研究 1 / 29 基于Windows CE的智能家居安防系统的研究 --Intelligent Security System for House 摘要 eDog系统是一个面向家庭用户的基于eBoxII在Microsoft Windows CE 5.0平台下开 发的智能家居安防保全系统。eDog可以通过摄像头将采集到的实时视频图像进行运动 检测,当发现有运动产生时,通过拨打电话等多种方式自动向用户发出警报,同时将 实时捕获的图像上传到ftp服务器。eDog系统支持 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 Web浏览和Web远程控制,并 可随时检索、回放历史视频记录。用户可以由接受到的电话做出不同的反应,控制系统 发出警报。系统提供了良好的用户界面,稳定的运行环境,便捷的远程操作,强大的 扩展功能,有较高的实际应用价值。 关键词 嵌入式 图像采集 运动检测 串口通信 Abstract: The intelligent security system for house is designed for the family user. The eDog system is based on the eBoxII platform and developed in Microsoft Windows CE 5.0 environment. It uses a web camera to capture video picture, then does motion detection. If there is some motion the system can alarm automatically through many ways such as give someone a ring or and submit the motorial video pictures to the appointed server to backup. Furthermore the system supports standard Web, WAP browser so user can access the system remotely to control, search or review the history video record. The system has offered a nicer interface, steady running environment, convenient long-range operation, strong expanded function, so it has a well using value. Keyword: embedded system、Video collection、Motion estimation、serial communication 85861463.doc的研究 2 / 29 目录 摘要 ............................................................... 1 关键词 ............................................................. 1 Abstract: .......................................................... 1 Keyword: ........................................................... 1 引言: .............................................................. 4 第一章 相关介绍 .................................................. 4 1.1 背景知识 .................................................... 4 1.1.1 嵌入式系统的介绍 ...................................... 4 1.1.2 Windows CE的介绍 ...................................... 4 1.1.3 Windows CE的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 目标 .................................. 5 1.1.4 eBoxII介绍 ............................................ 5 1.1.5 EVC概述 ............................................... 6 1.1.6 Platform Builder ...................................... 6 1.2 Windows CE程序开发 ......................................... 7 1.2.1 事件驱动和消息响应机制 ................................ 7 1.2.2 Windows CE程序和Windows程序的不同点 .................. 7 1.3 eDog系统主要功能 ........................................... 8 1.3 系统特色 .................................................... 8 第二章 程序的模块设计 ............................................ 8 2.1 eDog的顶层数据流图: ........................................ 8 2.2 eDog的层次方框图: .......................................... 9 2.3主程序流程图 ................................................ 9 第三章 在 Platform Builder定制Windows CE ....................... 10 3.1 PB简介 .................................................... 10 3.2 BSP简介 ................................................... 11 3.3 定制Windows CE. ........................................... 11 3.4 Windows CE 注册表简介 ...................................... 11 3.5 注册表编辑器 ............................................... 12 第四章 图像模块 ................................................. 13 4.1 视频采集 ................................................... 13 4.1.1 BMP文件 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 .......................................... 13 4.1.2 视频采集相关说明 ..................................... 13 4.1.3 CE的流接口驱动程序 ................................... 14 4.1.4 即时图像捕捉 ......................................... 15 4.2 运动检测 ................................................... 18 4.2.1计算帧差绝对值 ........................................ 18 4.2.2 eDog中运动检测模块的具体实现方法 ..................... 19 4.3 图像压缩 ................................................... 22 第五章 拨打电话模块 ............................................. 24 5.1 串口通信 ................................................... 24 5.2 RS-232串行接口标准 ........................................ 24 85861463.doc的研究 3 / 29 5.3 Modem 拨打电话模块 ....................................... 25 结论: ............................................................ 28 致谢语: ........................................ 错误~未定义 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 签。30 参考文献: ........................................................ 29 85861463.doc的研究 4 / 29 引言: 随着计算机通信技术和网络技术的快速发展,无线网络技术已成为计算机网络中一个至关重要的组成部分,它的应用领域也在飞速的扩大。因此我们设计了智能家居安防保全系统(eDog),以增强家居安全防范的能力。eDog应用现已普及的有线网络,固定电话网络,无线电话通信系统,PC摄像头等硬件条件,充分发挥eBoxII强大的功能;我们开发图像捕捉程序,自主开发了运动图像检测算法,报警程序;创建本地Web服务器系统,以及远程通信系统;通过友好的人机交互界面,用户可在本地终端或远程登陆web服务器对系统操作,并能稳定工作。 本文首先介绍了嵌入式系统的相关知识、Windows CE和在Windows CE平台程序开发所必须做的准备。另外本文主要介绍了eDog开发的整个流程,着重介绍了图像模块和Modem报警模块,其余模块由小组其他成员完成。系统采用Embedded Visual C++(简称EVC)嵌入式编程语言在Microsoft Windows CE 5.0环境下编写。主要介绍了开发过程中用到的算法和相关的类,并做了详细介绍。 第一章 相关介绍 1.1 背景知识 1.1.1 嵌入式系统的介绍 嵌入式系统是以应用为中心,以半导体技术、控制技术、计算机技术和通讯技术为基础,强调硬件软件的协同性与整合性,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。 嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。相关支撑硬件主要包括显示设备、存储设备和各种接口等,随着功能的增强以及复杂性的不断增加,操作系统成为了嵌入式系统不可缺少的一个基本部件。 应用程序 嵌入式操作系统 以嵌入式微处理器为核心的硬件平台 图1.1 嵌入式系统的结构图 1.1.2 Windows CE的介绍 Windows CE作为windows家族的最新最小的操作系统,是一个抢先式多任务并具有强大通信能力的Windows 32嵌入式操作系统,是微软专门为信息设备、移动应用、消费类电子产品、嵌入式应用等非PC领域而设计的战略性操作系统产品。它是多线程、完整优先权和 85861463.doc的研究 5 / 29 多任务的操作系统,其基本内核需要至少200K的ROM。它的模块化设计允许它对于从掌上电脑到专用的工业控制器的用户电子设备进行定制。 工业控制是嵌入式操作系统的传统应用领域,但近年来随着家电信息化成为愈来愈明显的趋势对嵌入式操作系统提出了许多新的要求,例如熟悉和友好的用户界面,统一的编程界面,强大的通信功能等,而恰好是Windows CE的优势。 1.1.3 Windows CE的设计目标 Windows CE的设计目标是模块化及可伸缩性,实时性能好,通信能力强大,支持多种CPU。从操作系统内核的角度看,Window CE具有灵活的电源。管理功能,包括睡眠/唤醒模式,在Windows CE中还使用了对象存储(Object Store)技术包括文件系统注册表及数据库。它还具有很多高性能高效率的操作系统特性,包括按需换页,共享存储,交叉处理,同步支持大容量堆(Heap)等。 Windows CE拥有良好的通信能力。它广泛支持各种通信硬件,亦支持直接的局域网连接以及拨号连接,并提供与PC内部网以及Internet的连接,包括用于应用级数据传输的设备至设备间的连接,在提供各种基本的通信基础结构的同时,Windows CE还提供与Windows 9x/NT的最佳集成和通信。 Windows CE的图形用户界面相当出色,它拥有基于Microsoft Internet Explorer的Internet浏览器,此外还支持TrueType字体。开发人员可以利用丰富灵活的控件库在Windows CE环境下为嵌入式应用建立各种专门的图形用户界面,Windows CE甚至还能支持诸如手写体和声音识别、动态影像、3D图形等特殊应用。 1.1.4 eBoxII介绍 eBoxII是微软专门为Windows CE.NET平台下程序开发定制的硬件平台。其中微软已经预装了新发布的Windows CE 5.0的镜像,并对其进行了内核定制。eDog的开发前必须重新定制CE内核。 下面介绍一下其硬件组成。 Vortex86-200 Mhz (SoC: System-on-Chip) CPU 128MB RAM AMI BIOS BIOS External 64MB Bootable USB Flash Disk Flash Memory 64MB Disk On Module (IDE Device) AC97 CODEC, full compliant with AC97 V2.1 Audio MIC-in, Line-in and Line-out interface ready Software Watchdog Timer Watch Dog Three 8254 Compatible Programmable 16-bit Counters Timer Realtek 8100B Single chip x 2 LAN 85861463.doc的研究 6 / 29 Full-duplex transfer mode, doubles effective bandwidth Throughput: 10/100 Mbps AGP Rev 2.0 Compliant, shared system memory area up to 128MB Display CRT/LCD display Resolution up to 1920 x1440 true colors 2 ports KVM Switch with two sets of monitor, PS/2 keyboard and mouse cables KVM Switch 18 Watt Power adapter for any +110V power input Power Adapter 图1.2 eBoxII示意图 1.1.5 EVC概述 Embedded Visual C++(EVC)4.0是Microsoft公司推出的Windows CE程序的可视化开发工具,是Embedded Visual Tools的重要组成部分。利用EVC 4.0用户可以开发出规模较大,功能较复杂的Windows CE应用程序和流式驱动程序。 Windows CE下的EVC编程都是对特定目标硬件的编程,允许CE的机器通常比PC的资源贫乏得多,所以编程时首先要明确目标硬件的特点和要求。 1.1.6 Platform Builder 大部分嵌入式系统是可移植、可裁减、可定制的。且大多数嵌入式产品都是针对特殊的目标板进行的开发。它们大多数都需要完成特定的功能,这就说明了嵌入式操作系统是与应用环境密切相关的。 Platform Builder是微软提供给Windows CE开发人员进行基于Windows CE.net平台下嵌入式操作系统内核定制的集成开发环境。它提供了所有进行设计,创建,编译,测试和调试Windows CE.net操作系统平台的工具。运行在桌面Windows下,开发人员可以通过交互式 85861463.doc的研究 7 / 29 的环境来设计和定制内核,选择系统特性,然后进行编译和调试。同时,开发人员还可以利用PB进行驱动程序开发和应用程序项目的开发等。 1.2 Windows CE程序开发 1.2.1 事件驱动和消息响应机制 Windows程序设计是一种事件驱动的程序设计模式。在程序提供给用户的界面中有许多可操作的可视对象。用户从所有可能的操作中任意选择,被选择的操作会产生某种特点的事件,这些事件发生后的结构是向程序中的某些对象发出消息,然后这些对象调用相应的消息处理函数来完成特定的操作。Windows的应用程序最大的特点就是程序没有固定的流程,而只是对某些处理有特定的子流程,Windows应用程序可以说是由许多这样的子流程构成的。另外,Windows程序本质上是面向对象的。Windows的这种事件驱动模型的实质源于Windows的消息响应机制。所谓的事件响应,就是对各种消息的响应。 图1.3 Windows程序工作原理 1.2.2 Windows CE程序和Windows程序的不同点 , Microsoft Win32 API和Windows CE API之间的不同。 , Microsoft MFC标准和 MFC for Windows CE标准不同 , 存储器的限制和存储器溢出的恢复 , 电源管理的不同处理方式 , 存在大量不同硬件特性和限制 , 测试和调试的过程不同 , Windows CE使用Unicode 85861463.doc的研究 8 / 29 1.3 eDog系统主要功能 , GUI显示:可以在eBoxII上浏览实时视频。 , 本地设置运行参数:可以设置系统各运行参数。包括系统的启动和结束;抓图的图 片压缩比、色度、亮度、对比度、灰度等参数;动态检测的灵敏度参数;拨号的电 话号码;E-mail的服务器地址、收件人地址、主 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 等参数;Ftp的地址、端口、用 户名及密码等参数; Web服务器的用户名和密码参数。 , 报警功能:当检测范围内有异常时,启动报警功能。包括:拨打固定电话或移动电 话通知用户,发送带附件的E-mail通知用户等。 , 数据备份:当检测到异常时,系统将运动的图片上传到Ftp服务器备份。 , 远程Web控制:通过登陆Web服务器,同本地设置一样可以设置系统的各运行参数, 实现了远程控制功能。 , 远程实时视频浏览:登陆Web服务器后,可通过视频窗口浏览实时视频。 , 历史记录查询:登陆Web服务器后,通过读取保存在Ftp服务器上运动图片,在Web 界面的视频窗口显示,实现历史记录的查询。 1.3 系统特色 , 本系统可不断地检测周围环境有无运动发生 , 嵌入式Web服务器 , 远程控制功能 , 图形化的界面,友好的人机交互 , 强大的扩展性能 第二章 程序的模块设计 , 程序设计流程:模块设计,流程图,GUI界面,图像采集,运动检测,图像压缩,进程线 程间通信,Web Service, Ftp,E-mail,拨打电话. , 本人承担模块:图像采集,运动检测,图像压缩,拨打电话报警。 2.1 eDog的顶层数据流图: 85861463.doc的研究 9 / 29 图2.1 eDog的顶层数据流图 2.2 eDog的层次方框图: 图2.2 eDog的层次方框图 2.3主程序流程图 85861463.doc的研究 10 / 29 图2.3 主程序流程图 第三章 在 Platform Builder定制Windows CE 3.1 PB简介 PB是微软提供给Windows CE开发人员进行基于Windows CE.net平台下嵌入式操作系统定制的集成开发环境。 具体说来PB提供了几个主要开发特性: , Platform Wizard和BSP Wizard。用来引导开发人员去创建一个简单的系统平台或BSP。 , 基础配置。为各种流行的设备类别预置的可操作系统基础平台,为自定义操作系统的创 建提供了一个起点 , 特性目录。操作系统的可选特性均在特性目录中,开发人员可以选择相应的特性来定制 操作系统。 , 自动化的依靠性检查。特性之间的依赖关系是系统自动维护的。 , 系统为驱动程序开发提供了基本的测试工具集Windows CE.net Test Kit。 , 内核调试器。可以对自定义的操作系统映象进行调试,并且向用户提供有关映象性能的 信息。 , 导出想到(Export Wizard)。可以向其他PB用户导出自定义的目录特性。 85861463.doc的研究 11 / 29 , 导出SDK向导(Export SDK Wizard)。 , 远程工具。可执行同基于Windows CE.net的目标设备有关的各种调试任务和信息收集任 务。 , 仿真器。通过硬件仿真加速和简化了系统的开发,使用户可以在开发工作站上对平台和 应用程序进行调试。 , 应用程序调试器。可以在自定义的操作系统映象上对应用程序进行调试。 , 提供了对NET FrameWork Compact Edition的支持。 3.2 BSP简介 BSP又称主板支持软件包,它是一个包括启动程序、OEM适配层成年工序(OAL)、标准开发板(SDB)和相关硬件设备的驱动程序的软件包。BSP是基于Windows CE.net平台系统的主要部分,它主要由一些源文件和二进制文件组成。 图3.1 关系示意图 3.3 定制Windows CE. 1. 新建PB工程,并启动工程向导 2. 按需求依次选择BSP、基本配置结构、定制设备的方法、基本类库、应用程序、操作系统 核心服务、通信服务、文件系统、字体、国家等等„ 3. 向导提示信息,完成工程向导 3.4 Windows CE 注册表简介 在Windows CE.net中,注册表扮演着很重要的角色,它是一个系统数据库,存储着应用程序、驱动程序和操作系统的配置信息,通常还存储着操作系统调用程序的状态信息。注册表的结构与磁盘的逻辑结构相似。 Windows CE.net的注册表是一个包括关键字子树的集合,它和文件目录树一样有层次结 85861463.doc的研究 12 / 29 构。它的注册表包括4个根键HKEY_LOCAL_MACHINE、HKEY_CURRENT_USER、HKEY_CLASSES_ROOT 和HKEY_USERS。 表3.1 Windows CE.net注册表根键 根键名 键值内容 HKEY_LOCAL_MACHINE 硬件及驱动程序配置数据 HKEY_CURRENT_USER 用户配置数据 HKEY_CLASSES_ROOT OLE和文件类型匹配配置数据 HKEY_USERS 适用于所有用户的存储数据 从Windows CE 2.0开始,注册表就可以存储在永久性的存储设备中,并能够进行读取。在Windows CE.net中,注册表可以在任何一个文件系统中以一个文件的形式存在。CE能以基于RAM中堆文件的方式来实现注册表。如果RAM掉电,且OLM供应商未进行注册表备份,注册表数据将丢失。 3.5 注册表编辑器 为了系统安全性,Windows CE.net并未为最终用户增加注册表编辑的功能,所有在Windows CE.net下不能像在9x/2000下那样用Regedit.exe来编辑注册表。这样虽然能够保证用户不致因为错误使用注册表信息而出现问题,但是为了一个注册表参数的修改就可能要重新编译整个操作系统内核,这样会在时间上造成浪费并降低工作效率。 1.根键的定义见表3.1 85861463.doc的研究 13 / 29 2.对注册表的限制,见表3.2 限制内容 具体说明 键或值的名字 255个字苻 数据大小 4KB 键嵌套层次 最多16层 3(Windows CE.net下对注册表操作的API函数 , RegCreateKeyEx; , RegOpenKeyEx; , RegQueryValueEx; , RegSetValueEx; , RegCloseKey; 第四章 图像模块 图像采集模块包括图像采集,运动检测,图像压缩三个模块。它是eDog系统的基础,也是eDog的核心。图像采集模块可以获取被监控现场的实时图像,并存成BMP格式;运动检测模块对图像中运动物体检测,当有运动物体进入监视现场时,自动保存图片并发出警报;图像压缩模块可以在eDog系统要对图片进行备份时对其进行格式转换(.JPG)。 4.1 视频采集 在现有的摄像头及其驱动的基础上,我们在EVC上针对我们定制的Windows CE系统,开发了eDog的图形采集模块。该模块能够从监控区域采集图像并在运动检测模块的判断下决定是否DELETE刚SAVE的BMP文件。 4.1.1 BMP文件格式 BMP是计算机系统中最常见的图像格式,他用RGB三个通道的深度来表示一个象素点的颜色值。计算机中一个典型的BMP文件包含4个主要部分:BMP文件头、BMP信息头、调色板和位图数据。另外Windows CE中BMP是24位的,也就是说,RGB三个通道分别用一个字节表示。存储图像的具体操作,下面章节介绍。 4.1.2 视频采集相关说明 首先必须向注册表中写入摄像头的驱动信息。 [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\QCPCamera] “Prefix”=“QCP” “Dll”=“QCP4000.dll” “Order”=dword:1 85861463.doc的研究 14 / 29 , prefx:设备文件名 , Dll:驱动的文件名 , Order:设备文件名索引 , 检测设定视频源 1、自动检测摄像头是否连接好,如果没有则应弹出一个提示对话框,提示没有视频 源。 2、对捕获设备的搜索,并默认为Logitech QuickCamPro4000 摄像头。 , 捕获设置: 设定相关的参数: 敏感度(Sensibility): 按0,100,调整 质量(Quality): 按0,100,调整 亮度(Brightness): 按0,100,调整 对比度(Contrast): 按0,100,调整 色调(Hue):按0,100,调整 颜色(Color): 按0,100,调整 频率:按8fps 帧率设置捕获视频。 , 捕获格式: 对视频的格式及图片的格式进行设置: 分辨率: 320 × 240,格式为BMP。 , 回放与备份: 1、回放 对已存在存储器上的图片进行播放。 2、备份 对捕获的图片进行压缩(.JPG)存储与备份 , 指定存储的Server位置 , 对存储充满时采用的方法:将最早存入的删除并以最新的资料存入。 4.1.3 CE的流接口驱动程序 流接口驱动程序是以动态链接库形式存在的,由设备管理器统一加载,管理和卸载。与具有单独目的的内部设备驱动程序相比,所有的流接口驱动程序都是用同一组接口并调用同一个函数集的,我们将这个函数集称作流接口函数。 流接口驱动程序是为了连接到基于Windows CE的平台的外围设备(包括我们的摄像头)设计的。 流接口驱动程序的注意认为就是把外设的使用传递给应用程序,着是通过把设备表示为文件系统的一个特殊文件实现的。 85861463.doc的研究 15 / 29 4.1.4 即时图像捕捉 此模块用于图像捕捉,一秒8帧。当发现没有运动发生的时候删除图片(图片名按时间命名。eg.2005052022171401.bmp 表示2005年5月20日22点17分14秒的第一帧)。判断是否有运动产生的算法是:定义一个newest变量存放已保存的最新的图片名。调用运动检测类若发现现在捕捉到的图片和newest的图片不同,则发生了运动,保存者张图片并将newest变为现在图片的文件名。 图4.1 图像采集模块流程图 , 相关说明 BOOL M_Estimation()是运动检测模块所提供的接口,若发生运动返回TRUE,否则返回FALSE。 Pic1存之前最新的图片的文件名。 85861463.doc的研究 16 / 29 Pic2是存现在的图片的文件名。 1. 变量定义 HANDLE hDevice; HDC hDisplay; LPBITMAPINFO pbmi; LPBYTE pBits; HBITMAP hBitmap; HDC hMemory; HBITMAP hBitmap0; 2. 创建文件,打开设备。把设备表示为文件系统的一个特殊文件。 hDevice = CreateFile(TEXT("QCP1:"), 0, 0, NULL, OPEN_EXISTING, 0, NULL); if (hDevice == INVALID_HANDLE_VALUE){ return FALSE; } 注: “QCP1:”为摄像头的设备文件名。 CE中一个具体的设备名称是由设备文件名前缀和设备文件名索引组成的,索引是紧随的那个 数字,用来区别由一个流接口驱动程序管理的所有设备。Windows CE.net的设备文件名前缀 由三个大写字母组成,Windows CE.net使用这三个字母来来识别与特殊流接口驱动程序相对 应的特殊设备。索引的编号默认从1到9。 3. 当模块启动时执行,收到消息WM_PAINT。 a. 获得客户区大小 RECT rt; GetClientRect(hWnd, &rt); b. 分配位图空间 // Allocate bitmap hDisplay = GetDC(hWnd); int nInfoSize = sizeof(BITMAPINFOHEADER); // no palette pbmi = (LPBITMAPINFO) LocalAlloc(LPTR, nInfoSize); c. 对pbmi进行初始化 pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); pbmi->bmiHeader.biWidth = nWidth; …… d. 创建设备无关的位图,程序可以直接写入数据并将图片设为RGB模式 hBitmap = CreateDIBSection(hDisplay, pbmi, DIB_RGB_COLORS, (void**)&pBits, NULL, 0); e. 创建一个兼容的设备上下文并把位图数据选入它 hMemory = CreateCompatibleDC(hDisplay); hBitmap0 = (HBITMAP) SelectObject(hMemory, hBitmap); f. 发送控制信息,并将数据从指定驱动程序传送到变量中 85861463.doc的研究 17 / 29 DWORD ulReturn = 0; DeviceIoControl(hDevice, 1, NULL, 0, pBits, (nHeight * nWidth * 3), &ulReturn, NULL); g. 如果位图信息正确,显示位图 if (ulReturn) BitBlt(hDisplay, 0, 0, nWidth, nHeight, hMemory, 0, 0, SRCCOPY); h. 若发生运动则把图像保存, 这里保存图片的过程与手动抓图的过程一样,不述。见下: i. 调用运动检测模块,若没有运动发生则删除图片,否则更新Pic1 if(M_Estimation(Pic1,Pic2)) // BOOL M_Estimation()是检查是否发生运动 DeleteFile(Pic2); else Pic1 = Pic2; 4. 手动抓图,当模块获得消息 WM_KEYDOWN。 a. 如果按下PrintScreen If(LOWORD(wParam) == 0x2C) b. 如果位图信息错误,退出 if (pbmi == NULL) break; c. 否则,初始化BMP位图文件头 BITMAPFILEHEADER hdr; PBITMAPFILEHEADER pbi = &hdr; hdr.bfType = 0x4D42; hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbmi->bmiHeader.biSize + pbmi->bmiHeader.biClrUsed * sizeof(RGBQUAD) +pbmi->bmiHeader.biSizeImage); ……. d. 获得系统时间(CTime::CTime(),在Afx.h声明),并将其转化为字符型的文件名 tmp = CTime(); nowYear = (char *)tmp.nYear; nowMonth = (char *)tmp.nMonth; nowDay = (char *)tmp.nDay; nowHour = (char *)tmp.nHour; nowMin = (char *)tmp.nMin; nowSec = (char *)tmp.nSec; if(++frame == 8) frame = 0; //帧记数从0,7 CString Pic2; Pic2 = Pic2 + nowYear + nowMonth + nowDay + nowHour + nowMin + nowSec + frame e. 输出BMP文件 HANDLE hFile = CreateFile(TEXT("\\saveimage\Pic2.bmp"),GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); If (hFile == INVALID_HANDLE_VALUE) break; f. 写BMP的文件头及信息头的相关信息,如果出错则关闭驱动程序引用实例 DWORD dwWritten; WriteFile(hFile, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER),(LPDWORD) &dwWritten, NULL); WriteFile(hFile, (LPVOID) &pbmi->bmiHeader,sizeof(BITMAPINFOHEADER) + 85861463.doc的研究 18 / 29 (pbmi->bmiHeader.biClrUsed * sizeof(RGBQUAD)), (LPDWORD) &dwWritten, NULL) ……….. g. 关闭驱动程序引用实例 If (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); h.删除名字空间 delete []Pic2; nowname = NULL; 3. 当收到WM_DESTROY时,销毁变量,释放空间 LocalFree(pbmi); SelectObject(hMemory, hBitmap0); DeleteDC(hMemory); DeleteObject(hBitmap); ReleaseDC(hWnd, hDisplay); CloseHandle(hDevice); PostQuitMessage(0); 至此,图像采集模块的基本流程介绍完毕,上述流程忽略了系统中位图参数(如敏感度、亮度等)的设置。此模块是eDog最基础的模块,它为运动检测提供位图;同时调用运动检测模块判断是否保存此时的位图。开发过程原本想用DirectShow开发,并对图片进行适当的处理,但是由于EVC平台下这方面的资料欠缺,所以无法进行。另外,摄像头驱动的相关信息必须写入注册表,否则每次接入摄像头必须手动设置。关于注册表的相关知识,3.4节已经介绍,摄像头驱动的注册信息在4.12节已出。 4.2 运动检测 因为BMP文件存储的是每个象素点的RBG三个通道的深度值,因此我们的运动检测模块采用计算帧差绝对值的方法。对于检测图像区域,用下一帧的每一点象素的三个通道的深度值减去前一帧的象素的相同通道的深度值,当差异过大时,我们便定义这一个点发生了变化,并令设定的变量自加一。当这个变量的计数值超过阀值T的时候时则保存这个时刻捕捉的图片创建报警进程定时通知用户。 4.2.1计算帧差绝对值 f(x,y,i),f(x,y,j),T; (1) , (x,y,s) 其中, f(x,y,i)、f(x,y,j)为序列图像在i,j时刻点(x,y)的通道的深度值,T为用户定义的阀值,阀值T的大小决定运动检测的灵敏度,同时帧间隔也会对检测灵敏度有影响。当帧间变化和超过阀值T时,则判定有运动发生。这种方法运算简单,检测速度快,易于实 85861463.doc的研究 19 / 29 现。但易受光线、天气、小目标物体的干扰,检测准确度低。 实现时我们把一张图片分成8 * 6 , 48个区域。对于其中的每个图像区域S,判别条件是: ,,1当f(x,y,i),f(x,y,j),Td(x,y),,,ij,0其它,, (2) ,d(x,y)N,,ij,(x,y,s), 其中,0? f(x,y,i), f(x,y,i) ?255; T域值。表示统计差值超过阀值T的像素点的数目,当数目大于固定值N时,则判定有运动发生,本算法不仅从阈值的变化上进行判断同时又从变化的点数上予以限制, 同时为了避免天气、光线等因素发生变化时,产生的误判断。我们在(2)式的基础上,进一步改进算法,增加了一个附加判别条件(3)。 f(x,y,i),f(x,y,j),t; (3) , (x,y,ss) 光线、天气变化会对整个图像产生影响,变化比较均匀,分布于整个区域。若是有人闯入则变化是局部的个别的。通过判断四个角区域S1,S2,S3,S4的象素深度变化大小即可来判断是否为光线等分布均匀的干扰信号。当S1,S2,S3,S4四个区域都满足(3)式时,说明深度变化是光线的影响,不是有物体运动,不用启动报警。 该判断条件提高了检测的准确度,降低了误报警率,同时也容易实现,运算量增加不大,对检测速度影响不大。 4.2.2 eDog中运动检测模块的具体实现方法 将图片分为8 × 6 的48块。每一块为一个区分别计算,一张图片为320 ×240 大小。则每个区为40 × 40象素的图片。先用3.2.1的式(3)的算法对4个角的区域进行判断,如果是光线产生的影响则没有运动发生,否则判断其余区域。横向纵向每四个点进行一次比较,也就是每行进行10次比较。当发现一个区中差异点大于一个用户指定的敏感度N时(4,6,8,12,15),这块区域所有的点都为差异点,这个区域发生运动。当发生运动的区域个数超过某个值时,我们认定有运动发生。 在差异点的判断上,用的是象素差异的方法。每4个象素取出的颜色值,从中取出每一点的红绿蓝三种通道的深度值。由于自然界光线等外在环境影响,不能单纯的比较象素值的不同,便判定此点为差异点。必须允许存在一定微小的变化。 之所以将320 × 240的全域,分为8 × 6的48的小区域。可以满足图片的比例要求。 在敏感度参数的问题上,经过多次试验敏感度低的时候取值15,敏感度较低取值12,敏感度中取值8,敏感度较高的时候取值为6。高的时候取值4。可以分别满足近景,中远景,和远景等不同距离和环境的要求(eg. 没有人的时候)。 85861463.doc的研究 20 / 29 图4.2 P_Contrast()的流程图 图4.3 运动检测模块 , 相关说明 BOOL M_Estimation()是运动检测模块所提供的接口,若发生运动返回TRUE,否则返回FALSE。 Pic1存之前最新的图片的文件名。 Pic2是存现在的图片的文件名。 85861463.doc的研究 21 / 29 a. 必须包含的头文件 ,include “Windows.h” ,include “Afxwin.h” b. 定义的阀值和敏感度 #define T 自定义(阀值) #define N 自定义(变化的象素个数) #define Q 自定义(产生变化的区域个数) c. 定义对比象素点的函数P_Contrast() BOOL P_Contrast(HBITMAP hdc1,HBITMAP hdc2,int i, int j) { COLORREF color1,color2; BYTE r1,r2,g1,g2,b1,b2; Int Dif2=0; int x = y =0; //用来控制步进,对比相应的象素 for(每隔3个pixel) { color1 = GetPixel(hdc1, i * 40 + x, j * 40 + y); r1 = GetRValue(color1); g1 = GetGValue(color1); b1 = GetBValue(color1); color2 = GetPixel(hdc2, i * 40 + x, j * 40 + y); r1 = GetRValue(color2); g1 = GetGValue(color2); b1 = GetBValue(color2); if(abs(r1-r2) > T|| abs(g1-g2) > T|| abs(b1-b2) > T) Dif2++; } if(Dif2 > N) return TURE; else return FALSE; } d. 模块的主要函数 BOOL M_Estimation(HBITMAP hdc1,HBITMAP hdc2) { int Dif1 , 0; COLORREF color1,color2; //判断 for(四个对角区域) { 85861463.doc的研究 22 / 29 If(P_Contrast(Pic1.hdc,Pic2.hdc),i, j) Dif1++; } if(Dif1 == 4) return FALSE; // Dividing into 8*6 areas, every 3 pixels are compared with once for(除了4个角区域的其余区域) { If(P_Contrast(Pic1.hdc,Pic2.hdc)) Dif1++; } if(Dif1 >= Q) { Save_BMP(); Beep(); return TURE; } return FALSE; } 运动检测模块是判断是否有运动产生的模块。我们采用帧差绝对值的方法,这种方法运算简单,检测速度快,易于实现。但易受光线、天气、小目标物体的干扰,检测准确度低。因此在此基础上我们又对算法进行优化。因为光线对图像的影响是片状的,换句话说如果是光线引起的颜色深度的变化,每个模块的变化值应该差不多。所以我们利用公式三,在用帧差绝对值算法前我们先判断4个角区域的深度变化值。如果4个区域的变化值都很大,则我们认定是光线的影响,而非运动产生,否则保存图片,启动报警模块。 4.3 图像压缩 IJG的全称是Independent JPEG Group(独立JPEG小组),该组织以C语言源代码的形式提供应用广泛、完全免费的JPEG解码/编码函数库,编译后生成二进制格式的LIB文件,可以连接到其他编译型语言的程序中。其实对于Windows程序员来说,这个函数库最难的地方就是对编译选项的设置。 图像压缩模块主要实现在运动发生的情况下,对新的BMP文件进行压缩,并传到ftp上进行备份的功能。 因为Jpeg库体系通过两个头文件进行配置的:jconfig.h和jmorecfg.h。所以我们要移植JpegLib要先做下列修改: 1. 代码 #ifndef XMD_H typedef long INT32 #endif 要改为 #if !defined(XMD_H) && !defined(_BASETSD_H_) typedef long INT32 #endif 85861463.doc的研究 23 / 29 2. 代码 #ifdef NEED_FAR_POINTERS #define FAR far #else #define FAR #endif 要改为 #ifdef NEED_FAR_POINTERS #define FAR #else #define FAR #endif 3. 在我们的工程中,我们必须添加JpegLib的项目文件到工作区。 图4.4 图像压缩的算法流程图 , 相关说明 85861463.doc的研究 24 / 29 若有运动产生,换句话说有BMP文件生成,则新建一个进程进行图像压缩。 DWORD WINAPI Bmp2Jpg(LPVOID lpvoid) a. 必须包含的头文件 #include "jpeg.cpp" b. 模块的主要代码 void BmpToJpg(String BmpName, String JpgName) //将bmp文件转换为jpg文件 { Graphics::TBitmap *MyBMP = new Graphics::TBitmap; { MyBMP->LoadFromFile(BmpName); //图片位置 TJPEGImage *MyJPEG = new TJPEGImage; MyJPEG->Assign(MyBMP); MyJPEG->CompressionQuality = 70; //设置压缩比,比例为 1..100 ,默认70 MyJPEG->Compress(); MyJPEG->SaveToFile(JpgName); //保存路径 delete MyJPEG; } delete MyBMP; } c. 创建新进程,启动ftp模块,上传图片进行备份。 第五章 拨打电话模块 5.1 串口通信 一些Windows CE设备可以通过串行连接与其他计算机、打印机、调制解调器或者全球定位系统(GPS)卫星通信。串行I/O是Windows CE支持的最简单的通信形式,通常用于两个设备之间直接的、点对点的连接。串行I/O以各种各样的设备硬件连接出现,但是,大多数Windows CE设备使用串口线或PC卡设备,象调制解调器或者红外(IR) 接收机等。通过串口线交换数据类似于读写文件操作,传送和接收数据,管理连接。Windows CE设备使用点到点协议(PPP)和串行线路互联协议(SLIP)进行直接或拨号连接。 5.2 RS-232串行接口标准 在国际标准化组织(ISO)网络通信的开发系统互联(OSI)模型中,串行通信操作位于物理层于应用层之间,RS-232描述的物理层。串行设备驱动储存在下一层,也就是数据链路层。Windows CE设备串行通信函数能够通过串行硬件去交换数据。 85861463.doc的研究 25 / 29 7.应用层 应用 6.表示层 5.回话层 4.传输层 3.网络层 串行API 2.数据链路层 串行设备驱动 1.物理层 串行端口 红外(IR)端口 , 串行通讯是目前计算机、通信和控制领域最基本的通信方式。由于Windows CE是一 个基于Unicode的操作系统,并且Windows CE不支持Windows下常用的串行通信重 叠I/O方式(OVERLAPPED),因此编写Windows CE下的串口通讯类有一些与桌面 Windows不同的地方。 , 因为Windows CE的串口驱动不支持重叠,这样的话接收数据和发数据就要分开。要 接收串口数据就必须创建一个线程专门用于接收数据。串口的配置不需要设置很多参 数,默认的配置大部分是不需要修改的。一般改动就是波特率、位数、奇偶校检等几 项。超时值是需要改动的。ReadIntervalTimeout是指两个字符传送之间的超时时间。 一次写操作的超时时间等于WriteTotalTimeoutMultiplier 乘以要发送的字符数 加 上WriteTotalTimeoutConstant。 单位是毫秒。读操作的超时和写类似。所以设置 超时是一个关键。设置太小可能丢失数据。 , 串口麻烦就麻烦在读取数据上。除了及时的读取数据外,还要解决接收到的数据的处 理工作。如果在读取串口数据的线程中安置数据处理工作,那么可能会丢失数据(终 端设备发送数据但是没收到),也有可能不会丢失(终端设备发送的数据的时间、大 小都是确定的)。如果肯定接收的数据在处理工作结束后终端设备才发送数据,那么 完全可以将数据处理工作放在读取串口的线程中。 5.3 Modem 拨打电话模块 85861463.doc的研究 26 / 29 图5.1 Modem 拨打电话模块流程图 , 定义一个串口类Serial每五分钟内如果有新位图生成,Modem模块自动启动 a. 创建独立的读线程和写线程 DWORD WINAPI ReadPortThread(LPVOID lpvoid); //读数据线程 DWORD WINAPI WritePortThread(LPVOID lpvoid); //写数据线程 注:hReadThread = CreateThread (NULL, 0, ReadPortThread, 0, 0,&dwThreadID) hWriteThread = CreateThread (NULL, 0, WritePortThread, 0, 0,&dwThreadID) b. 打开串口 BOOL OpenPort(LPTSTR lpszPortName); //打开串口 注:hPort = CreateFile (lpszPortName, GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING,0, NULL); //打开串口 c. 串口的初始化,在Serial的InitDCB函数中进行 BOOL CSerial::InitDCB() 注:在其中设置波特率、奇偶校验等等。 d. 发送测试数据 fWriteState = WriteFile(hPort, teststring, dwLength, &dwLength, NULL); e. 如果返回Modem不正常,则跳出模块,关闭端口,在Serial的析构函数中实现 85861463.doc的研究 27 / 29 ClosePort(hPort); f. 若Modem正常应答,则发送AT指令 char *telnum; //电话号码 char *strDest="AT"; telnum = string(m_telnum); strncpy(*strDest,*telnum,count ); dwLength=ComStat.cbOutQue; if(dwLength>0) //cbOutQue返回在串行驱动程序输出队列中的字符数 { //写数据到串口 TCHAR* buf=new TCHAR[256]; fWriteState = WriteFile(hPort,buf,dwLength,&dwLength,NULL); if(!fWriteState) ClearCommError(hPort,&dwErrorFlags,&ComStat); while (hPort != INVALID_HANDLE_VALUE) { //等待串口的事件发生 WaitCommEvent (hPort, &dwCommModemStatus, 0); if (dwCommModemStatus & EV_RXCHAR) ……….. g. 延时10秒 Sleep(10000); h. 报警完毕,退出模块,关闭端口 ClosePort(hPort); 注:上面流程忽略了超时的情况,发生超时的时候用InitCommTimeouts()处理 //得到超时参数 GetCommTimeouts (hPort, &CommTimeouts); //设置超时值 SetCommTimeouts (hPort, &CommTimeouts) , 此处给出写进程的源代码。 DWORD WINAPI WritePortThread(LPVOID lpvoid) { BOOL fWriteState; DWORD dwCommModemStatus; DWORD dwLength; COMSTAT ComStat; DWORD dwErrorFlags; size_t count; char *telnum; //电话号码 char *strDest="AT"; while (hPort != INVALID_HANDLE_VALUE) { //等待串口的事件发生 85861463.doc的研究 28 / 29 WaitCommEvent (hPort, &dwCommModemStatus, 0); if (dwCommModemStatus & EV_RXCHAR) { ClearCommError(hPort,&dwErrorFlags,&ComStat); telnum = string(m_telnum); strncpy(*strDest,*telnum,count ); //cbOutQue返回在串行驱动程序输出队列中的字符数 dwLength=ComStat.cbOutQue; if(dwLength>0) { //写数据到串口 TCHAR* buf=new TCHAR[256]; fWriteState = WriteFile(hPort,buf,dwLength,&dwLength,NULL); if(!fWriteState) { //不能写数据到串口 MessageBox(NULL,TEXT("Error in write to serial port"),TEXT("Write Error"),MB_OK); } else { //把数据赋值给全局变量 strOutChar=buf; } delete[] buf; } } GetCommModemStatus (hPort, &dwCommModemStatus); } return 0; } 至此,报警模块基本完成,模块能够完成运动检测后定时拨打用户电话的功能,能够在最短的时间内通知用户,并能在一定程度上防止犯罪发生率。换句话说,此模块使得了eDog的实用性更强。 结论: 通过eDog系统的开发,我学到了嵌入式系统的一些相关知识,另外也学会了在PB上定制Windows CE.net内核,这就要求我对整个Windows CE系统更加了解,我们必须清楚PB上自带的BSP各有什么用途。我们可以通过选择特定的BSP定制自己的Windows CE 5.0操作系统,除了拥有一些常见的驱动程序,我们可以对Windows CE 5.0的内核进行裁减。 在整个eDog的开发过程中,我们遇到了不少困难。最初也是最主要的困难是Windows CE 85861463.doc的研究 29 / 29 5.0的摄像头驱动程序;图象采集本来想用DirectShow来实现的,但是发现EVC和VC相差太远,这方面的知识又太少了,只好另取途径。但是在eDog将来的升级中,我们建议用DirectX的相关类来处理,这样可以提高图像处理的效率。 在解决困难的同时,我们产生了不少灵感,这对将来家居安防系统的发展是不无裨益的。我们发现单片机芯片在嵌入式系统中应用非常广泛。如果可以能够充分利用单片机相信可以让eDog实现不少新的有用的功能。例如,利用温度检测芯片可以做成温度检测报警系统,利用烟雾检测芯片可以做成烟雾检测报警系统 等等。 参考文献: [1] Windows CE.net内核定制及应用开发 周毓林 宁杨 付林林 编著. 北京:电子工业出版社,2005. [2] Visual C++自学指南 [美]Mark Andrews 著 北京:清华大学出版社,1997. [3] Visual C++实用教程 丁有和 郑进 编著 北京:电子工业出版社,2000. [4] 嵌入式系统Windows CE开发技巧与实例 傅曦 齐宇编著 北京:化学工业出版社.,2004 [5] EVC高级编程及其应用开发 (Embedded Visual C++嵌入式编程) 汪兵 李存斌 陈鹏 等编著 北京:中国水利水电出版社,2005
本文档为【1152.基于Windows CE的智能家居安防系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_477730
暂无简介~
格式:doc
大小:236KB
软件:Word
页数:42
分类:互联网
上传时间:2017-09-20
浏览量:16