基于RaspberryPi的运动目标检测研究与实现*

2019-09-27 01:36胡瑞卿田杰荣
舰船电子工程 2019年9期
关键词:PC机嵌入式摄像头

胡瑞卿 刘 勇 田杰荣

(1.海军航空大学航空基础学院 烟台 264001)(2.海军航空大学航空作战勤务学院 烟台 264001)

1 引言

当前运动目标检测系统的研究已经相对成熟,但大多数是在PC机上采用C语言实现的方式,该方式无法满足当今的实时性和可移动性需求。本研究设计了基于RaspberryPi的运动目标检测系统,极大地满足了对运动目标的移动性检测要求。本文搭建了运动目标检测系统的硬件平台,设计并实现了基于RaspberryPi的运动目标检测系统。系统通过USB网络摄像头图像采集套件获取实时视频图像序列,摄像头采集到的视频源通过USB接口进入RaspberryPi开发板,经过处理之后,将数据通过以太网接口传输到PC机,在PC机上将视频的实时处理结果显示出来。

2 RaspberryPi硬件平台

与通用型计算机系统相比,嵌入式系统功耗低、可靠性高;功能强大、性价比高;实时性强,支持多任务;占用空间小,效率高;面向特定应用,可根据需要灵活定制。RaspberryPi开发板如图1所示,它是一款基于Debian Linux系统的微型电脑主板,外形只有信用卡大小,所以又称卡片式电脑。近年来,随着RaspberryPi的不断普及,由于其价格实惠,且提供了多种扩展接口,性能功能强大,体型小巧易携带,集成化程度高等,越来越受到人们的欢迎和关注,在多个方面和领域都得到了青睐。RaspberryPi具有较强的计算能力和扩展能力,是性能较强的嵌入式设备。

图1 RaspberryPi 2开发板实物图

RaspberryPi 2是一款基于ARM的“卡片机”电脑主板,它没有硬盘,用标准的外插MicroSD卡作为存储空间,主板周围USB口可以作为输入接口外接键盘和鼠标,网线口可以插入网线,自带默认网卡驱动程序驱动硬件联网。同时还有HDMI高清视频接口,用于连接显示设备输出视频图像。本设计中图像采集与处理部分由嵌入式设备完成,检测结果由PC机显示。

3 RaspberryPi的使用

在Linux系统上插入RaspberryPi的SD卡,会识别出两个分区,分别是boot分区和根文件系统分区。其中文件 bootcode.bin、start.elf、fixup.dat、config.txt构成了RaspberryPi的bootloader,kernel.img是RaspberryPi的Linux内核。另外一个分区的所有内容是RaspberryPi的根文件系统。

Raspberry Pi的官网提供了三个版本的镜像文件,还有无数第三方的镜像,首先,下载最新版本的Raspbian系统软件包和Win32DiskImager工具,其中Win32DiskImager用于在Windows下将Raspbian镜像写入到SD卡中,写入完成后,就可以把SD卡插到RaspberryPi的SD卡卡槽中,当系统通电后,首先执行SOC的bootrom,初始化SD卡控制器,系统访问boot分区,查找bootcode.bin,将其加载到SOC的L2 cache执行。接着bootcode.bin初始化内存控制器,读取fixup.dat给GPU与ARM划分内存分区。GPU驱动config.txt进行自我配置,然后将start.elf加载到内存中,这是GPU的firmware文件,初始化GPU。start.elf的另一个作用是初始化内核启动参数,将kernel.img加载到内存中执行,并跳转到加载地址运行内核代码。在此期间,它会通过读取cmdline.txt来传递给内核参数,加载结束后,复位ARM核,执行内核代码,启动系统。

首次启动时,会出现系统的初始配置界面,如果设置错误需要重新配置时,也可以通过输入sudo raspi-config命令来激活此界面。

