基于S3C2440A芯片Linux系统实现MJPEG网络摄像机的搭建

发布者:TranquilBreeze最新更新时间:2023-01-03 来源: elecfans关键字:S3C2440A芯片  Linux系统  MJPEG  网络摄像机 手机看文章 扫描二维码
随时随地手机看文章

1 、系统硬件组成与网络架构

摄像机硬件核心采用三星公司推出的基于ARM9架构的S3C2440A芯片,该处理器主频达到400 MHz可以满足实时压缩,MJPEG视频流可以达到320×240分辨率25 fps的性能要求。外围搭配64 MB SDRAM、256 MB NAND Flash,网络功能由DM9000以太网MAC控制芯片负责,摄像头模块由USB控制器控制,系统供电由3片LM71117组成,分别输出3.3 V、1.8 V、1.25 V电压,辅助外围接口构成摄像机硬件结构。S3C2440A系统硬件框图如图1所示。

基于S3C2440A芯片Linux系统实现MJPEG网络摄像机的搭建

图1 S3C2440A系统硬件框图

网络摄像机是互联网上的TCP/IP设备,系统网络拓扑图如图2所示。其中在家庭区域内根据安防的特点在大门走廊、客厅内、阳台区域分别布置摄像机,再由网线连接到路由器,配置路由器参数映射每个摄像机独立端口与IP地址,即完成Internet接入。远端由固定位置的PC机,移动位置的3G笔记本和随身携带的3G Android手机组成,PC机可以通过WEB浏览器访问与控制网络摄像机,Android手机通过客户端实现实时访问。


2 、系统软件设计

2.1 网络摄像机软件设计

搭建摄像机需要Linux系统环境,首先移植Bootloader,对Linux 2.6.32内核进行裁剪,加载Linux UVC(USB video device class)驱动及相关驱动,将编译好的Linux系统镜像烧写到ARM板Nand Flash中,对Bootloader设置启动引导地址,即完成软件运行环境搭建。


分析网络摄像机性能需求与拓展性,须满足下列条件:

◆ 视频监控实时性;

◆ 支持多客户端同时连接;

◆ 图像识别算法或预留接口;

◆ 功能模块化满足后期开发可扩展。

因此,采用多线程架构与互斥锁机制来保证实时性、模块化的思想设计代码结构。软件程序主流程如图3所示。

基于S3C2440A芯片Linux系统实现MJPEG网络摄像机的搭建

图3 软件程序主流程

其中主要实现如下功能。

① 初始化Linux V4L2接口,必须按照V4L2标准结构初始化结构体,其中包括struct v4l2_capability cap;struct v4l2_format fmt;struct v4l2_buffer buf;struct v4l2_requestbuffers rb; struct v4l2_streamparm setfps。此外将视频设备名、视频宽度、视频高度、帧率、视频格式和抓取方法传递给函数init_videoIn(struct vdIn *vd, char *device, int width, int height, int fps, int format, int grabmethod)实现初始化。值得注意的是众多USB camera并不支持JPEG格式视频流直接抓取,针对YUYV格式抓取却有广泛支持。后期进行图像识别算法操作时直接分析YUYV原始图像数据,将节省JPEG压缩数据转换为原始图像数据的大量运算开销,因此采用YUYV抓取模式。

② 创建核心图像处理线程。在该线程内实现:抓取功能。

◆ UVC设备单帧抓取,uvcGrab(struct vdIn *vd)函数实现单帧YUYV格式的原始图像拷贝到内存,采用高效的mmap内存映射方法读取;

◆ JPEG核心算法实现,JPEG压缩算法占用大量CPU时间,下一小节将详细讨论。

③ 创建套接字接口。为实现多用户同时连接网络摄像机,必须采用socket服务线程,每当有新用户连接同时产生一个新线程与之对应,实现多用户端同步监控。

④ 搭建基于Web浏览器访问方式的web主页。嵌入式设备资源有限,轻量级的Web Server主要有:Boa、Httpd、Thttpd等。本设计选用开源的Boa、交叉编译Boa源码配置boa.conf文件,配置系统etc自启动shell加入Boa程序,将编写HTML页面文件放入系统中对应的www目录后即可正常工作。


2.2 MJPEG压缩算法研究与实现

MJPEG(Motion Joint Photographic Experts Group)视频编码格式,把运动的视频序列作为连续的静止图像来处理,这种压缩方式单独完整地压缩每一帧,编辑过程中可随机存储每一帧,可进行精确到帧的编辑。


MJPEG单帧压缩算法为JPEG(Joint Photographic Experts Group)。

