历史上的今天
返回首页

历史上的今天

今天是:2024年10月30日(星期三)

正在发生

2020年10月30日 | 基于ARM的远程无线视频监控系统设计

2020-10-30 来源:elecfans

  随着计算机、网络、通信技术的发展,以及多媒体视频技术的不断完善,基于网络的第三代远程网络视频监控系统取得了长足的发展。新一代的监控系统以网络为依托,以数字视频的压缩、传输、存储和播放为核心。系统采用嵌入式多任务操作系统、高效的视频压缩芯片和功能强大的嵌入式处理器,将视频压缩和传输处理工作全部内置到芯片上,前端摄像机送来的视频信号数字化后经过压缩、打包等过程变成基本网络协议的视频流,通过网络的传输,视频流发送到接收端。视频接收端可利用软件进行解码,在PC上进行显示和处理。


  系统硬件平台

  本系统是以PXA270为微处理器的ARM开发平台组成。PXA270是一个32位处理器,可在312MHz、416MHz、520MHz和624MHz这4种不同的时钟频率下运行。用在高性能、低功耗、便携、手持式的设备中。它加入了Intel Xscale技术,具有调节动态电压和频率以及完善的电源管理功能,提供了工业界领先的MIPS/mw性能。外接网卡接口与处理器直接连接,实现以太网通信,可利用TFTP协议对内核和根文件系统的映像进行快速下载。有3个UART分别是标准、蓝牙和全功能的UART,可以通过全功能UART与GPRS DTU相连接进行信号传输。3个USB接口,可以与USB摄像头相连接进行图像采集。USB摄像头采用的是以OV511为芯片的网眼V2000摄像头。


  GPRS DTU是一款基于GPRS 网络的无线数据传输终端设备,提供全透明数据通道,网络覆盖范围广能使用移动电话的地方就可以使用支持数据透明传输与协议转换,支持备用数据中心,点对点互连功能,支持永远在线、空闲下线和空闲掉电3种工作方式,具有短信和电话唤醒功能,支持断线自动重连功能。


  系统总体设计

  整个监控系统主要是由ARM、GPRS DTU、USB摄像头和PC组成。ARM开发板以Linux操作系统编写驱动,通过指令调度利用USB摄像头进行图像采集,将采集好的图像通过GPRS DTU进行无线传输,PC与因特网相连接,接收到GPRS DTU传输过来的图像,通过VC++编写上位机,可以看到监控点传输的图像。操作人员可以通过短信或电话对监控端进行控制,可以使监控端随时处于工作或关闭状态,这样一来不仅可以随意对监控端进行控制还可以节省流量,经济实惠,特别适用于一些对动态图像要求不高的环境,系统结构框图如图1所示。

  

  图1 系统结构框图


  系统软件设计

  本系统采用Linux为操作系统,它是一个多用户、多任务操作系统;具有良好的开放性,遵循世界标准规范,特别是遵循开放系统互连(OSI)国际标准。具有完善的内置网络。Linux在通信和网络功能方面均优于其他操作系统。为用户提供了强大完善的网络功能。根据程序开发的需要对Linux操作系统进行裁减与编译,将制作好的Linux操作系统通过JTAG下载到ARM开发板里,就可以使用arm-linux对ARM开发板进行控制。


  图像的采集是通过ARM-Linux调度Video4Linux和影像设备驱动程序来进行视频捕获。Video4Linux是Linux影像系统与嵌人式影像的基础,是Linux 内核里支持影像设备的一组API,Linux在多媒体上的应用是目前非常热门的研究领域,其中最关键的技术则是Linux的Video4Linux。在Linux内核中对Video4Linux进行配置,如图2所示。配置好以后通过bootloader下载到ARM-Linux里。USB摄像头使用的是OV511芯片的网眼V2000摄像头。在Linux操作系统里配置好OV511芯片的驱动,如图3所示。

  

  图2 配置Video for Linux

  

  图3 配置USB OV511摄像头
 

  通过bootloader下载到ARM-Linux里,这样就可以通过USB摄像头进行图像采集,图像采集流程如图4所示。


  采集到的图像为BMP格式,图像太大不利于网络传输,需要进行JPEG压缩,JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得较高的压缩率的同时能展现十分丰富生动的图像,非常适合于视频网络传输。基本的JPEG算法由以下步骤完成:(1)通过离散余弦变换(DCT)消除数据冗余;(2)使用量化系数矩阵对离散余弦变化系数进行量化;(3)对量化后的系数进行编码,使其熵最小,熵编码通常采用huffman可变字长编码。产生有损图像压缩的原因主要发生在第2步。JPEG标准是在变换编码的基础上,综合应用了DCT和哈夫曼编码2种手段,达到了很好的图像压缩效果。基于离散余弦变换DCT的编码方法,是JPEG算法的核心内容[5]。在图像采集的时候需要用到JPEG库,所以需要先安装JPEG库。

  

  图4 图像采集流程图

  在/usr/local/man/manl目录下会生成cjpeg.l、djpeg.l、jpegtran.l、rdjpgcom.l、wrjpgcom.l、snapscreenshop.l六个文件,在/usr/local/arm/3.4.3/arm-linux/lib目录下会生成libjpeg.a、libjpeg.la、libjpeg.so、 libjpeg.so.62、libjpeg.so.0.0五个函数库,libjpeg.so.62、libjpeg.so.0.0就是我们需要的库,将它拷贝到arm-linux里,这样ARM就支持JPEG压缩格式的图像。图像压缩的一些重要函数如下:

  char *filename = “first.jpeg”;//指定压缩后的图像所存放的目标文件

  struct jpeg_compress_struct cinfo;//申请并初始化JPEG压缩对象

  struct jpeg_error_mgr jerr; // 声明错误处理器

  JSAMPROW row_pointer[1]; // 一行位图

  int row_stride; // 每一行的字节数

  int line; //每一列的字节数

  jpeg_create_compress(&cinfo);

  cinfo.image_width = width; // 图像的宽、高和深度

  cinfo.image_height = height;

  cinfo.input_components = depth;

  cinfo.in_color_space=JCS_RGB;// 彩色图像

  jpeg_set_quality(&cinfo, JPEG_QUALITY, TRUE ); // 设定压缩质量

  cinfo.dct_method=JDCT_FASTEST; // DCT离散余弦变换

  jpeg_start_compress(&cinfo, TRUE); //开始进行JPEG图像压缩

  while (cinfo.next_scanline 《 cinfo.image_height)//对每一行进行压缩

  jpeg_destroy_compress(&cinfo); //释放压缩工作过程中所申请的资源

  采集到的图像如图5所示。如果要进行连续帧的采集由grab_fd.frams来确定需要采集的帧数,最多支持一次采集32帧。

  

  图5 采集的图像

  GPRS DTU通过全功能串口与ARM开发板相连接,在arm-linux的指令调度下将ARM采集到的图像通过串口通信传输到GPRS DTU。arm-linux是通过设备文件访问串口的,在访问具体的串行端口时,只需打开相应的设备文件即可。串行端口Port1和Port2对应的设备文件分别为/dev/ttyS0和/dev/ttyS1。若要使用串口进行通信必须在通信两端设置好串口的属性,包括数据传输的波特率、传输的数据格式、是否有奇偶校验位、流控方式等。在Linux下进行串口设置,涉及一个重要的数据结构struct termios,设置串口波特率struct termios Opt,设置串口数据位

  struct termios Opt;

  Opt.c_cflag &= ~CSIZE; //屏蔽字符大小位

  Opt.c_cflag |= ~CS8; //选择8位数据位

  设置串口校验位与此相关的宏定义有:

  #define PARENB 0000400 //PARENB控制是否使能奇偶校验

  #define PARODD 0001000 //PARODD控制使用奇校验还是偶校验

  设置串口停止位与停止位相关的宏定义只有CSTOPB,设置termios结构的.c_cflag成员即可。

  #define CSTOPB 0000100

  Opt.c_cflag &= ~CSTOPB; //1位停止位

  Opt.c_cflag |= ~CSTOPB; //2位停止位

  设置串口波特率:

  串口使用open函数执行打开操作,open( )函数带有两个参数,其中参数1为要打开的设备文件名,参数2为打开方式。它们的含义如下。

  O_RDWR:既可读也可写。

  O_NOCTTY:告诉嵌入式Linux,该程序不想成为此端口的“控制终端”。如果应用程序不强调这一点,那么任何输入都会影响程序的执行。


  O_NDELAY:表示该程序不关注DCD信号线所处的状态,即不管对端设备是在运行或是挂起。如果不设置该标志,则程序会被设置为睡眠状态,直到DCD信号为低为止。


  使用close(fd)系统调用关闭串口。关闭一个串口通常会将DTR信号设置为低电平,如果外接GPRS DTU,就会将GPRS DTU挂起。使用write( )函数向串口写入数据,write调用若正确,返回发送的字节数,否则返回-1。从串口读取数据如果在原始数据的模式下对端口进行操作,read( )函数调用将返回串行口输入缓冲区所有的数据。如果没有数据,那么该进程将被阻塞,处于等待状态,直到数据到来,或者到了规定时间和出现错误为止。通过如下方法,能使read( )函数调用立即返回。


  系统的实现

  本系统监控中心服务器采用PC实现,使用Windows操作系统,使用VC++编写上位机程序,利用TCP/IP通信,输入监控端的IP地址后,上位机可以与监控端通信,接收到传输过来的图像,如图6所示。该系统大概3~5秒传输一幅图像。

  

  图6接收到的图像


  本监控系统支持短信和电话唤醒功能,也就是说通过短信和电话拨号就可以对监控系统进行远程控制,使其进入工作状态,进行信息传输。具有连接时机可控功能,支持永远在线、空闲下线和空闲掉电3种工作方式。在不进行数据传输时,监控系统可以进入下线状态,大大节约了通信费用,而在需要重新开始数据传输时,可以用手机给监控系统发送短信或打电话将其唤醒,恢复与数据中心的连接,也可以随时随地发短信对监控系统进行配置,方便管理。

