葉建林,潘志宏,顏浩瀚
(中山大學(xué)新華學(xué)院,廣東 廣州 510520)
2019年5G通信技術(shù)格局初步形成,微信成為國內(nèi)歷史上第一款擁有10億DAU數(shù)量級的APP,中國國民生活即將邁入小康社會,全國機(jī)動車保有量達(dá)3.19億輛。在這些背景因素的影響下,人們對大型室內(nèi)停車場場景中基于位置服務(wù)的需求日益增加。城市停車難、停車場尋車位難的問題逐漸受到人們的重視[1]。對此,文中設(shè)計開發(fā)了一個基于Ibeacon的室內(nèi)智能停車導(dǎo)航小程序。該設(shè)計與應(yīng)用將通過物聯(lián)網(wǎng)、Ibeacon定位等技術(shù)的應(yīng)用來幫助用戶更方便、更快捷地找到自己的停車位,大大提高了用戶的便利性。同時也改善了停車場的管理效率和幫助停車場進(jìn)行電子數(shù)據(jù)統(tǒng)計和分析,從而達(dá)到雙贏的局面。
首先介紹Ibeacon定位技術(shù)與MATLAB圖像處理技術(shù)相結(jié)合進(jìn)行問題解決的可行性,再介紹系統(tǒng)的硬件部署,并重點(diǎn)研究整個系統(tǒng)的設(shè)計思路、實現(xiàn)方法和測試效果。
Ibeacon定位技術(shù)是由Apple公司于2013年提出的,Ibeacon是一款體積小、能耗低的基于Bluetooh-4.0的藍(lán)牙模塊[2]。它通過無線信號與用戶設(shè)備進(jìn)行交互[3],所以Ibeacon技術(shù)對現(xiàn)如今的主流手機(jī)設(shè)備有著很好的技術(shù)支持性,后期的使用不需要添置其他終端設(shè)備。
基于Ibeacon信號指紋的定位技術(shù)主要通過利用地理位置和無線信號的RSSI的關(guān)聯(lián)性,將需要定位的位置周圍的信號信息與離線Ibeacon信號信息進(jìn)行映射匹配[3]。在基于Ibeacon信號指紋的定位環(huán)境中,n維的信號強(qiáng)度的RSSI值向量和二維的地理位置向量是相互對應(yīng)的[4]。當(dāng)獲取到當(dāng)前位置的Ibeacon信號值的向量之后,就能通過定位算法匹配出當(dāng)前位置的坐標(biāo)?;谛盘栔讣y的定位主要是通過實時測量當(dāng)前未知的RSSI值上傳到服務(wù)器[5],再由服務(wù)器進(jìn)行信號指紋的匹配,通過定位算法找出相近的幾個指紋的值,然后計算出最接近的位置坐標(biāo),返回匹配后的坐標(biāo),實現(xiàn)定位。該過程如圖1所示。
圖1 基于Ibeacon信號指紋的室內(nèi)定位過程
Ibeacon定位技術(shù)相較于現(xiàn)如今主流的Wi-Fi定位技術(shù)有一定的優(yōu)勢。在原理相同的情況下,雖然Wi-Fi定位技術(shù)有不用再額外添加硬件設(shè)備、發(fā)射信號相對穩(wěn)定并且傳輸距離遠(yuǎn)的優(yōu)勢[6],但由于它的自身傳播性的原因,存在信號傳輸易干擾、傳輸數(shù)據(jù)有誤差、室內(nèi)環(huán)境物體布局導(dǎo)致Wi-Fi信號產(chǎn)生多徑傳播效應(yīng)等問題。而Ibeacon定位技術(shù)則不存在以上問題[7]。
MATLAB是一個多種類工具的結(jié)合體。在MATLAB上用戶可以借助多種工具進(jìn)行操作或者調(diào)用函數(shù)和文件。其中包括了命令窗口、歷史命令窗口、編輯器和調(diào)試器、路徑搜索。同時MATLAB也具有出色的圖形處理能力。包括顯示圖像灰度分布情況、繪制灰度直方圖、圖像噪聲的添加、圖像傅里葉變換等[8]。由于它的特性,MATLAB還被應(yīng)用于車牌識別,通過灰度處理、圖像旋轉(zhuǎn)矯正、邊緣檢測、腐蝕填充和形態(tài)濾波等一系列操作得到二值化圖像后,再通過圖像區(qū)域分割和OTCU自適應(yīng)算法進(jìn)行車牌提取。
該小程序的硬件部分由移動終端、Ibeacon信標(biāo)、服務(wù)端和其他輔助硬件設(shè)備組成,如圖2所示。
移動用戶端由基于微信的微信小程序的手機(jī)、平板和筆記本電腦這種可攜帶式的設(shè)備組成,用戶只需通過小程序便可完成應(yīng)用程序與服務(wù)端的數(shù)據(jù)焦化以及一些邏輯業(yè)務(wù)處理。數(shù)據(jù)的采集也是通過移動終端接收附近的Ibeacon信標(biāo)的信號來實現(xiàn),再通過無線通信網(wǎng)絡(luò)把數(shù)據(jù)發(fā)送到服務(wù)端響應(yīng),服務(wù)端對數(shù)據(jù)進(jìn)行處理,返回定位結(jié)果。而部署在停車場四周的Ibeacon信標(biāo)設(shè)備會不斷地發(fā)送RSSI信號,形成定位傳感網(wǎng)絡(luò)。輔助設(shè)備則主要采集車牌圖像。
圖2 系統(tǒng)硬件部署設(shè)計
在架構(gòu)設(shè)計方面,決定采用面向服務(wù)體系結(jié)構(gòu)SOA(service-oriented architecture)。這種具有中立的接口定義(沒有強(qiáng)制綁定到特定的實現(xiàn)上)的特征稱為服務(wù)之間的松耦合。松耦合系統(tǒng)的好處有兩點(diǎn):一是它的靈活性,二是當(dāng)組成整個應(yīng)用程序的每個服務(wù)的內(nèi)部結(jié)構(gòu)和實現(xiàn)逐漸地發(fā)生改變時,它能夠繼續(xù)存在。與之相反,緊耦合意味著應(yīng)用程序的不同組件之間的接口與其功能和結(jié)構(gòu)是緊密相連的,因而當(dāng)需要對部分或整個應(yīng)用程序進(jìn)行某種形式的更改時,它們就顯得非常脆弱[9]。所以整個架構(gòu)設(shè)計分為硬件層、數(shù)據(jù)層、服務(wù)層、應(yīng)用層,如圖3所示。
圖3 軟件架構(gòu)
該系統(tǒng)是基于大型停車場場景提出的,而Ibeacon的工作原理是基于Bluetooth Low Energy(BLE)低功耗藍(lán)牙傳輸技術(shù)發(fā)送特定識別信息[10]。藍(lán)牙低功耗beacon基站不斷向四周發(fā)送藍(lán)牙信號(含相同的UUID,一個區(qū)域有多個相同的UUID時,可附帶其他信息以區(qū)分),當(dāng)滿足Ibeacon技術(shù)標(biāo)準(zhǔn)的藍(lán)牙模塊的智能設(shè)備進(jìn)入設(shè)定區(qū)域時,就能接收到信號,藍(lán)牙設(shè)備定位接受并反饋信號,定位引擎通過基于rssi的三點(diǎn)定位算法計算出用戶位置[11]。基于rssi的三點(diǎn)定位算法是已知三個點(diǎn)的坐標(biāo)和未知點(diǎn)到這三個點(diǎn)的rssi的信號值,求解未知點(diǎn)的坐標(biāo)。首先是將rssi信號轉(zhuǎn)換為距離:d=10^((ABS(RSSI)-A)/(10*n))[12]。其中d為距離,單位是m。RSSI為rssi信號強(qiáng)度,為負(fù)數(shù);A為距離探測設(shè)備1 m時的rssi值的絕對值,最佳范圍在45~49之間;n為環(huán)境衰減因子,需要測試矯正,最佳范圍在3.25~4.5之間[13-14]。在獲取得到未知點(diǎn)到三個坐標(biāo)點(diǎn)的距離后,根據(jù)畢達(dá)哥拉斯定理,得出未知點(diǎn)的位置(x,y),其計算公式如下:
Ibeacon信標(biāo)傳輸?shù)淖畲笊涑倘Q于位置、現(xiàn)場布置、障礙物等。標(biāo)準(zhǔn)信號有近似70 m,遠(yuǎn)程信號可達(dá)450 m[15]。而淘寶網(wǎng)上數(shù)據(jù)顯示,Ibeacon信標(biāo)的傳輸距離普遍屬于標(biāo)準(zhǔn)信號(50 m~90 m)。例如,某一大型地下停車場一層車位為75個,而地下車庫一個停車位的面積一般為35 m2,則75*35=2 625 m2。所以至少需要260個Ibeacon信標(biāo)基站,按照市面價格約為8 000元。
依據(jù)上述定位基本原理,該系統(tǒng)接入蜂鳥云SDK和MATLAB圖像處理后即可以實現(xiàn)其核心功能。即在進(jìn)入停車場前會通過MATLAB工具輔助進(jìn)行圖像處理。通過停車場ETC入庫口處的攝影機(jī)獲得車牌號圖像,再通過rgb2gray()方法將原圖轉(zhuǎn)換為灰度圖像。接著使用str2double()的get()方法和imrotate()對非正常角度的車牌圖像進(jìn)行旋轉(zhuǎn)。在獲取灰度圖像后通過調(diào)用edge()方法對灰度圖像驚醒邊緣檢測處理,處理后設(shè)置結(jié)構(gòu)元素對象并使用imerode()方法實現(xiàn)腐蝕效果,再重新設(shè)計結(jié)構(gòu)元素對象并使用imclose()方法對腐蝕圖像進(jìn)行閉關(guān)運(yùn)算實現(xiàn)填充效果。最后再調(diào)用bwareaopen()函數(shù)進(jìn)行形態(tài)濾波,得到有車牌號輪廓的圖像。得到二值化的圖像之后再通過zeros(size())方法計算X,Y方向車牌圖像區(qū)域,并對該區(qū)域進(jìn)行定位分割。最后用OTCU算法自適應(yīng)二值化處理后提取車牌。其核心代碼如下。
function pushbutton7_Callback(hObject,eventdata,handles)
%車牌提取
I=handles.I;
I_final=handle.I_final;
I_new=zeros(size(I_final,1),size(I_final,2)); %尋找二值圖像中白點(diǎn)的位置
location_of_1=[];
for i=1:size(I_final,1)
for j=1:size(I_final,2)
if I_final(i,j)==1;
nelocation=[i.j];
location_of_1=[location_of_1;newlocation];
end
end
end
mini=inf;maxi=0;
for i=1:size(location_of_1,1) %尋找所有白點(diǎn)中,x坐標(biāo)和y坐標(biāo)的和最大,最小的兩個點(diǎn)的位置
temp=location_of_1(i,1)+location_of_1(i,2);
if temp mini=temp; a=i; end if temp>maxi maxi=temp; b=i; end end first_point=location_of_1(a,:); %和最小的點(diǎn)為車牌的左上角 last_point=location_of_1(b,:); %和最大的點(diǎn)為車牌的右上角 x1=first_point(1)+4; %坐標(biāo)值修正 x2=last_point(1)-4; y1=first_point(2)+4; y2=last_point(2)-4; I_plate=I(x1:x2,y1:y2); I_plate=OTSU(I_plate,50); %以O(shè)TSU算法對分割出的車牌進(jìn)行自適應(yīng)二值處理化 axes(handles.axes7); imshow(I_plate); title('車牌提取'); handles.I_plate=I_plate; guidata(hObject,handles); 其實現(xiàn)效果如圖4所示。 圖4 車牌識別測試 然后在進(jìn)入停車場后就可以根據(jù)空余車位的編號在室內(nèi)停車場地圖上通過選擇起點(diǎn)和終點(diǎn)進(jìn)行快速的路線規(guī)劃,方便用戶前往停車位,避免了盲目兜圈。在室內(nèi)停車場的路徑規(guī)劃過程中一開始會初始化地圖信息加載地圖,創(chuàng)建路徑分析對象new fengmap.FMNaviAnalyser.create({}),然后通過已加載的地圖數(shù)據(jù)加載模型dijkstra.init(map)。初始化完畢之后,用戶就可以根據(jù)之前獲得的車位編號設(shè)置起點(diǎn)和終點(diǎn)。該流程核心代碼如下: //創(chuàng)建路徑分析對象 var dijkstra=new fengmap.FMNaviAnalyser.create({}); //通過已加載的地圖數(shù)據(jù)加載模型 dijkstra.init(map);//注意:此方法需保證map數(shù)據(jù)已加載完成,可在map的loadComplete事件后調(diào)用 //添加模擬起、終點(diǎn) var naviCoords=[] ,naviGids=[]; var coord=new fengmap.FMMapCoord(); coord.x=12961588.0371617; coord.y=4861847.72571208; naviCoords.push(coord); var coord1=new fengmap.FMMapCoord(); coord1.x=12961587.6306147; coord1.y=4861844.85608228; naviCoords.push(coord1); //添加起點(diǎn)和終點(diǎn)對應(yīng)的樓層id naviGids=[6,5]; 根據(jù)設(shè)置的起點(diǎn)和終點(diǎn)進(jìn)行路徑分析,分析成功,返回路徑經(jīng)過的坐標(biāo)點(diǎn)集。 //路徑分析:傳入起點(diǎn)和終點(diǎn)坐標(biāo)和樓層ID進(jìn)行樓層分析 if (dijkstra.analyzeNavi(naviGids[0], naviCoords[0], naviGids[1], naviCoords[1], fengmap.FMNaviModule.MODULE_SHORTEST)==fengmap.FMRouteCalcuResult.ROUTE_SUCCESS) { var results=dijkstra.getNaviResults(); //得到路徑分析后的結(jié)果集 if (results.length==0) return; var des=dijkstra.getRouteDescriptions(navResult); console.log(des); } 其實現(xiàn)效果如圖5所示。 圖5 停車導(dǎo)航測試 根據(jù)市場調(diào)研得出用戶需求,并加以分析,將Ibeacon定位技術(shù)和微信小程序相結(jié)合設(shè)計開發(fā)了室內(nèi)智能停車導(dǎo)航小程序。該小程序主要從硬件部署,服務(wù)器的數(shù)據(jù)庫和軟件架構(gòu)、數(shù)據(jù)交互方式、Ibeacon定位和用戶端模塊這些方面入手進(jìn)行設(shè)計。最后對小程序進(jìn)行測試和分析,并且展現(xiàn)了運(yùn)行結(jié)果。該小程序?qū)崿F(xiàn)了停車導(dǎo)航和車牌識別的功能。這些功能對現(xiàn)在城市停車難的問題提供了良好的解決方案,為用戶節(jié)省了在停車場內(nèi)滯留的時間,同時也提高了停車場管理人員的工作效率。4 結(jié)束語