人眼视觉生理特性决定眼睛对构成图像的不同频率成分具有不同的敏感度。JPEG压缩是有损压缩,但损失的部分是人类视觉不容易察觉到的部分,利用眼睛对色彩域中的高频信息部分不敏感的特点,节省大量需要处理的数据信息。一帧原始图像数据对其进行JPEG算法编码过程分两大部分:

① 空间冗余度,去除视觉上的多余信息;

② 结构(静态)冗余度,去除数据本身的多余信息。

JPEG编码中主要涉及包括:DCT、zigzag编码、量化、RLE编码、范式Huffman编码、DC(直流分量)的编码。JPEG编码流程如图4所示。

基于S3C2440A芯片Linux系统实现MJPEG网络摄像机的搭建

图4 JPEG编码流程

DCT(Discrete Cosine Transform)变换,又称离散余弦变换是可逆的、离散的正交变换。它将原始图像色彩空间域转换为频谱域。由于相邻两点像素色彩很多是接近的,压缩这些不需要的数据必须利用图像信号的频谱特性。JPEG压缩原理的理论依据是图像信号频谱线大都分布在0~6 MHz范围内,而且一幅图像内大多数为低频频谱线,而高频的谱线只占图像比例很低的图像边缘或者细微纹理细节的信号时才出现。根据这一特性,在做数字图像处理时对包含信息量大的低频谱区域分配较多的比特数,相反的对于包含信息量低的高频谱区域分配较少的比特数,达到图像压缩的目的,而图像质量并没有肉眼可察觉的降低。除了DCT变换,常用的变化算法还有:WalshHadamard沃尔什哈达玛变换、哈尔变换、傅氏变换等。


DCT变换公式为:

时C(u)=1,C(v)=1.f(i,j)经过DCT变换之后,F(0,0)是直流系数,其他参数时为交流系数。经过DCT变换后一幅图像的DCT系数块集中在8×8矩阵的左上方,这里直流DC系数幅度最大,这一矩阵区域集中了图像的大部分低频频谱分量,离矩阵左上角越远的高频频谱几乎不含图像信息。变换过程本身虽然并不产生压缩作用,但是变换后的频率系数却非常有利于码率压缩。


量化是对DCT系数的一个优化过程,利用了肉眼的高频不敏感特性对数据进行大幅压缩。整个过程是简易的把频率域的每个成份除以对应的常数,并对结果四舍五入取整,整个流程的目的是减少非零的系数以及增加零值系数数目。量化是有损运算,是图像质量下降的主要因素。对于人眼对亮度与色差的敏感性不一致,分别使用亮度量化表与色度量化表。对量化后的数据采用zigzag蛇形编码,这是因为交流分量中含有大量的零值,zigzag编码可以产生更多连续的零值,对下一步使用行程编码非常有利。


行程编码(Run Length Coding)是一种根据相同数据连续重复多次的情况简化表示的算法。例如,5555333333999按照行程编码表示为(5,4)(3,6)(9,3)可以对数据,尤其是大量的零值压缩数据长度。


编码后的数据还须通过Huffman编码来压缩,Huffman编码的最大特点是使出现频率较高的数字小于8位,而出现频率低的数字大于8位,这使得数据大幅压缩。


到此数据的压缩过程结束,对压缩后的数据按照JPEG文件格式要求进行保存,加上文件开始标记Start Of Image=FFD8,文件结束标记End Of Image = FFD9,量化表标记Define Quantization Table=FFDB,霍夫曼编码表标记Ddfine Huffman Table=FFC4,帧开始标记Start Of Frame=FFC0等标记,再加上图片识别信息字节标记就最终形成完整的可用于传输或存储的JPEG帧图像,通过套接字接口不间断地发送JPEG图像即形成MJPEG视频流。


为提高CPU效率,减少进程间切换产生的开销,将压缩算法函数集成到单一线程里。JPEG核心压缩编码函数MCUcode实现如下:

uint8_t *MCUcode(S_JPEG_ENCODER_STRUCTURE * enc,uint32_t image_format, uint8_t * output_ptr) {

DCT(enc﹥Y1);//DCT离散余弦变换函数

quantization(enc,enc﹥Y1, enc﹥ILqt);//量化函数,亮度量化表量化并按照zigzag排列存储

output_ptr = huffman(enc, COMPONENT_Y, output_ptr);//霍夫曼编码函数

DCT(enc﹥Y2)……

DCT(enc﹥Y3)……

DCT(enc﹥Y4)……

DCT(enc﹥CB);//DCT离散余弦变换函数

quantization(enc,enc﹥CB, enc﹥ICqt);//量化函数,色度量化表量化

output_ptr=huffman(enc, COMPONENT_CB, output_ptr);//色度霍夫曼编码函数

DCT(enc﹥CR)……

return output_ptr;

}