推荐阅读

史海拾趣

Alpha 3 Manufacturing公司的发展小趣事

Alpha 3 Manufacturing公司成立于XXXX年,初期面临着资金短缺、市场竞争激烈以及技术瓶颈等多重挑战。然而,创始人凭借对电子行业的深刻理解和敏锐的市场洞察力,看到了电子产品制造领域的巨大潜力。他带领团队攻克技术难关,开发出了一款具有创新性的电子产品,迅速获得了市场的认可,为公司的起步奠定了坚实的基础。

Doodle Labs公司的发展小趣事

Doodle Labs非常重视企业文化的建设和发展。公司倡导开放、创新、协作、共赢的价值观,为员工提供良好的工作环境和发展机会。同时,Doodle Labs还积极参与公益事业和社会活动,为社会做出贡献。在未来,Doodle Labs将继续秉承这些价值观和精神,致力于成为全球领先的无线通信技术提供商和物联网解决方案提供商。

Fullywell Semiconductor Co Ltd公司的发展小趣事

随着市场的不断扩大,Fullywell意识到需要进一步提升产能以满足客户需求。于是,公司在2010年启动了大规模的产能扩张计划,投资建设了一座现代化的晶圆制造厂。同时,公司也加大了对国际市场的开拓力度,与多家国际知名电子企业建立了战略合作关系。这些举措不仅显著提升了Fullywell的产能和产品质量,也使其在国际市场上的知名度大幅提升,进一步巩固了其在行业内的地位。