首先选择expand_rootfs,其作用是扩展系统的根目录文件,按下回车键,弹出界面显示成功扩展根文件系统,此时按下回车键,则返回主界面。然后选择overscan按回车键对其进行配置,如果想使屏幕显示图像完全占用显示器,需选择禁用overscan让系统充分利用计算机屏幕。在主界面中选择configure_keyboard,按下回车键来选择键盘,选择Generic 105-key(Intl)PC选项。键盘类型选定后,需要选择键盘布局。设置完成后,重启RaspberryPi,在登陆界面输入密码后启动图形界面,在命令行输入startx。启动结束。

4 系统实现

4.1 开发环境的搭建

本研究采用C++语言进行编程。通过OPENCV实现图像处理,完成RabesprryPi对网络摄像头的控制和处理数据的传输,程序运行在Raspbian的Linux操作系统环境下,考虑在该系统中无法使用Windows系统环境下常用的VS,VC++等常用集成开发环境,故采用在嵌入式设备的Linux系统中安装QT平台作为开发环境,QT是一个跨平台的IDE,可以在Linux环境下运行,并且便于实现程序移植。

4.2 运行环境搭建

由于本设计中许多通用算法需要用到opencv,因而需要在RabesprryPi中进行opencv的移植和配置,首先要生成Linux系统下可用的opencv库,虽然RabesprryPi2的主频达到了900MHz,但和PC机相比,其性能还是略逊一筹,使用交叉编译可大大节约系统开发时间,在很大程度上提高编码的效率。所谓的搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上,主要步骤如下:

1)在PC主机下的Linux系统中安装交叉编译器arm-linux-gcc,arm-linux-gcc是用来实现在Linux下跨平台的C语言编译器,编译出来的程序在目标机上执行,嵌入式开发应使用嵌入式交叉编译工具链。

2)交叉编译OpenCV。建立编译链接目录,安装 cmake-gui,用 到 命 令“#sudo apt-get install cmake-qt-gui”,在 usr/local新建文件夹,把下载的OpenCV-2.0.0.tar.bz2解压到usr/local/opencv目录下,然后在 usr/local/opencv新建一个opencv-arm文件夹,作为CMake编译arm版本的工作目录。

3)调出CMake gui界面,进行源码目录build目录等选择,进行对应配置完成后生成makefile,在/usr/local/opencv/opencv-arm目录下执行命令“$sudo make”,结果如图2所示。

图2 Opencv库文件编译结果

然后运行make install,将opencv生成的库和头文件(在/usr/local/opencv/opencv-arm/lib下)安装到目录/usr/local/arm/4.3.2/lib/opencv/,结果如图3所示。

图3 opencv库文件生成结果

4)把生成的.so库文件拷贝到ARM板系统中的/lib目录下面,然后修改项目管理文件,之后便可以在开发板的Linux环境下执行所编写的验证程序以验证移植是否成功了。

4.3 执行程序的移植

本次设计中利用C++语言编写的程序是在VS平台下编写并验证的,这里需要进行移植以在ARM平台上运行,其具体步骤如下。

在Microsoft Visual中对系统程序进行编译通过之后,将其命名为main.cpp并保存。然后使用FlashFXP工具连接RabesprryPi,连接类型设置为“SFTP over SSH”,输入用户名和密码。

打开路径/home/pi/cpp/ObjectDetect_sq,将本地的main.cpp上传到RabesprryPi中。

拷贝完成之后在Linux系统下建立QT工程,该工程中包含后缀为“.pro”的文件,此文件是Qt软件开发工具创建的项目文件,支持跨平台,不过在运行之前,要使用QT命令将所有的信息进行编译,该格式文件包含文件有临时工程文件,源代码文件,项目库文件,还有一些其他的文件格式。

在RabesprryPi主界面中输入指令“cd/home/pi/cpp/ObjectDetect_sq/”,打开源码文件夹,利用Qmake生成makefile文件,界面显示如图4所示。

图4 源码文件示意图