其中Y1、Y2、Y3、Y4对应水平排列的4像素亮度值,CB、CR是水平排列以2像素为1单位像素的色度值。


3 、Android客户端设计

Android是Google公司推出的针对移动设备的操作系统,底层采用Linux内核,应用程序采用类Java语言编写,并运行于类JVM虚拟机的Dalvik虚拟机之上。该系统具有开放源码免费授权的优势,功能完善和成熟,已获得厂商的广泛支持和大量市场份额。eclipse IDE开发环境友善,因此选用Android系统作为物联网摄像机客户端开发平台。


Android程序一般由多个Activity、Intent、Content Provider、Service等程序框架组成,其中最基础的是Activity活动类,该类相当于软件运行时的一个页面,在页面之上可添加各种控件,如button按键、ImageView图片、Text boxes、Lists列表等。除此以外还负责监听系统事件,负责启动其他的Activity类。在多个Activity类之间跳转就需要用到Intent类,Intent类有两个重要部分:动作和动作对应的数据。常用的动作有MAIN、VIEW、PICK、EDIT等,动作数据则以URI形式表示。通过Intent类还能传递参数,作用类似链条串起Activity类,Activity类跳转图如图5所示。

基于S3C2440A芯片Linux系统实现MJPEG网络摄像机的搭建

图5 Activity类跳转图

解析视频流须先由网络获取数据流,实现的方法代码如下:

public static VideoInputStream read(String url) {

HttpResponse res;

DefaultHttpClient httpclient=new DefaultHttpClient();//http客户端

try {

resource=httpclient.execute(new HttpGet(URI.create(url)));

return new VideoInputStream(resource.getEntity()。getContent());

……

}}//从响应中获取消息实体内容

对已获取的数据流按照JPEG标准文件头分段,实现的方法代码如下:

public Bitmap readFrame() throws IOException {

mark(FRAME_MAX_LENGTH);//在数据流中设置标记,调用mark方法

int headerLength=getStart(this, START_MARKER);//计算文件头长度

reset();//reset方法重置数据流指向最后一个标志位置

byte[] header=new byte[headerLength];

readFully(header);

try {

ContentLength=countContentLength(header);//计算数据内容长度

}

catch (NumberFormatException nfe) {

ContentLength=getEnd(this, END_MARKER);

}

byte[] frameData=new byte[ContentLength];//存取帧字节数据

skipBytes(headerLength);//跳过文件头字节

readFully(frameData);

return BitmapFactory.decodeStream(new ByteArrayInputStream(frameData));

}

需要注意的是,在AndroidManifest.xml文件中需加上语句,表示程序拥有网络的完整访问权限。获取每帧数据后继承Android SDK中提供的view.SurfaceView类与graphics.Canvas类,将收到的完整帧图像按队列顺序不间断地显示在视窗框架类中,对人眼视觉帧率超过5 fps时即有视频效果,到25 fps即是电影流畅度。对于定点定位监控,经过测试出于节省带宽费用考虑设定5 fps即能满足基本需求,10 fps是较为合理参数。将编译后应用程序安装到手机中,Android实时监控截图如图6所示。


4、结语

本文描述了网络摄像机的软件设计与MJPEG算法原理,结合Android移动技术,开发了整套系统;并实际应用于验证系统,取得了良好结果。期望在后续工作中涉足图像识别算法、物体追踪算法、人体行为侦测算法等图像领域,使网络摄像机变得更智能。


关键字:S3C2440A芯片  Linux系统  MJPEG  网络摄像机 引用地址:基于S3C2440A芯片Linux系统实现MJPEG网络摄像机的搭建

上一篇:基于S3C2410嵌入式处理器实现CAN/Ethernet网关的设计
下一篇:基于S3C2410的智能家居控制器设计与实现

推荐阅读最新更新时间:2024-11-07 21:10

基于S3C2410的嵌入式Linux系统构建
目前,在嵌入式系统中基于ARM微核的嵌入式处理器已经成为市场主流。随着ARM技术的广泛应用,建立面向ARM构架的嵌入式操作系统成为当前研究的热点问题。   已经涌现出许多嵌入式操作系统,如VxWork,windows-CE,PalmOS,Linux等。在众多的嵌入式操作系统中,Linux以其开源代码及免费使用倍受开发人员的喜爱。本文选用的微处理器S3C2410是基于32位ARM920T内核的微处理器,基于此处理器构造一Linux嵌入式操作系统,将其移植到基于32位的ARM920T内核的系统中,在此基础上进行应用程序开发。 l开发环境介绍 1.1 基于S3C2410 ARM920T的硬件平台 该系统
[单片机]
高清网络摄像机应用技术探讨
  当前,大部分安防人士还是停留在“高清”、“带宽”等意义上。其实高清有时候完全可以是个载体,可以搭配其他技术,推出更具有实用意义的一些创新。下面就高清网络摄像机与实用碰撞,产生的一些实际应用做一个简单的探讨。    物联网概念的应用   物联网这个概念,在中国早在1999年就提出来了,当时叫传感网。其定义是:通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网相连接,进行信息交换和通信,以实现智能化识别、定位、跟踪、监控和管理的一种网络概念。“物联网概念”是在“互联网概念”的基础上,将其用户端延伸和扩展到任何物品与物品之间,进行信息交换和通信的一种网络概念。   物