依必安派特(ebmpapst)公司的发展小趣事

在快速发展的过程中,依必安派特也面临着一些挑战。其中之一就是仿冒产品的泛滥。为了维护品牌形象和客户利益,依必安派特积极打击仿冒产品。例如,在2023年,依必安派特和地方政府联手突击了一家位于广东的仿冒产品工厂,揭示了其造假行为。这一行动不仅保护了依必安派特的品牌声誉和客户信任,也为中国市场的公平竞争环境做出了贡献。

东晨(DC)公司的发展小趣事

东晨(DC)公司深知人才是企业发展的核心动力。因此,公司高度重视人才培养和引进工作。公司建立了完善的培训体系,为员工提供全面的职业发展和技能培训。同时,公司还积极引进优秀人才,通过股权激励等措施留住人才。这些措施为公司的持续发展提供了有力的人才保障。

Crystek公司的发展小趣事

为了更好地满足客户需求和推动业务发展,Crystek公司设立了专门负责频率控制的部门——Crystek Crystals和Crystek Microwave。这两个部门分别致力于开发和制造使用石英谐振器的频率产品以及为微波行业开发频率控制和支持产品。这种专业化的分工不仅提高了公司的运营效率,也使得Crystek公司能够更好地为客户提供定制化的解决方案和优质的服务。

