摘 要:依托Android手機的GPS功能,攝像頭等強大的硬件基礎(chǔ)完成行車導航、自動點名、實時查看車內(nèi)信息等功能,避免硬件開發(fā)帶來的研發(fā)周期過長、不易于汽車相關(guān)系統(tǒng)集成等問題,節(jié)約開發(fā)成本。
關(guān)鍵詞:Andoird;導航;自動點名;視頻傳輸
中圖分類號:TP319
近年來,校車交通安全事故已經(jīng)成為中小學生安全事故意外傷亡中最主要的“殺手”。很大部分因素涉及監(jiān)管問題。我國車輛監(jiān)控系統(tǒng)的研究較晚,技術(shù)落后,成熟產(chǎn)品缺乏。但是隨著整個社會對校車安全的關(guān)注,校車監(jiān)控系統(tǒng)發(fā)展前景會越來越廣闊。
1 系統(tǒng)總體設(shè)計
總體功能分為三部分:
1.1 研究基于GPS行車路線監(jiān)控功能:通過手機的GPS實時傳輸車輛位置信息,服務(wù)器端自動對比行車路線、監(jiān)控行車速度。
1.2 研究基于手機相機的自動點名功能:對登車人員的二維碼進行掃描,根據(jù)信息自動對比搜索數(shù)據(jù)庫,實現(xiàn)自動點名功能。
1.3 研究基于3G的行駛過程視頻監(jiān)控功能:通過手機相機,在車輛行駛過程中自動錄制車輛內(nèi)部信息;研究視頻壓縮算法,實現(xiàn)對視頻錄像的有效壓縮;服務(wù)器端可以遠程啟動視頻傳輸功能,實時查看車內(nèi)情況。
2 基于百度地圖的行車助手功能
主要功能:基于百度地圖API,實現(xiàn)路線規(guī)劃、模擬導航、語音導航、PC端監(jiān)控行車速度
2.1 校車導航功能的實現(xiàn)。首先需要必須進行導航初始化處理。初始化BaiduNaviManager,public void initEngineManager(Context context) {}設(shè)置好密鑰,以及對初始化錯誤、網(wǎng)絡(luò)錯誤、授權(quán)錯誤的處理。
實現(xiàn)起點到終點的規(guī)劃重中之重是如何將中文地址解析成百度導航中可用的經(jīng)緯度,百度地圖提供的解析,只能解析成bd09,需要進行一下坐標轉(zhuǎn)換。
bd09mc-百度墨卡托坐標CoordinateTransformUtil.transferBD09ToGCJ02 ((double) (Point.getLongitudeE6()/1e6),(double) (Point.getLatitudeE6() / 1e6)));
百度地圖提供的解析函數(shù)不可同時解析兩個地址,必須使用回調(diào)函數(shù)來完成起點和終點的解析,另外路線規(guī)劃中必須要設(shè)置算路模式百度地圖API有多種算路模式供開發(fā)者使用,可以根據(jù)自己的需求來選擇算路模式。
模擬導航和實際導航需要獲取路線規(guī)化結(jié)果的起點和終點,并且要獲取路線規(guī)劃的算路模式,若未算路則會提醒先進行路線規(guī)劃,無異常則會調(diào)用導航函數(shù)。
2.2 實時監(jiān)控校車服務(wù)。客戶端設(shè)置定時器,每隔一段時間調(diào)用百度地圖的定位函數(shù),獲取經(jīng)緯度信息和速度信息,并發(fā)送給服務(wù)器端,服務(wù)器端也設(shè)置定時器,每隔一段時間檢查位置和速度信息的更新,并調(diào)用百度地圖API,實現(xiàn)在地圖上對校車位置的更新。
3 實時監(jiān)控
實時監(jiān)控功能,旨在滿足在某些情況下從遠端查看校車內(nèi)情況的需求,即實時的獲取手機在校車內(nèi)拍攝到的監(jiān)控圖像,管理員及時掌握校車內(nèi)的狀況。
3.1 監(jiān)控功能分析。在功能實現(xiàn)的過程中,最為重要的就是如何對直接獲取的圖像數(shù)據(jù)進行處理,如何將數(shù)據(jù)傳送給PC端進行實時視頻傳輸??紤]到在校車環(huán)境中,難以獲取清晰的聲音信息,即在傳輸數(shù)據(jù)中,若使用視頻格式(如MP4,H264),其中的音頻數(shù)據(jù)便成了冗余數(shù)據(jù)。因此,采用將攝像頭獲取的數(shù)據(jù)壓縮成圖片格式(如JPEG),舍去聲音信息,配合人眼的視覺暫?,F(xiàn)象(Visual staying phenomenon,duration of vision)所需頻率,進行傳輸。由此由于圖片格式較好的壓縮性能,以及UDP協(xié)議在多媒體數(shù)據(jù)傳輸上的優(yōu)良表現(xiàn),使最終的視頻質(zhì)量得到保證,使數(shù)據(jù)能以較低的數(shù)據(jù)速率傳送,適應(yīng)較窄帶寬。
3.2 功能實現(xiàn)方案。視頻監(jiān)控的實現(xiàn)首先需要進行初始化設(shè)置,調(diào)用initCamera()設(shè)置對YUV視頻文件轉(zhuǎn)化壓縮成JPEG格式圖片文件的大小以及拍攝照片頻率。
對于圖像數(shù)據(jù)的處理調(diào)用Android(由于多媒體技術(shù)的興起,Android 2.2版本后已支持多種多媒體編碼壓縮方式。)提供的函數(shù)image.compressToJpeg()即可將YUV格式圖像數(shù)據(jù)壓縮為JPEG格式。并啟用另一線程將圖像數(shù)據(jù)發(fā)送出去,此時通過已建立好的UDP連接,服務(wù)器端ImageServer通過Socket接口收到數(shù)據(jù)流,在頻幕上顯示圖片并刷新,形成實時視頻。
4 點名模塊
4.1 Android數(shù)據(jù)存儲方式分析。點名功能的正常實現(xiàn),需要學生名單。Android設(shè)備存儲數(shù)據(jù)主要有下面四種方式:SQLite、File、ContentProvider和SharedPreference。在這里為了方便查詢我們選擇使用SQLite。SQLite是一個輕量級的數(shù)據(jù)庫,無需服務(wù)器,大小只有幾百KB,但它支持基本的SQL語法,可以實現(xiàn)數(shù)據(jù)的添加、刪除和查詢。
4.2 模塊功能實現(xiàn)。學生信息采集功能:
上車掃描通過二維碼的掃描實現(xiàn)。信息解碼部分是參考Google的開源項目ZXing,對ZXing源代碼進行了比較大的簡化,并優(yōu)化了解碼部分,提高了解碼效率。
由于學生不止一人,所以通過一個極為簡單的判斷if(handler!=1)實現(xiàn)了二維碼的循環(huán)掃描,由于二維碼的連續(xù)循環(huán)掃描極易造成對同一個學生的信息進行多次重復(fù)的采集,給后面的信息比對過程造成很大的負擔,所以每次掃描后通過Thread.sleep()使線程睡眠一定時間停止掃描盡量避免重復(fù)掃描,效果非常明顯。
由于學生的學號是唯一固定的所以二維碼中解碼得到學生的學號信息。解碼成功后在應(yīng)用中創(chuàng)建一個Handle調(diào)用DBHelper的getUsers方法查詢解碼所得的信息與數(shù)據(jù)點名完畢后將未到同學列出。從SQLite中獲取所有學生的學號信息與解碼得到的學號信息進行比較對SQLite中的學生進行標記,通過標記區(qū)分顯示學生信息上傳功能:將信息比對的結(jié)果上傳至PC客戶端,為在PC機查看學生上車情況提供數(shù)據(jù)。
5 結(jié)束語
實現(xiàn)了基于百度地圖的模擬導航,基于視頻流技術(shù)的視頻傳輸,利用SQLite完成數(shù)據(jù)庫管理,通過二維碼掃碼建立點名功能。
參考文獻:
[1]Shawn Van Every.Pro Android Media[M].Apress,2010(10).
[2]zxing-A rough guide to standard encoding of information in barcodes[M]“Barcode Contents”,2009(02).
[3]彭吉練.利用二維碼實現(xiàn)圖書館導向標識系統(tǒng)[J].現(xiàn)代圖書情報技術(shù),2013(04):77-82.
[4]殷玥,劉偉,郭東恩.基于百度地圖API的房地產(chǎn)展示系統(tǒng)的實現(xiàn)[J].軟件導刊,2012(09):163-164.
作者簡介:班崟峰(1995-),男,遼寧丹東人,本科,研究方向:嵌入式、Android開發(fā)。
作者單位:大連理工大學 軟件學院,遼寧大連 116600