java视频监控系统中报警录像功能的实现Word文件下载.docx
《java视频监控系统中报警录像功能的实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《java视频监控系统中报警录像功能的实现Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。
(InstituteofOptoelectronicEngineering,JinanUniversity,Guangzhou510632,China)
Abstract:
Utilizingtheplatform-independenceofJavaandthecompletesupportenvironmentofnetwork,aremotevideosurveillancesystembasedonJavatechnologyisexploited,whichusedJavamediaframework(JMF)torealizethecaptureofvideoandaudioandacquiredimagesinsurveillantregioneveryfewseconds.AndJavaprogrampackagedisusedbyJavaBuilder,anextensionofMatlabcompiler,toperformMatlabfunctionofimagecomparisoninordertoalarmandrecordthevideoautomaticallyontimeassoonastheabnormalconditiontookplaceinsurveilliantregion.Thetesthasverifiedthepracticalityandreliabilityofalarmandrecordfunctionofthissystemthatitcanfulfilltherequirementofthemarketforthereal-timesurveillance.
Keywords:
videosurveillance;
JMF;
captureofvideoandaudio;
imagecomparison;
alarmandrecord
0引言
现互通,这是网络程序最重要的性能。
其次Java的安全性也是其广泛应用于网络编程的重要优点。
随着流媒体技术的发展以及第3代移动通信技术在中国的兴起,视频监控开始向着手机平台业务扩展。
鉴于目前手机网络程序的开发一般都是基于Java技术,因此基于Java的远程视频监控系统有望移植到手机业务中。
JMF(Javamediaframework)是一个把音频、视频和其它基于时间的媒体结合到Java程序和Applet中的应用程序接口。
它支持多媒体数据的回放和实时传输等媒体操作。
在数据回放上,JMF支持大多数媒体格式如MPEG,JPEG等。
在实时传输上,JMF支持实时传输协议RTP和实时传输控制协议RTCP。
它采用统一的结构和消息传递协议,包括JMFAPI和TRPAPI这两部分,前者主要用于捕获、处理、存储和播放多媒体,后者主要用于在网络上传输和接受媒体流。
利用Java平台的优势,JMF保持了“一次编写,随处运行”的特点。
为访问底层的媒体框架提供了一个通用的跨平台JavaAPI[4]。
作为一种在金融、交通、电力、公安等大型场所以及住宅社区越来越普及的安防手段,视频监控技术不断提升。
从最早的全模拟视频监控(CCTV)到20世纪90年代中期出现的数字视频监控,再随着宽带网络的普及,基于IP网的远程监控开始兴起[1]。
目前众多网络传输协议是基于C或C++开发,许多视频监控系统都是采用VC开发[2],而基于Java开发的远程监控系统并不多见。
本文开发的基于IP网的远程监控系统基于Java技术,是考虑到其平台无关性和完整的网络支持的技术优势以及监控技术的发展趋势,但这需要解决一系列技术关键问题。
其中,报警和录像功能对监控系统是至关重要的。
对于远程监控和无人职守监控,本系统自动判断报警和录像有助于现场出现异常情况后的迅速处理和事后分析[3]。
1Java与JMF
Java是面向对象的程序设计语言,特别适合于Internet应
用程序开发。
通过它实现的程序能在多种支持虚拟机(Javavirtualmachine,JVM)的操作系统上运行,多种操作系统间能实
2系统结构设计
本远程监控系统的硬件分为现场监控端、服务器、传输网
收稿日期:
2007-09-29E-mail:
mybow@
基金项目:
广东省科技计划重点引导基金项目(2004B10101011)。
作者简介:
赵莹(1984-),女,湖北宜昌人,硕士研究生,研究方向为光通信与光电信息系统;
陆颖瑜(1982-),女,广东佛山人,硕士研究生,研究方向为光通信与光电信息系统;
张永林,女,教授,博士生导师,研究方向为光电信息技术。
-4574-
络和客户端4部分。
监控端包括PC机、麦克风、摄像头以及配套的可调镜头和云台。
PC机用于控制采集设备,接受采集信息,编码压缩后传输到服务器,同时接受客户端的控制信息,调整云台和镜头。
麦克风和摄像头用于采集现场声音、图像信息,并传送给PC机进行编码后送给服务器。
云台和镜头用来控制摄像头的角度和焦点的远近。
服务器为一台连接到Internet网的高性能计算机,用于接受监控端发来的视音频信息、响应客户端请求,并将视音频信息实时传输给客户端。
传输网络为Internet,提供客户机与服务器之间的信息通路。
客户端为连接到Internet的普通计算机,通过网络与服务器进行通信,便于用户随时上网查看现场监控情况。
java.awt.Imageimage=bufferToImage.createImage(buffer-Frame);
bi1=(BufferedImage)image;
//定义图像的存放文件位置
file1=newFile("
绝对路径/相对路径"
);
//将图像存放到文件中try{
ImageIO.write(bi1,format,file1);
}
catch(IOExceptionioe){...}
之后,进行图像的相似度对比和阈值判断。
3.1.2Matlab图像处理
利用Matlab对图像处理的强大功能、特别是易于打包成
3功能实现
本系统设计应用于无人监管的远程网络监控,具有视频移
Java类的特点,本系统对采集到的图像作对比的程序在Matlab中编写。
由于采集的图像是彩色的,因此需要确定颜色空间。
本监控系统采用常见的RGB颜色空间来描述彩色图像。
自行在Matlab中编写的图像比较程序pic.m如下:
(1)读入两幅需要比较的图像:
Tu1=imread('
图像1存放的文件'
Tu2=imread('
图像2存放的文件'
(2)将每幅图像的RGB值分别赋给变量:
//第一幅图的红色值Tu1red=Te(:
:
1);
//第二幅图的红色值Tu2red=Tes(:
监控开始隔1秒
采集图像图像对比
re=0
动报警功能,即在所连接的任意一个摄像头的监控区中,若出现物体的移动变化即可启动警号、警灯等告警设备。
同时系统还具有报警联动录像功能,即当报警触发后,可启动关联录像。
摄像头的监控区中是否出现物体的移动变化是利用JMF每隔一定时间采集监控区域图像、然后与前一幅采集图像进行对比、用阈值法判断来确定的。
流程如图1所示。
由流程图可知,间隔一定时间获取图像和对比图像后用阈值法判断是启动报警的关键。
图像对比和阈值判断是通过Java调用Matlab程序来实现的,而要调用Matlab程序需要先将其打包成Java类。
(3)比较每幅图像RGB值的相似度:
//比较红色相似度a=corr2(Tu1red,Tu2red);
(4)通过实验设定相似度阈值,如0.98。
若RGB中相似度值小于该阈值则返回值1,否则返回值0:
//若两幅图像红色相似度小于0.98则返回值1:
Ifa<
0.98re=1;
//若不符合上述情况则返回值0elsere=0;
…
阈值判断
re=1启动报警
录像功能
图1启动报警录像流程
3.1报警功能的实现
由流程图可知,报警功能的实现要经过图像采集、Matlab
3.1.3Matlab程序打包
Matlab2006b及其以上的版本提供了将Matlab程序包装
图像处理、调用Matlab打包程序等过程来启动报警。
到一个或多个Java类中形成一个Java包、然后被Java应用程序调用的Java生成器-JavaBuilder。
这样在Java应用程序中可以方便地调用Matlab程序。
打包成Java类的过程是利用JavaBuilder提供的图形用户接口(GUI)工具―Deploymenttool实现转化的,过程如图2所示[5]所示。
(1)在Matlab命令提示符下输入deploytool启动该工具,创建新项目。
默认的项目名称为将要创建的Java包名,可以更改默认值。
(2)为Java包中将要创建的类添加类名,并为每个类添加要封装到该类中的Matlab程序。
根据需要可为类添加辅助文
3.1.1图像采集
JMF主要利用java.awt.Image类生成静态图像,每隔1秒
采集图像的过程如下:
//把视频流放在缓冲区
BufferbufferFrame=controlGrabber.grabFrame();
//访问缓冲区的视频流
BufferToImagebufferToImage=newBufferToImage((Video-Format)bufferFrame.getFormat());
//根据缓冲区的视频流产生一幅图像
-4575-
创建项目添加文件
格式:
if(strValue.equals(STR_QUICKTIME))
{strContentType=FileTypeDescriptor.QUICKTIME;
strContentTypeExt="
mov"
;
……}
(2)创建处理器Processor对象并获取Porcessor的输出:
privateProcessorprocessor=null;
dataSource=processor.getDataOutput();
打包编译
图2Matlab程序打包成Java类
件。
保存项目。
(3)操作工具条中的生成按钮
执行编译。
编译过程中
在项目文件夹下会产生两个新文件夹src和distrib,src文件夹包含生成的Java源码和生成的副本日志,distrib文件夹包含JavaBuilder生成的可发布的文件.jar和.ctf。
(4)JavaBuilder将项目保存到一个.prj文件中。
(3)建立一个记录保存文件的MediaLocator并实例化:
//strFileContentType和strFileName为流媒体文件类型和名称mediaDest=newMediaLocator(strFileContentType+strFile-Name);
(4)创建输出数据缓冲池DataSink并保存流媒体文件到MediaLocator创建的实例化变量中:
//保存流媒体文件到MediaLocator创建的实例化变量mediaDest中
dataSink=Manager.createDataSink(dataSource,mediaDest);
(5)保存数据文件,启动处理器:
try{
dataSink.open();
dataSink.start();
processor.start();
(6)录像结束后停止处理器。
系统设定录像的视音频文件存放在指定名称的文件夹中,设置文件夹名称格式为Data+年+-+月+-+日。
系统设定录像的视音频文件名称为Record+年+月+日+时+分+秒。
3.1.4Java调用Matlab程序启动报警
调用Matlab程序前需要在采集图像触发报警录像功能的
Java应用程序中导入用到的Matlab提供的Javabuilder目录以及自行编译的项目包:
importcom.mathworks.toolbox.javabuilder.*;
//myvideo为自行创建由JavaBuilder编译的Java包importmyvideo.*;
调用过程先将创建的Java包中的类实例化,然后调用mat-lab程序,并返回判断值。
对返回值进行整型变换后附给变量re:
//myvideoclass为myvideo.jar中的类,创建myvideoclass对象newvideo=newmyvideoclass();
//返回值存在result中,pic.m为matlab中自行编辑的用于图像比较功能的程序
Result=newvideo.pic
(1);
Stringres=result[0].toString();
//返回值转化为整型数re=newInteger(res).intValue();
当re=1时启动报警。
报警过程调用AudioSystem中的类完成,AudioSystem类充当取样音频系统资源的入口点。
此类允许查询安装在系统上的混频器。
混频器将自行设置的报警声音文件数据传给输出端口,如声卡上的音频输出设备,然后发出声音。
报警开始后还可以控制警灯的颜色变化以显示监控区域发生异常情况,即当报警开始时控制键由绿色变为红色,结束后红色变回绿色。
当监控区域中的移动物体消失后报警停止。
4系统测试
本系统经过反复运行测试,功能实用可靠。
(1)当客户进行远程监控时,先通过浏览器向Web服务器
发出请求,Web服务器将Java字节码文件随同HTML文件发送至客户端。
客户端浏览器调用Java虚拟机(JVM)对字节码进行解释执行,生成客户操作界面。
服务器端的Java应用程序会根据客户的操作进行密码验证等获得客户的信息,包括IP地址和接收媒体的端口号,建立与客户端Applet的连接,把前端送来的视音频媒体信息通过RTP发送给客户端[7],客户端将媒体流解压缩后送到播放器播放。
这样,用户可以在获得服务器验证通过后的任何一台联网PC机上进行监控区域的查看,还可以多个合法用户同时查看,图像、声音清晰。
(2)当用户在报警发生时查看监控系统,除可看到监控图像外,还可听见警号声响、看见警灯闪亮。
(3)用户可方便地查看录像资料。
当用户是在报警结束后查看系统,则可从录像的视音频文件得到异常情况发生时监控区域的状况。
图3、图4是用户在指定硬盘下Data07-5-15这个文件夹中看到的录像资料,文件名为Record07515114741.mov,显示该段视音频拍摄于2007年5月15日11点47分41秒。
3.2录像功能的实现
本系统具有报警联动录像功能。
不同于其它监控系统的
长期录像需要保存大量视频流到指定文件中[6],系统设计在监控区域出现异常情况后与报警功能启动的同时启动录像功能,录像时间持续到异常情况消失的10秒之后。
这样在保证能及时记录监控区域异常情况的同时也节省了硬盘存储空间。
系统启动录像后先初始化,然后调用doSave方法进行录像。
录像方法doSave设定从摄像头捕获的视频和从麦克风捕获的音频数据保存为QuickTime格式的文件。
方法首先需要设定数据轨道和输出内容格式,然后构建一个处理器,再使用这个处理器自动连接到符合文件格式要求的捕获设备:
(1)捕获设备的视音频流,设定输出文件类型为QuickTime
5结束语
本课题组基于Java技术开发远程监控系统,实现了利用
-4576-
程与设计,2004,25(6):
971-974.[3][4][5]
图3
监控区正常
图4
监控区异常
王建文,陆璐.视频监控的异常报警机制[J].计算机与数字工程,2007(5):
121-123.
冷波,唐建雄.基于JMF的多媒体远程监控系统的设计和实现[J].武汉理工大学学报,2006(8):
51-53.
MathWorks公司.MATLABBuilderforJavaTM1user'
sguide[OL].
杨泽,叶昆山,胡跃峰.图像实时数字监控系统[J].工程技术,2007(10):
35-36.
周贵芳,方贵明.基于JMF的跨平台视频点播系统的设计与实现[J].计算机应用研究,2007,24(4):
235-238.
陆颖瑜,张永林.利用Java实现对云台和镜头的远程控制[J].工程设计学报,2007(4)
:
324-328.
Java对云台和镜头的远程控制[8],实现了自动判断报警录像。
为基于IP网的远程视频监控提供了可行方案。
参考文献:
[1][2]
刘富强.数字视频监控系统开发及应用[M].北京:
机械工业出版社,2003.
吴暾华.网络视频监控系统中数据的传输的实现[J].计算机工
(上接第4443页)
5
LLC层(节点1)
物理层(节点1)
LLC层
(节点2
)
通信协议的性能分析
实时网络的最大吞吐量达到43Mbyte/s,满足DSTP数据
写共享内存
通信量的要求。
实时网络还提供了安装中断的功能,并且读延迟数百个纳秒,单节点最大写延迟
4.5
s。
中断操作功能和极小的读写延时保证了DSTP
中数据传输的实时性要求和数据的低丢失率要求。
实时网络协议中设计的优先级机制则保证了高重要度的任务有最短的响应时间,保证了重要消息的及时传输。
协议中采用的周期性数据传输和非周期性数据传输实现了DSTP中各种类型的数据的顺利发送和接收,提高了数据传输的效率。
图4不需要确认的数据发送过程
过程。
源节点把请求命令放在L_sdu中,构建一个RDR帧,经过实时网络发送给目的节点。
接收到源节点的RDR帧后,目的节点LLC层把该服务存取点中已准备好的数据构成一个数据请求响应帧(RDRR),发送给源节点。
同时指示目的节点准备的数据已被取走。
源节点接收到从目的节点传来的数据后,向应用层证实已经接收到请求的数据。
同时,目的节点用L_sdu的数据去更新服务存取点DSAP的缓存区数据。
完成数据更新后,向目的节点应用层证实数据已经被更新,等待下一次传输。
如图5所示。
这种数据服务用于节点间模型的数据通讯,实时节点周期向测试主机返回需要显示和收集的数据等。
6结束语
采用本文介绍的实时网络通信协议的分布式仿真测试平
台具有通信实时性好,数据传输速度快,传输可靠性高的特点。
该通信协议已经在分布式仿真测试平台中实现。
经验证,满足测试平台的数据传输要求。
[1][2][3][4]
阮镰,刘斌,陈雪松.软件可靠性测试及其测试环境[J].测控技术,2000,19
(2):
9-16.
庞丽萍,田亚敏,李胜利,等.硬实时系统的通信协议[J].小型微型计算机系统,2000,21(4):
343-346.
张华忠,刘学.基于TCP/IP的多媒体实时通信协议的研究[J].计算机工程,2001,27(6):
54-56.
李胜利,骆雁,许青林,等.一种有保证实时通信协议的设计[J].华中理工大学学报,1999,27(4):
15-17.[5][6][7][8]
毕会娟,王行仁.一个DIS实时通信网络的设计与实现[J].北京航空航天大学学报,1999,25(3):
256-259.
王志平,熊光泽.一种基于以太网卡的实时网络的实现方法[J].计算机应用,1999,19(3):
34-36.
毛羽刚,张拥军,金士尧.分布实时系统中的点到点通信[J].小型微型计算机系统,2000,21
(2):
190-193.
SridharT.嵌入式通信软件设计[M].彭甫阳,译.北京:
北京航空航天大学出版社,2004.
(节点1)物理层(节点1)LLC层(节点2)
发送数据协议单元
图5需要回答的数据请求过程
-4577-