问答坊 | AI 解惑

单片机课程设计任务书

本任务书包含DS18B20数字温度计,交通灯,作息时间表等六个课题,里面有各个题目的具体要求,可以供对单片机有一定程度来掌握的同学来练习!…

查看全部问答>

画FPGA原理图用那款EDA会好些?

FPGA设计大多用语言输入,但系统设计中使用什么工具会更快捷的设计呢?请教大家了…

查看全部问答>

要拿51访问比较大的存储器~~

怎么做最方便啊? 主要是地址线不够的问题,我想着连74LS273,但是时钟线又不知道怎么拽出来... 或者还有啥好办法啊…

查看全部问答>

XILINX 关于FPGA 对DDR SDRAM 的设计文档

本应用指南描述了在 Virtex™-5 器件中实现的 200 MHz DDR SDRAM (JEDEC DDR400 (PC3200) 标准)控制器。本设计实现使用 IDELAY 单元调整读数据时序。读数据时序校准和调 整在此控制器中完成。DDR SDRAM 器件是低成本、高密度的存储资源, ...…

查看全部问答>

请问PB4.2创建的SDK如何在VS2005中使用

用PB4.2自己定制了SDK,该SDK在eVC中可以使用并且使用正常,但在VS2005中就没有发现可选选项,网上下载了一个standard sdk500安装后却能在vs2005里面选到。请问,VS2005中是否不能使用PB4.2中创建的SDK,如果可以,请指教如何设置! …

查看全部问答>

有人做过fpga上总线的IP核开发吗?

要求简单描述如下 1.自己编写代码,实现PLB总线(IBM的CoreConnect总线的一部分)的功能 2.再添加一个master,一个slave,实现功能 一直没有头绪,到这里来看看哈,望各位高手不吝赐教啊 问题如下: 1.有没有什么IP核的集成,设计规范? 2.有 ...…

查看全部问答>

双三极管组成的基本无稳态电路,看不懂~~

因为需要一个闪烁电路。由于没啥特别要求,只要能闪就成,俺想到了用最简单的电路形式: 就是那些电子专业的哥们经常要做的一个 由两个三极管组成的无稳态电路。 上网找了一个,看了看。 见附件中。 附件是这个电路分析时,上面的图是刚上电瞬 ...…

查看全部问答>

用stm32内部的时钟进行串行口通讯可靠吗?

                                 短时间试过 好像还行 不知道长期应用是否可靠…

查看全部问答>

请问ATmega128单片机的两个串口USART0和USART1使用有区别么?

一段串口中断收发程序希望串口收到一个字节后判断是否是空(0x00)如果是空(0x00)通过串口返回0xFF否则返回收到的数字。在USART0上运行正确无误将程序中所有的“0”改为“1”(中断向量号也改了)改到串口USART1上运行无论输入什么却只能返回“0x ...…

查看全部问答>

2602型源表进行VCSEL直流生产测试——设备清单

基本设备      2602型双通道源表系统(以单机箱实现激光二极管偏置电压输出和光电流测试)      2510-AT型 TEC源表(激光二极管温度控制)      2500IN ...…

查看全部问答>