QMake是Qt工具包中带的一个非常方便的工具。可以用于生成Makefile以及各种工程文件,还可以生成Microsoft Visual Studio可以使用的项目文件等。而且它是跨平台的。输入指令“make clean”“make all”进行编译,编译成功后输入指令“cp/home/pi/cpp/ObjectDetect_sq/ObjectDetect/home/pi/cpp/runfun/”将生成的运行程序移动到执行目录,之后输入指令“ls/home/pi/cpp/runfun/”检查是否移动成功,主程序生成如图5所示。在PC机上运行ObjectDetectServer,等待接收RabesprryPi传输的运动目标数据信息。在RabesprryPi上执行命令“/home/pi/cpp/runfun/ObjectDetect”,实现对运动目标的实时检测。

图5 主程序生成示意图

5 运动目标检测软件实现

5.1 程序运行流程

首先,用opencv从连接RabesprryPi的摄像头读取运动目标的数据,通过计算帧间的光流数据来标注运动目标,并计算运动目标的数目;然后,在原有的数据上添加对运动目标数量的标注,并对运动目标进行加框;接着,利用Linux的Socket库函数通过网络将处理数据发送到PC机上,PC对数据的接收是利用Windows的Socket库函数;最后,用opencv库函数在PC机上将运动目标的检测结果显示出来。系统总体框图如图6所示。

图6 系统总体框图

对于客户端,即ARM开发平台而言,其主要工作包括利用摄像头进行运动目标图像采集,将采集到的图像逐帧进行检测、计算并标注,最后将标注结果发送至服务器端显示出来,其软件流程图如图7所示。

对于服务器端,即PC端,其主要工作包括与ARM平台建立TCP/IP连接并监听端口,接收来自客户端的数据,最后以图像形式显示出来,其软件流程图如图8所示。

图7 客户端软件流程图

图8 服务器端软件流程图

5.2 程序执行效果

系统对运动目标的检测效果显示如图9所示,当场景中有运动目标出现时,系统能够准确检测到,并且将运动目标框住,计算出运动目标的个数。可以看到系统能够较好地完成对图9地铁站中运动目标的检测。

图9 检测效果图

图10 停车场测试视频运动目标检测结果

为了验证本系统的稳定性,分别测试了多段视频,其中停车场测试视频检测结果如图10所示,公路测试视频检测结果如图11所示,USB摄像头拍摄的运动目标检测结果如图12所示。在图12(b)的检测结果中,由于两个运动目标距离太近,而且移动速度相同,系统在未判定运动目标大小的情况下,为防止同一个目标被识别多次,轮廓检测选择大框对目标进行框选,故而将其判定成了同一个目标,这个问题需要继续解决完善。

图11 公路测试视频运动目标检测结果

图12 USB摄像头拍摄视频的运动目标检测结果

通过对5段视频进行运动目标检测测试。检测结果表明,本系统具有较高的检测准确率,实现了预期的运动目标检测功能。视频检测的统计检测结果,如表1所示。通过对视频检测结果的统计,可以得到本算法的检测率为97.2%、误检率为1.43%和漏检率为1.37%。

表1 运动目标检测结果

6 结语

本文研究并实现的基于RaspberryPi的运动目标检测系统,系统是在RaspberryPi 2硬件平台上实现的,较传统的采用PC机实现的系统更加灵活方便,具有较大的优势。系统使用RaspberryPi 2 Model B型开发板作为系统的中心控制板,实现了对运动目标的自动检测,测试结果表明系统的硬件实现效果较好。不足之处在于系统主要针对的是静止摄像头的情况,而当摄像机处于运动状态下时,是较难准确检测的。在以后的工作中,需要通过不断研究,增加系统的应用范围。希望未来随着数学理论知识的不断丰富和计算机技术的不断发展,能够不断完善和改进,更加实用于人们的生产和生活。

猜你喜欢
PC机嵌入式摄像头
浙江首试公路非现场执法新型摄像头
摄像头连接器可提供360°视角图像
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
TS系列红外传感器在嵌入式控制系统中的应用
嵌入式PLC的设计与研究
嵌入式单片机在电机控制系统中的应用探讨
基于WiFi技术的智能手机双控视频小车
用VC++实现PC机与单片机的串行通信
单片机与PC机串行数据通信的工程实践
基于单片机与PC机的电气量采集系统设计