[安防电子]
ARM linux系统调用的实现原理
  大家都知道linux的应用程序要想访问内核必须使用系统调用从而实现从usr模式转到svc模式。下面咱们看看它的实现过程。   系统调用是os操作系统提供的服务,用户程序通过各种系统调用,来引用内核提供的各种服务,系统调用的执行让用户程序陷入内核,该陷入动作由swi软中断完成。   at91rm9200处理器对应的linux2.4.19内核系统调用对应的软中断定义如下:   #if defined(__thumb__) //thumb模式   #define __syscall(nAME) \\   "push {r7} \\t" \\   "mov r7, #" __sys1(__NR_##name) " \\t"
[单片机]
I2C总线在Linux系统中的驱动设计
  1 引言       Linux操作系统因具有源代码公开、便于裁减、有广泛的处理器支持等优点,成为当前嵌入式系统的热门选择。基于I2C总线的键盘扩展设备主要用于满足嵌入式设备中对多按键的需求,驱动程序在系统启动时对硬件进行初始化。在系统启动后实现硬件和应用程序之间的数据交互。针对 S3C2410 微处理器和键盘扫描管理器件,深入讨论如何在嵌入式操作系统ARM Linux中实现 ZLG7290 的驱动。 2 I2C总线    I2C总线是器件间串行传输总线,以其规范和带I2C接口的外围器件获得广泛应用。 S3C2410 处理器内置有I2C总线接口。I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和
[嵌入式]
YAFFS文件系统在嵌入式Linux系统中的构建与改进
在嵌入式Linux的开发工作中,常用的存储设备有NorFlash和NandFlash,其中价格低廉并适用于高密度和大容量存储的NandFlash运用更为广泛 。YAFFS(Yet Another Flash File System)文件系统是专门针对NandFlash的特殊构造设计的,是一种日志结构的文件系统,性能超越了原有的JFFS系列文件系统。但随着嵌入式技术的发展,在NandFlash介质上的嵌入式Linux中构造YAFFS时,YAFFS存在挂载时间过长和损耗均衡性不足两方面的缺点,需要进一步改进和优化。 1 YAFFS文件系统 在嵌入式所用的NandFlash中,基本的读写单位是页(page),YAFFS的存储位也是页(
[单片机]
YAFFS文件系统在嵌入式<font color='red'>Linux系统</font>中的构建与改进
2014网络摄像机发展:标准化成不二之选
IHS一直在研究视频监控设备市场超过10年。在此期间,市场增长迅速,大部分时间都是双位数增长长。而在2014年视频监控市场将有变化,IHS预测,全球市场将增长12%以上。在全球市场内,IHS确定了固定的半球和180/360度网路摄影机作为增长最快的产品细分项目,还有城市监控应用和能源部份的垂直市场。本文以视频监控网络摄像机为对象,简单分析其2014年行业发展趋势。       模拟到网络,高清监控是个完整的技术概念      对于监控系统而言,高清是一个完整的技术概念,包括从图片采集、转换、压缩、传输、存储、控制、显示等一个完整的图像处理流程。而对整个视频监控系统而言,前端图像采集设备即摄像机 镜头,是整个系统的核心,或可比喻
[安防电子]
“觅光者”低照度网络摄像机技术分析
  随着平安城市的发展和行业需求的纵深发展,国内安防领域受到了越来越多的关注,其相配套的安防监控设备也在以前所未有的速度发展,可以说在许多与我们的生活息息相关的行业里,安防设备已经成为其中至关重要的一环了。随着安防设备在各个行业的广泛应用,许多安防设备在各种环境应用的功能性还需要加强。比如在外部光照条件十分恶劣或者低照度环境下,如何才能保障视频监控的图像质量?而现有的网络摄像机,如果放置在低照度的环境下 ,是否依然可以提供优质的图像质量呢?   低照度环境催生行业新需求   随着人们对安防领域的重视,安防产品的性能也得到了大幅度的提升。但是在我们的生活中,还是有着各种形形色色的事故出现,这不得不让我们的目光注意到那些我们尚未征
[安防电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved