程望斌 劉馨文 梁娟 劉碩卿 張靖 廖冰潔 歐先鋒
摘要:對(duì)汽車行駛記錄儀總體設(shè)計(jì)方案進(jìn)行分析和論證,設(shè)計(jì)了以S3C6410為核心器件的視頻采集和圖像處理系統(tǒng)。重點(diǎn)介紹圖像采集處理系統(tǒng)的功能模塊和實(shí)現(xiàn)過(guò)程,分析系統(tǒng)軟件的實(shí)現(xiàn)方法和過(guò)程,并對(duì)系統(tǒng)功能進(jìn)行驗(yàn)證。結(jié)果表明:該設(shè)計(jì)可實(shí)現(xiàn)視頻實(shí)時(shí)采集、記錄與顯示功能,具有功能多、清晰度高、效果好等優(yōu)勢(shì)。
關(guān)鍵詞:S3C6410;Tiny6410;行駛記錄儀;視頻采集
中圖分類號(hào):TP216.2文獻(xiàn)標(biāo)志碼:A
文章編號(hào):2095-5383(2019)04-0026-05
Design and Implementation of Multi-function Vehicle Traveling Recorder
CHENG Wangbin1, LIU Xinwen2, LIANG Juan1, LIU Shuoqing1,ZHANG Jing1, LIAO Bingjie1,OU Xianfeng1
(1.College of Information Science and Engineering, Hunan Institute of Science and Technology,? Yueyang 414006,China;
2. College of Information Engineering,
Xiangtan University,Xiangtan 411105,China)
Abstract:The vehicle traveling recorder records video information in the course of vehicle driving through camera, which is great significance to clarify the responsibility of traffic accidents, standardize driving behavior and reduce traffic violations.In this paper, the overall design scheme of the vehicle traveling recorder was analyzed and demonstrated, and video acquisition and image processing system based on S3C6410 was designed. The function module and implementation process of image acquisition and processing system were mainly introduced. The implementation method and process of system software were analyzed. And the system function was verified. The results show that the designed vehicle traveling recorder can achieve the real-time video acquisition, recording and display functions, and has the advantages of multiple functions, high definition and good effect.
Keywords:S3C6410; Tiny6410; driving recorder; video capture
隨著車輛的增多,交通事故時(shí)有發(fā)生。造成交通事故的主要原因是司機(jī)的交通意識(shí)薄弱,交通管理制度和方式不夠嚴(yán)格完善,司機(jī)的行為不正當(dāng)?shù)?。為了明確交通事故責(zé)任、規(guī)范駕駛?cè)笋{駛行為和減少交通違章,人們?cè)O(shè)計(jì)了汽車行駛記錄儀。然而目前市場(chǎng)上的記錄儀普遍存在許多不足,不能滿足人們的需求[1]。
本文對(duì)汽車行駛記錄儀進(jìn)行優(yōu)化設(shè)計(jì)的基本思路:使用S3C6410為核心的Tiny6410開(kāi)發(fā)板,選用USB攝像頭進(jìn)行視頻采集,通過(guò)LCD顯示屏進(jìn)行視頻顯示,并將讀取到的視頻轉(zhuǎn)化為AVI文件存儲(chǔ)在SD卡中[2],再配合軟件的編譯與燒寫(xiě),使汽車行駛記錄儀具有攝像頭模塊數(shù)據(jù)讀出、同步視頻顯示和同步存儲(chǔ)到SD卡的功能,進(jìn)而實(shí)現(xiàn)了實(shí)時(shí)監(jiān)控[3]。
1 系統(tǒng)總體設(shè)計(jì)
以S3C6410為核心器件的信號(hào)采集和圖像處理系統(tǒng),主要包含核心控制器、電源模塊、晶振模塊、復(fù)位模塊、攝像頭模塊、顯示模塊、存儲(chǔ)模塊等模塊,系統(tǒng)總體設(shè)計(jì)方案如圖1所示。
首先從USB攝像頭中獲取視頻數(shù)據(jù),從攝像頭獲取到圖像格式轉(zhuǎn)換成RGB格式送到LCD顯示。再通過(guò)應(yīng)用程序調(diào)用S3C6410的視頻后,處理模塊完成格式轉(zhuǎn)換。當(dāng)使用的是YUV攝像頭時(shí),需要經(jīng)過(guò)壓縮成MJPEG,通過(guò)應(yīng)用程序調(diào)用S3C6410的多媒體模塊完成視頻壓縮。最后視頻壓縮記錄到AVI文件并儲(chǔ)存到SD卡。
2 系統(tǒng)硬件設(shè)計(jì)
本設(shè)計(jì)采用S3C6410嵌入式微控制器為核心的Tiny6410開(kāi)發(fā)板,由S3C6410本身系統(tǒng)基于ARM Tiny6410開(kāi)發(fā)板開(kāi)發(fā),RESET電路、電源電路、CLK電路、內(nèi)存電路、閃存電路組成[4]。本設(shè)計(jì)重點(diǎn)使用了MFC模塊進(jìn)行設(shè)計(jì),將USB采集到的YUV格式攝像頭數(shù)據(jù)編碼成MJPEG數(shù)據(jù)流并轉(zhuǎn)化成RGB送去屏幕顯示。Tiny6410開(kāi)發(fā)板,搭載了一個(gè)以太網(wǎng)接口,一路在線USB接口,四路USB主控制接口,一個(gè)LCD接口和一個(gè)SD卡存儲(chǔ)接口。開(kāi)發(fā)過(guò)程中能夠直接使用網(wǎng)絡(luò)接口開(kāi)發(fā)程序上傳到嵌入式單板中。
Tiny6410的核心板上USB接口和平常電腦上使用的是相同的,可以連接攝像頭、鍵盤(pán)、鼠標(biāo)、U盤(pán)等外部設(shè)備,因此在該設(shè)計(jì)中選用USB攝像頭連接用來(lái)完成行車記錄儀的攝像功能,USB Host的原理圖如圖2所示。
在Tiny6410板子上有3個(gè)LCD,分別為L(zhǎng)CD1、LCD2以及LCD3。液晶顯示器的1和2接口是0.5 mm間距的
40 Pin貼片座,3接口是2 mm間距的40 Pin插針座。本設(shè)計(jì)中選用4.3 in(10.922 cm)的液晶顯示器,通過(guò)LCD1接口連接。核心板上帶有兩路安全數(shù)字輸入輸出接口,能夠兼容一般的SD卡,為彈出式卡槽,它對(duì)應(yīng)的是CON6接口,且應(yīng)用廣泛,最大能支持32 GB的SD卡。使同步顯示視頻數(shù)據(jù)的同時(shí),還能將視頻數(shù)據(jù)保存在SD卡當(dāng)中,并能夠插在電腦上進(jìn)行視頻的播放。SD卡槽在開(kāi)發(fā)板上的分布圖如圖3所示。并且核心板引出3個(gè)串口:COM0、COM1、COM2,可以使用串口轉(zhuǎn)換線與PC機(jī)實(shí)現(xiàn)數(shù)據(jù)交換。
3 系統(tǒng)軟件設(shè)計(jì)
軟件設(shè)計(jì)系統(tǒng)基于Linux系統(tǒng)完成Linux環(huán)境搭建、獲取攝像頭圖片程序設(shè)計(jì)、luvcview開(kāi)源程序的設(shè)計(jì)以及多媒體MFC程序設(shè)計(jì)等[5]。系統(tǒng)開(kāi)始工作后,先依次進(jìn)行USB攝像頭、多媒體接口、AVI文件初始化,然后判斷是否獲取到了攝像頭傳輸?shù)囊粠瑪?shù)據(jù),如果獲取到了數(shù)據(jù),繼續(xù)等待獲取;若沒(méi)有接收到數(shù)據(jù),則把數(shù)據(jù)格式從YUV轉(zhuǎn)換成MJPEG,再將MJPEG的一幀數(shù)據(jù)寫(xiě)入到文件中,至此便獲得了一幀數(shù)據(jù)。由此反復(fù)進(jìn)行采集便可形成一段視頻,達(dá)到本設(shè)計(jì)的攝像要求,并儲(chǔ)存到SD卡當(dāng)中。該視頻錄制系統(tǒng)獲取一幀數(shù)據(jù)的程序框架如圖4所示。
3.1 Linux環(huán)境的搭建
因?yàn)榍度胧絃inux系統(tǒng)的軟件編譯在PC機(jī)上進(jìn)行,但是執(zhí)行代碼程序卻在單板中,PC機(jī)和單板不是一個(gè)平臺(tái)上進(jìn)行的,因此需要交叉編譯。宿主PC機(jī)上進(jìn)行編譯程序,生成可執(zhí)行文件,把該執(zhí)行文件通過(guò)網(wǎng)絡(luò)下載燒寫(xiě)到嵌入式單板中。把目的程序燒寫(xiě)入FLASH獲取其他存儲(chǔ)介質(zhì),開(kāi)機(jī)后運(yùn)行這個(gè)程序。
本行車記錄儀使用常用的arm-linux-gcc交叉編譯器,一個(gè)完整的交叉編譯鏈,需要在PC機(jī)上安裝各種編譯軟件并設(shè)置好Linux開(kāi)發(fā)環(huán)境,包括C/C++編譯器、匯編器、連接器、嵌入式系統(tǒng)的標(biāo)準(zhǔn)C庫(kù)和GDB代碼調(diào)試器,以上的設(shè)置好了,就可以進(jìn)行行車記錄儀的應(yīng)用程序的開(kāi)發(fā)了。
3.1.1 u-boot編譯與燒寫(xiě)
Bootloader類似于PC機(jī)的BIOS(基本輸入輸出系統(tǒng)),是嵌入式單板開(kāi)機(jī)后執(zhí)行的第一段程序,雖然整個(gè)加載程序很小,卻是很重要的組成部分,不能缺少[6]。嵌入式Linux系統(tǒng)中,按下復(fù)位鍵或者重新上電后,程序開(kāi)始用PC寄存器開(kāi)始運(yùn)行程序,而這個(gè)正是存放引導(dǎo)啟動(dòng)代碼。這段代碼的做作用是設(shè)備的初始化,包括設(shè)置時(shí)鐘、關(guān)閉看門(mén)狗、初始化內(nèi)存參數(shù)等,并建立內(nèi)存映射、為運(yùn)行操作系統(tǒng)提供一個(gè)合適的環(huán)境,為最終的Linux內(nèi)核加載提供合適的環(huán)境[7]。
3.1.2 文件系統(tǒng)編譯與燒寫(xiě)
嵌入式系統(tǒng)常常采用閃存作為存儲(chǔ)設(shè)備,3個(gè)部分的代碼都存放在閃存。因?yàn)殚W存獨(dú)有的特性,需要設(shè)計(jì)專門(mén)的嵌入式FS系統(tǒng)。嵌入式系統(tǒng)實(shí)現(xiàn)層次結(jié)構(gòu)文件操作。對(duì)于應(yīng)用程序開(kāi)發(fā)人員來(lái)說(shuō),打開(kāi)文件的方式是不變的,使用統(tǒng)一的文件IO函數(shù)讀寫(xiě)文件。文件系統(tǒng)是Linux操作系統(tǒng)的一部分,作用是對(duì)文件進(jìn)行區(qū)塊管理,文件系統(tǒng)的作用是對(duì)邏輯文件的操作讀寫(xiě)復(fù)制等操作,方便應(yīng)用程序操作文件和目錄。
3.2 獲取攝像頭圖像程序設(shè)計(jì)
V4L2是Video for Linux的第二個(gè)版本的簡(jiǎn)稱,是前一個(gè)版本的改進(jìn)版。Video for Linux Two已經(jīng)是操作系統(tǒng)的標(biāo)準(zhǔn)代碼,作用是提供API接口,這些接口的功能是采集視頻、設(shè)置參數(shù)、獲取音頻數(shù)據(jù)等,通過(guò)這套接口可以完成多媒體的功能開(kāi)發(fā),在多媒體應(yīng)用中十分廣泛,比如視頻監(jiān)控領(lǐng)域、遠(yuǎn)程視頻領(lǐng)域等。
Linux操作系統(tǒng)中的所有操作都是通過(guò)文件完成,對(duì)外設(shè)操作是通過(guò)設(shè)備文件完成的,就像訪問(wèn)普通文件一樣訪問(wèn)設(shè)備文件。當(dāng)前系統(tǒng)中,把USB攝像頭插入主板后,Linux把此設(shè)備識(shí)別成/dev/video2文件,之后就是通過(guò)這個(gè)文件,并通過(guò)V4L2 API完成攝像頭的數(shù)據(jù)交互。標(biāo)準(zhǔn)的V4L2支持兩種方式獲取圖像數(shù)據(jù):內(nèi)存共享方式,通過(guò)mmap把內(nèi)核的內(nèi)存映射到應(yīng)用程序空間;另外一種是直接讀寫(xiě)設(shè)備。使用哪一種方式,需要知道驅(qū)動(dòng)的支持的方式。另外在videodev.h文件中定義了API操作相關(guān)的數(shù)據(jù)結(jié)構(gòu),獲取攝像頭數(shù)據(jù)的過(guò)程中,通過(guò)這些結(jié)構(gòu)獲取最終的圖像數(shù)據(jù)。這種對(duì)API支持的配置在編譯Linux內(nèi)核期間就可以配置到系統(tǒng)中,默認(rèn)是打開(kāi)的,該API接口在Linux2.5之后版本就已出現(xiàn)。獲取攝像頭圖像數(shù)據(jù)的流程,運(yùn)行的過(guò)程與一般的程序邏輯一樣。但是實(shí)際工程中,還需要增加對(duì)攝像頭數(shù)據(jù)進(jìn)行處理,比如視頻壓縮等,否則,視頻幀數(shù)據(jù)非常龐大,板子上的存儲(chǔ)空間與傳輸帶寬將不能滿足要求。
3.3 Luvcview開(kāi)源程序設(shè)計(jì)
Luvcview是一個(gè)公共社區(qū)開(kāi)發(fā)維護(hù)的開(kāi)源的代碼,用于攝像頭的功能測(cè)試,只要USB攝像頭符合UVC驅(qū)動(dòng)規(guī)范,就可以使用luvcview獲取攝像頭數(shù)據(jù),因此需要先核對(duì)使用的攝像頭是否在內(nèi)核UVC的支持列表中。對(duì)luvcview開(kāi)源代碼進(jìn)行定制化的開(kāi)發(fā)修改,能夠使得這套代碼可以運(yùn)行在TINY6410板子上跑程序,并結(jié)合TINY6410特有的MFC多媒體框架,使用硬件模塊完成空間色彩轉(zhuǎn)換與視頻圖像縮放效果,也就是視頻的后處理功能。修改代碼的luvcview適配到Linux平臺(tái)或者S3C6410嵌入式處理器中,因此開(kāi)源的代碼有兩個(gè)makefile文件,一個(gè)針對(duì)嵌入式系統(tǒng)版本,另外一個(gè)針對(duì)Linux版本,嵌入式系統(tǒng)版本中,有軟硬件實(shí)現(xiàn)YUV到RGB轉(zhuǎn)換與軟件實(shí)現(xiàn)YUV到RGB顏色空間的轉(zhuǎn)換,默認(rèn)的是使用硬件完成YUV到RGB顏色轉(zhuǎn)換并通過(guò)PP模塊完成視頻幀的放大與縮小。
3.4 多媒體MFC程序設(shè)計(jì)
多媒體MFC程序設(shè)計(jì)主要使用6410發(fā)行的編碼動(dòng)態(tài)庫(kù),在這些庫(kù)的函數(shù)中調(diào)用Linux API系統(tǒng)層函數(shù)如讀寫(xiě)控制函數(shù)。MFC編解碼過(guò)程中,該微處理器能夠進(jìn)行兩種方式的輸入處理,線性模式與環(huán)狀模式。在線性模式下,上層的程序使用一幀實(shí)際的大小填入緩存。該模式支持MPEG4/H.263、H.264、VC-1解碼。不同的是環(huán)狀模式,緩存被分割成幾個(gè)固定大小的部分來(lái)填充編碼的數(shù)據(jù)。在編碼任務(wù)中,環(huán)狀模式被用于輸入過(guò)程;線性模式被用于輸出過(guò)程。
4 主要系統(tǒng)模塊設(shè)計(jì)
4.1 開(kāi)發(fā)系統(tǒng)設(shè)計(jì)
本次視頻行車記錄儀設(shè)計(jì)的開(kāi)發(fā)環(huán)境為Ubnutu系統(tǒng),在Windows10下安裝虛擬機(jī),在虛擬機(jī)中安裝Ubuntu系統(tǒng),能夠屏蔽底層差異,避免不用硬件帶來(lái)的麻煩,并且可以方便的使用串口或者USB接口,快速的開(kāi)始實(shí)驗(yàn)。通過(guò)Ubuntu上創(chuàng)建交叉編譯環(huán)境。VMware虛擬機(jī)中的Ubuntu系統(tǒng)界面簡(jiǎn)潔、編寫(xiě)代碼方便,便于Tiny6410的程序開(kāi)發(fā)。
4.2 攝像頭系統(tǒng)設(shè)計(jì)
攝像頭主要由鏡頭、圖像感應(yīng)陣列、放大器、AGC、A/D、同步信號(hào)發(fā)生器D/A轉(zhuǎn)換電路等子模塊組成。攝像頭的主要圖像傳感部件是CMOS或者CCD感光陣列,都是理想的攝像元件。
攝像頭的工作原理為:被拍攝物體反射亮度,光線進(jìn)入鏡頭,經(jīng)過(guò)鏡頭聚焦到CMOS或者CCD陣列上,CCD或者CMOS掃描產(chǎn)生表示一幅畫(huà)面的電信號(hào),經(jīng)過(guò)電路放大、AGC自動(dòng)增益調(diào)整,由ISP圖像處理器轉(zhuǎn)換成數(shù)字信號(hào)。同步信號(hào)發(fā)生器主要產(chǎn)生同步時(shí)鐘信號(hào)(由晶體振蕩電路來(lái)完成),即產(chǎn)生垂直和水平的掃描驅(qū)動(dòng)信號(hào),到圖像處理IC。輸出端子輸出一個(gè)標(biāo)準(zhǔn)的復(fù)合視頻信號(hào)。感光示意圖如圖5所示。
4.3 顏色空間與格式轉(zhuǎn)換
描述顏色的方式有很多種,RGB三原色、YUV亮度色度或者極坐標(biāo)方式,在不同的使用環(huán)境中,可能會(huì)有不同的色彩表達(dá)和色彩空間變換,通過(guò)軟件或者硬件完成轉(zhuǎn)換的需求。根據(jù)不同的劃分定義,于是有了不同的顏色模型。
對(duì)于攝像頭傳感器,最常使用的色彩空間主要是紅綠藍(lán)與YUV這兩種,現(xiàn)實(shí)使用中,RGB又分成如RGB888或者RGB565等。YUV可以分成YUV444,YUV422,YUV420等子類型。RGB就是把3種原色光疊加在一起來(lái)說(shuō)明顏色,而YUV則按照亮度和色度差描述一個(gè)顏色點(diǎn)。由于YUV在很大程度上是取決于硬件,RGB和YUV變換公式有好幾種,但是差距不大。變換公式為:
Y=0.30R+0.59G+0.11B (1)
U=0.493(B-Y)=-0.15R-0.29G+0.44B(2)
V=0.887(R-Y)=0.62R-0.52G-0.10B (3)
其中:Y為灰階度;U和V為色度;R、G、B分別為紅、綠、藍(lán)3個(gè)顏色通道。公式表達(dá)式的差距主要體現(xiàn)在攝像頭傳感器上,有一些攝像頭傳感器能夠設(shè)置YUV的輸出的一定范圍。需要明白關(guān)鍵的一點(diǎn)是,UV信號(hào)是藍(lán)色差信號(hào)與紅色差信號(hào),從而在一定程度上代表的是藍(lán)色和紅色,基于這一點(diǎn),可以更好地理解顏色空間變換。
5 系統(tǒng)測(cè)試與功能實(shí)現(xiàn)
5.1 測(cè)試說(shuō)明
系統(tǒng)誤差包括操作誤差,外在環(huán)境誤差,和儀器誤差等多個(gè)方面。文中在TINY6410開(kāi)發(fā)平臺(tái)基礎(chǔ)上借助于虛擬機(jī)完成安裝Ubuntu系統(tǒng),實(shí)現(xiàn)了基于USB攝像頭完成視頻實(shí)時(shí)顯示與記錄到SD卡的視頻系統(tǒng)。當(dāng)啟動(dòng)時(shí)出現(xiàn)如圖6所示的企鵝圖像代表系統(tǒng)正常啟動(dòng)。通過(guò)多次試驗(yàn)測(cè)試,逐步提高系統(tǒng)穩(wěn)定性。
5.2 測(cè)試流程
實(shí)驗(yàn)測(cè)試中,視頻采集運(yùn)行穩(wěn)定,顯示的圖像穩(wěn)定。采用了MPEG-4通過(guò)硬件編碼方式,證實(shí)了系統(tǒng)的可行性較高。錄制在SD卡中的視頻能放在Windows系統(tǒng)中播放,因此,實(shí)現(xiàn)了視頻錄制的功能,并反映了記錄下車輛行駛過(guò)程中的數(shù)據(jù)。
6 小結(jié)
本設(shè)計(jì)使用的是S3C6410為核心的Tiny6410開(kāi)發(fā)板、高清攝像頭以及高速SD卡,配合軟件的編譯與燒寫(xiě),使本汽車行駛記錄儀具有攝像頭模塊數(shù)據(jù)讀出、同步視頻顯示和同步存儲(chǔ)到SD卡的功能,并且具有讀取穩(wěn)定、高清顯示、存儲(chǔ)高速和實(shí)用性強(qiáng)等特點(diǎn)[8]。在核心器件的選擇中主要考慮的是三星公司的S3C2440和S3C6410嵌入式處理器,通過(guò)查閱互聯(lián)網(wǎng)上的資料,對(duì)比發(fā)現(xiàn)S3C6410的多媒體處理能力比S3C2440要更加強(qiáng)大,拓展端口也更加豐富[9]。
參考文獻(xiàn):
[1]李東博. 汽車行駛記錄的研究[J].信息技術(shù), 2016(1):93-94.
[2]董琳. 基于S3C6410處理器U-boot SD卡啟動(dòng)方式的研究與實(shí)現(xiàn)[J]. 電子制作, 2015(19):96-97.
[3]孫春霞,孫江正.行駛記錄儀關(guān)鍵技術(shù)研究與實(shí)現(xiàn)[J].自動(dòng)化與儀器儀表, 2016(11): 243-246.
[4]黃相平,余水寶,夏燦.基于S3C6410平臺(tái)的嵌入式Linux系統(tǒng)LCD驅(qū)動(dòng)模塊[J]. 微型機(jī)與應(yīng)用, 2013, 32(13):9-12, 16.
[5]趙興海,衡友躍.基于S3C2440平臺(tái)的Linux內(nèi)核引導(dǎo)的過(guò)程實(shí)現(xiàn)[J]. 淮北職業(yè)技術(shù)學(xué)院學(xué)報(bào), 2016, 15(4):134-135, 138.
[6]LENG J W , DAI S . Research and design of embedded crane video transfer system[J]. Applied Mechanics and Materials, 2014(496-500):1609-1612.
[7]YAN Z C , FEN P X . Design and applications of embedded system in video surveillance[J]. Applied Mechanics and Materials, 2014(596):536-539.
[8]趙榮陽(yáng).基于嵌入式技術(shù)的多功能汽車行駛記錄儀設(shè)計(jì)[J]. 欽州學(xué)院學(xué)報(bào), 2013, 28(11): 6-9.
[9]張?chǎng)?,劉?shù)昌,莊仲,等.嵌入式汽車行駛記錄儀的設(shè)計(jì)[J]. 測(cè)試技術(shù)學(xué)報(bào), 2014, 28(5):400-404.
收稿日期:2019-05-30
基金項(xiàng)目:國(guó)家自然科學(xué)基金項(xiàng)目(61473118);
湖南省大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目(湘教通〔2019〕219號(hào));湖南省科技計(jì)劃項(xiàng)目(2016TP1021)
第一作者簡(jiǎn)介:程望斌(1979—),男,副教授,碩士,研究方向:光電子技術(shù);競(jìng)賽指導(dǎo)和人才培養(yǎng)。
通信作者簡(jiǎn)介:劉馨文(1997—),男,在讀碩士研究生,研究方向:機(jī)器視覺(jué),電子郵箱:386131592@qq.com。