目前,嵌入式系統在視頻監控中的應用越來越廣泛。伴隨著網絡的強大功能,視頻監控更側重網絡監控方案,要求體積小、遠程化、成本低、功耗小、操作界面人性化等。本系統基于嵌入式Linux 平臺上利用USB 攝像頭采集視頻圖像,通過視頻圖像壓縮及結合網絡進行視頻圖像傳輸,使遠程監控成為可能。
1 系統概述
視頻圖像監控系統由4 部分組成, 分別為視頻圖像采集、視頻圖像處理、視頻圖像傳輸、視頻圖像顯示。視頻圖像采集部分由數字攝像頭、USB 通道和嵌入式處理器構成、視頻圖像處理主要是視頻圖像壓縮,由算法實現、視頻圖像傳輸主要利用視頻服務器來實現、視頻圖像顯示主要是在遠程的主機上實現視頻圖像的瀏覽、保存和處理等,Linux 主機上由應用程序實現,Windows 主機上通過瀏覽器上的JAVA 程序實現。系統原理框圖如圖1 所示。
2 系統硬件
CPU 處理器使用Samsung S3C2440A, 主頻400 MHz,最高533 MHz;64 M SDRAM、32 bit 數據總線、SDRAM 時鐘頻率100 MHz;256 M/1 GB Nand Flash, 掉電非易失、2 M NorFlash,掉電非易失;統寶3.5 真彩LCD,屏集成4 線電阻式觸摸屏, 屏幕分辨率可以達到1024×768 象素;100 M 以太網RJ-45 接口(采用DM9000 網絡芯片)、串行口、USB Host、USB Slave B 型接口、SD 卡存儲接口、路立體聲音頻輸出接口, 麥克風接口、JTAG 接口、4 USER Leds、6 USER buttONs(帶引出座)、I2C 總線AT24C08 芯片、20 pin 攝像頭接口;攝像頭用良田,兼容SN9C20X 系列芯片的驅動,本系統的內核中集成了該驅動。
3 系統軟件
3.1 Linux 內核的移植
移植新內核主要是為了給LCD 以及攝像頭添加相應的驅動支持,在Fedora 9 中打開內核的目錄,使用缺省配置文件進行配置:在內核中添加V4L 支持、添加萬能USB 攝像頭驅動GSPCA。
3.2 基于V4L2 的圖像采集程序
系統使用的交叉編譯工具為arm-linux-gcc-4.3.2.設計使用到的應用程序都要通過該編譯器編譯后下載到開發板上運行。將編好的應用程序V4L2.c 交叉編譯后下載到板。
V4L(Video for Linux)是Linux 下提供的一個音視頻接口規范,所有的音視頻驅動編寫都要用到這些接口。
V4L 從2.4.1.x 的內核版本中開始出現, 設計使用的Video for Linux2(簡稱V4L2)是V4L 的改進版,修復了第一代中的部分BUG。
設計的圖像采集及處理程序主要基于V4L2 架構, 通過對一些ioctl 函數的調用來實現視頻設備的打開,圖像的采集處理,圖像的顯示等。幾個主要的ioctl 函數的簡介:
1)ioctl(fd,VIDIOC_S_FMT, &fmt):用于設置圖像的格式。
2)ioctl(fd, VIDIOC_REQBUFS, &req):向內存申請緩沖區,申請的buffer 個數存在count 中。
3)ioctl(fd, VIDIOC_QUERYBUF, &buf):查詢已經分配的V4L2 的視頻緩沖區的相關信息, 包括視頻緩沖區的使用狀態、在內核空間的偏移地址、緩沖區長度等。
4)ioctl(fd, VIDIOC_QBUF, &buf):放一個空的視頻緩沖區到視頻緩沖區輸入隊列中,函數執行成功后,指令的視頻緩沖區進入視頻輸入隊列,在啟動視頻設備拍攝圖像時,相應的視頻數據被保存到視頻輸入隊列相應的視頻緩沖區中。
5)ioctl(fd, VIDIOC_STREAMON, &type):啟動視頻采集命令,應用程序調用VIDIOC_STREAMON 啟動視頻采集命令后,視頻設備驅動程序開始采集視頻數據,并把采集到的視頻數據保存到視頻驅動的視頻緩沖區中。
圖像采集處理流程圖如圖2 所示。
3.3 網絡服務器
系統采用Boa 服務器。Boa 是一種非常小巧的Web 服務器, 其可執行代碼只有大約60 kB 左右。作為一種單任務Web 服務器,Boa 只能依次完成用戶的請求,Boa 支持CGI,能夠為CGI 程序fork 出一個進程來執行。板上移植該服務器,Boa 服務器默認開機自動運行,配置conf 文件。
服務器端應用程序使用servfox, servfox-R1_1_3 解壓修改Makefile 文件:CC=arm-linux-gcc,編譯后得到可執行文件servfox,下載到板上,輸入命令chmod +x servfox 為它添加可執行屬性。
客戶端程序使用spcawiew, 該程序用于在Linux 主機上對服務器進行監控,無需移植。在Linux 上編譯spcaview.由于此軟件包依賴與libsdl,所以在安裝spcaview 之前,需要安裝SDL-1.2.13. 安裝spcaview 軟件后,在源文件目錄上有3 個可執行文件,spcacat :簡單圖片的抓取工具,不能用于網絡監視客戶端,Spcaserv:流媒體服務器,Spcaview: 用來紀錄數據流,也能用來播放數據,也能作為網絡監視客戶端用。
4 監控過程
4.1 在Linux 操作系統上的監控
正常啟動運行開發板,運行服務器端程序servfox: servfox-d /dev/video0-s 320x240-w 7070。
在Linux 上運行: 。/spcaview-g-s 320x240-w 10.1.91.230:7070
其中10.1.91.230 是服務器的IP 地址,這樣就可以在PC機上看見USB 攝像頭采集進來的數據了。
系統是裝在虛擬機中的fedora 9 linux 系統,可以流暢地觀察到攝像頭監控區域的情況。
4.2 Windows 操作系統上的監控
對于網絡監控的客戶端,能夠跨平臺的工具目前只有瀏覽器,通過瀏覽器來監控,無論是Linux、Windows、MacOS 或者其他的UNIX 系統,只要有圖形界面的瀏覽器,在桌面環境下都可以對遠程的攝像頭所“控制”的范圍進行監控。
Mini2440 上已經有Boa 服務器可供使用,Spcaview 中的http-java-applet 文件夾中已經包含了一個可以監控使用的web 頁面,將該文件夾復制到Boa 服務器的主文件夾/www 下。
由于http-java-applet 文件夾內含的WEB 主頁面(Index.html)包含了JAVA 控件,所以先在主機上安裝JAVA 環境,讓瀏覽器支持JAVA 插件。
安裝好JRE 后, 在瀏覽器的地址欄上輸入服務器地址,即可實現遠程監控。
4.3 遠程抓拍
通過web 表單提交CGI 來運行應用程序。
通用網關接口(CGI)規范允許Web 服務器執行其他的程序并將它們的輸出儲存在發送給Web 瀏覽器的文本、圖形和音頻中。服務器與CGI 程序的結合能夠擴充World WideWeb 的能力。
CGI 程序可以由C、Perl 或者UNIX Shell 腳本等流行編程語言編寫。
在本設計中,網頁上的按鈕shoot the picture 提交了一個名為V4L 的CGI 文件v4l.cgi,該文件是用shell 腳本編寫的,用于在板上運行已編譯好的圖像采集程序并對抓拍的圖片返回到新打開的網頁中進行查看。
Shell 腳本(v4l.cgi)內容如下:
#! /bin/sh
/www/http-java-applet/v4l2
echo “Content-type: text/html; charset=gb2312”
echo
echo “……”
echo “
”《 》《 src=“”1.jpg“”》
exit 0
5 結束語
系統采用開源的Linux 系統,降低了開發成本,可以任意裁剪和制定內核,方便移植。與傳統PC 機的監控系統相比,本系統具有體積小、成本低、可靠性強等優勢。本系統還具有一定的擴展性,可以增加適當的功能擴展來滿足用戶更高的要求, 如在圖像采集端加入設置入侵檢測或者報警等控制功能。
評論
查看更多