?

基于Android系統的光譜傳感物聯網移動終端設計

2019-03-19 01:01,,,,
計算機測量與控制 2019年3期
關鍵詞:微分光譜服務器

,, ,,

(1.中國科學院上海技術物理研究所 傳感技術聯合國家重點實驗室,上海 200083;2.中國科學院上海技術物理研究所 中國科學院紅外成像材料與器件重點實驗室, 上海 200083;3.中國科學院大學,北京 100049; 4.上??萍即髮W,上海 200083)

0 引言

近紅外光譜是指波長在780-2526nm范圍內的電磁波[1]。由于絕大多數無機化合物和有機化合物的化學鍵的振動在近紅外光譜區會產生的倍頻和合頻的吸收,通過對物質的近紅外光譜分析可定性或定量的分析其組分[2]。近紅外光譜分析技術具有無損、快速高效、便于在線分析以及測量結果穩定性好等優點[3],已經廣泛應用于農業、醫藥、食品、紡織、石油化工等多個領域[4]。將近紅外采集設備與物聯網結合起來也是當下的研究熱點。

據工信部報道,世界物聯網用戶已經突破十億,并且每一季度仍保持2.5%的增速[5]。在物聯網的飛速發展中,感知層成功實現了溫濕度信息、位置信息、視頻監控等信息的獲取和感知,關于物質光譜的定性、定量分析可以通過近紅外技術來實現。傳統的光譜分析儀器由于體積和成本的限制,難以直接應用于物聯網領域。為方便用戶隨時隨地獲取物質光譜信息,本課題組以自研光譜感知節點[6],搭建了光譜傳感物聯網。如圖1所示,光譜傳感物聯網由節點區域(BLOCK,包括光譜節點與環境節點,其中環境節點包括二氧化碳濃度節點、溫度節點、濕度節點以及光照強度節點)、云服務器、數據庫、移動終端四部分構成。光譜節點采集光譜數據上傳到云數據庫,移動終端通過訪問云服務器請求數據,云服務器從云數據庫獲取移動終端所請求的對應時間、區域的光譜數據傳輸給移動終端。

圖1 光譜傳感物聯網結構

近年來國內微型光譜儀移動終端軟件發展迅速。哈爾濱工業大學趙楊進行了基于Android平臺的激光光譜儀數據處理的研究,作者采用Android平臺,利用USB接口連接光譜儀與移動終端實現數據傳輸[7]。江蘇大學耿德春進行了基于Android平臺近紅外光譜儀控制及工作狀態監測的開發研究,實現通過移動終端對光譜儀的硬件控制,光譜掃描,數據與處理,模型調用等功能[8]。桂林電子科技大學糜榮,王永,熊顯名等進行了基于Android平臺的微型光譜儀數據傳輸與顯示研究,通過wifi網絡將光譜儀與移動終端進行連接[9]。但應用于光譜傳感物聯網的移動終端軟件研究未見報道。

光譜傳感物聯網可突破感知節點與終端設備距離的限制,用戶在蜂窩網絡下即可獲取數據。其中移動終端是用戶與光譜傳感物聯網數據交互的媒介,本文對光譜傳感物聯網專用移動終端軟件設計進行了研究??烧故疚锫摼W下光譜節點及環境節點信息,通過蜂窩網絡獲取數據并以圖形化形式顯示,以及對圖像進行保存,進一步在移動終端上實現了光譜數據的歸一化,一階微分,二階微分,峰值尋找的數據處理功能。

1 移動終端總體設計

近年來Android系統發展迅速,測控系統和儀器設備有使用基于Android操作系統的移動設備代替計算機設備的趨勢,從而具有體積小、輕便易攜、功耗低、處理能力強等優點[10]。Android是由谷歌公司推出的移動設備操作系統,基于Linux,主要包括應用程序層、應用程序框架層、程序庫、Android運行庫和Linux內核等部分[11]。

本項目開發的移動終端重點在于實現手機與云服務器之間的通信及數據交互,使用戶在使用蜂窩網絡時可以隨時隨地訪問數據庫獲取任意時刻的光譜或者環境數據,進行圖形化展示及光譜數據的預處理,并將結果保存在手機。

1.1 移動終端功能設計

移動終端作為用戶與光譜傳感物聯網交互的入口,需要實現登錄注冊,節點信息獲取,數據獲取與處理,圖像數據保存功能??煞譃槿竽K:用戶信息模塊、節點信息模塊以及數據信息模塊,移動終端系統功能圖由圖2所示。

圖2 移動終端系統功能結構圖

用戶信息模塊實現登錄與注冊功能。節點信息模塊中由于光譜節點與環境節點是以Block為區域進行排布的,一個Block中包含數十個光譜節點與環境節點。為了提高查找對應節點信息的效率,先獲取其所在Blcok信息,再從中進行查找。數據信息模塊包括訪問數據庫獲取數據,數據繪圖,數據處理以及將圖像保存在系統相冊的功能。

1.2 移動終端開發環境

計算機系統:macOS 64位操作系統;Java Jdk版本:1.8.0;Android 開發工具:Eclipse 及 Android Sdk; Android調試環境:Android虛擬機及魅族手機一臺。

云服務器:阿里云服務器,配置是1核cpu,2 G內存,1 Mbps帶寬。

數據庫版本:SQL Server 2008。

2 移動終端功能實現

2.1 用戶信息模塊

用戶信息模塊實現了登錄與注冊這兩種移動終端常用功能。

注冊功能要求用戶錄入賬戶名稱、密碼、手機號碼以及常用郵箱。當用戶點擊確認注冊按鈕時,先判斷注冊信息是否符合格式:格式不符合要求時會提醒用戶更改注冊信息,格式正確的話使用Socket與服務器進行通信。服務器端判斷數據庫中用戶表里是否已經存在此賬戶名,如果存在則提示用戶“用戶名已存在,請更換”,如果不存在且用戶各項信息格式正確,則在數據庫用戶表中新增用戶,并在手機上顯示注冊成功。

在注冊時用到的Socket又稱“套接字”,其本質是編程接口,對TCP/IP進行封裝??蛻舳撕头掌鬟M行通信,兩者都要實例化一個Socket對象??蛻舳撕头掌鞫说腟ocket是不一樣的,客戶端可以實現遠程連接服務器、發送數據、接收數據、關閉連接等功能;服務器端還需實現綁定端口、監聽到達的數據、接受來自遠程機器的連接等功能。Android在包java.net里提供了兩個類:Socket和ServerSocket,前者用于實例化客戶端Socket對象,后者用于實例化服務器Socket對象[12]??蛻舳讼蚍掌靼l送注冊信息步驟如下:

1)創建Socket對象

Socket socket = new Socket(ip,port);

2)創建輸出流

DataOutputStream ds = new DataOutputStream

(socket.getOutputStream());

3)將注冊信息傳送給服務器

ds.writeUTF(register_info);

4)關閉輸出流與Socket

ds.close();

socket.close();

其中ip指服務器IP地址,port指服務器連接端口,register_info指客戶端發送至服務器的注冊信息。

登錄功能的實現使用Soap協議與服務器進行通信(Soap協議將在節點信息模塊介紹),服務器端將用戶名和密碼與數據庫用戶表中的信息進行匹配,匹配成功后登錄成功。

2.2 節點信息模塊

在移動終端節點展示界面上采用雙List列表形式展示,左邊一列展示Block信息,右邊一列顯示所選Block下的節點信息。為了區分光譜節點以及環境節點,在界面底部設置菜單欄,分別為光譜信息、環境信息及個人信息,由圖3所示。底部菜單欄的設計提高了移動終端功能開發的靈活性,因為各個菜單欄下的開發相互獨立,可以分別開發最后合并,方便日后由于移動終端功能的改變對于模塊的增加修改。

為實現菜單欄左右滑動切換頁面view的效果,移動終端中采用ViewPager類。其為Android擴展包v4中的類。建立底部菜單欄的方法如下:

1)為底部菜單欄新建一個布局。

2)將ViewPage添加到頁面布局,其下方添加底部菜單欄布局。

3)為每個菜單對應的頁面內容建立各自的布局,通過適配器關聯各個頁面與ViewPager。

4) 監聽ViewPager與底部菜單欄事件,進行頁面的切換展示。

圖3 節點信息展示界面

登陸成功后會跳轉到節點顯示界面,此界面默認獲取云數據庫中用戶名下的Block并進行顯示。在光譜信息菜單欄時,當選擇具體的Block后,移動終端會向服務器上傳用戶名以及Block信息以請求對應Block下的光譜節點信息,云服務器從數據庫中獲取對應數據后傳輸給移動終端進行展示。

環境節點包括溫度、濕度、二氧化碳濃度與光照強度節點。頁面上的環境信息節點被選擇后會跳轉環境節點數據顯示頁面,此頁面會顯示4種環境節點采集的最新數據。特定選擇某一個環境節點后會跳轉到時間段選擇頁面,用戶可以選擇時間段從而獲取此時間段內采集的所有環境信息。環境信息菜單請求服務器獲取數據的方式與光譜信息菜單的方式相同。

以上所涉及到的網絡通信均采用Soap協議。Soap(簡單對象訪問協議)是一種標準化的通信規范,主要用于Web服務。Soap基于XML標準,用于在分布式環境中發布信息,并執行遠程過程調用。使用Soap不用考慮任何特定的傳輸協議(通常選用HTTP協議),就能使數據序列化[12]。本實例中Soap調用WebService的獲取光譜數據具體步驟如下:

1) 添加ksoap2包。WebService是一種基于SOAP協議的遠程調用標準,通過WebService可以將不同的操作系統平臺,不同技術,不同語言整合在一塊。在Android SDK中沒有提供調用WebService的庫,因此需要使用第三方的SDK來調用WebService。在這里采用ksoap2第三方SDK。

2) 指定命名空間和調用的方法名,如:

String namespace ="http://spectrum_data";

Stringmethodname = "spectrum_data";

SoapObjectreq = new SoapObject(namespace, methodname);

3) 設置調用方法的參數值:

req.addProperty("username", username);

req.addProperty("block", blockname);

req.addProperty("lightnode", lightnode);

req.addProperty("time", time);

4) 生成調用WebService方法的Soap請求信息。該信息由SoapSerializationEnvelope描述:

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);

envelope.bodyOut = req;

5) 創建HttpTransportsSE對象,訪問云服務器url:

String URL = "IP_port" + /spectrumdata

/services/spectrum_data";

HttpTransportSE transport = new HttpTransportSE(URL);

6) 使用call方法調用WebService方法:

transport.call(null, envelope);

7) 使用getResponse方法獲得WebService返回的結果:

result = (SoapObject) envelope.getResponse();

8) 解析返回的內容。

在進行網絡請求時需創建一個新的線程。Android4.0之后在主線程里執行網絡請求會報NetworkOnMainThreadException的異常。網絡請求會耗費大量時間,造成主線程的阻塞,使移動終端運行時出現阻塞卡頓,所以不能在主線程里進行網絡請求。創建線程并啟動的方法為:

Thread t1 = new Thread(webInstance);

t1.start();

其中webInstance是創建的網絡請求類的對象。

2.3 數據信息模塊

2.3.1 數據繪圖

經光譜感知節點采集到的數據信息為204個離散的光譜數據點,格式為“波長-強度”。波長范圍為939~1 688 nm,強度范圍為0~1。有機分子的基團會對特定近紅外波長產生吸收,因此光譜數據中蘊含著豐富的物質成分信息。但將原始數據直接以數字的方式在移動終端上進行顯示,會對用戶觀測光譜數據造成諸多不便。因此移動終端進行光譜數據的圖形化展示,這樣做更為直觀的展現不同波長所對應光譜的變化。

Android中繪圖常用Paint、Canvas類或MPAndroidChart、AChartEngine等開源圖表庫。本軟件數據繪圖部分采用Android開源項目AChartEngine,其為一個制作常用圖表的框架,該框架支持豐富的圖表展示(如條形圖、折線圖、散點圖、積圖、氣泡圖等)[13]。數據繪圖的過程如下:

1)創建二維多系列數據集用以存儲光譜數據或者環境信息數據:

XYMultipleSeriesDataset dataset;

創建二維多系列畫圖器,用作設置圖表的基本屬性:

XYMultipleSeriesRenderer renderer;

創建GraphicalView對象,用以作為顯示圖表的View:

GraphicalView line;

2)創建XYSeries對象存儲圖表的x,y軸數據,即光譜數據波長與吸光度,或環境信息時間與環境數據。并添加其至dataset。

XYSeriesspseries;

dataset.addSeries(spseries);

for(i = 0; i< y_set.lenth-1;i++){

spseries.add(s_set[i],y_set[i]);

}

3)使用ChartFactory.getLineChartInten方法繪圖至GraphicalView對象,并將此對象添加至界面View。

line=ChartFactory.getLineChartIntent(this, dataset, renderer);

layout.addView(line, 0);

2.3.2 數據處理

由于光譜感知節點本身固有的原因,所采集到的光譜數據中除了樣本信息以外,還會包含其他干擾信息,如雜散光、散射光、儀器噪聲等。這會對光譜圖像精確性產生影響,如導致光譜的基線漂移,因此對采集到的近紅外光譜數據進行預處理操作是十分必要的。

本軟件中使用了兩種數據處理方法,分別是歸一化與微分去噪,微分方法包括一階微分及二階微分。實際應用中可根據需要進行預處理方法的選擇。

1)歸一化[14]:

歸一化使數據處于同一范圍內,可以有效減小奇異樣本數據導致的誤差影響。其對應的計算公式如下:

(1)

式中,x指處理前的吸光度,x'指處理后的吸光度。

2)微分處理[8]:

在近紅外光譜分析中,微分(一階微分,二階微分)是常用的光譜處理方法,主要作用是消除基線漂移。

一階微分:

(2)

二階微分:

(3)

式中,g指微分窗口寬度,在本軟件中一階微分中g取3,二階微分中g取6;x指處理前的吸光度,x'指處理后的吸光度。

光譜處理以及處理后的圖像如圖4所示??梢园l現歸一化處理將數據范圍縮小至0~1.0,一階微分給出了整張譜圖數據的變化率,二階微分表示譜圖變化率的變化情況,可以顯示出原始譜圖中的肩峰的確切峰位。

圖4 光譜數據處理

3)峰值尋找:

近紅外光譜主要是有機分子倍頻與合頻在近紅外區域的吸收光譜[13]。是光譜圖像中蘊含物質信息最豐富的位置。因此波峰的尋找對于物質光譜的分析具有重要意義。

本軟件存使用兩個數組存儲光譜數據,一個數組存儲波長,另一個數組存儲波長所對應的強度。在尋峰時使用尋找數組峰值的方法,遍歷數組元素,與其周圍元素進行比較,當差大于閾值(光譜數據最大值最小值之差的十分之一)時則可認為是尋找的峰值。

2.3.3 圖像保存

移動終端每進行一次光譜數據請求都會將數據繪制成為圖像。為方便用戶記錄保存圖像以及將前后光譜圖像進行對比,將圖像保存到系統相冊以備后續調用是移動終端必須的功能。

將Android界面上的光譜圖像以圖片格式保存至系統相冊,方法是:

1)將對應區域的View轉換為bitmap對象:

Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache);2)獲取手機SD卡,設置存儲路徑:

File sdCardDir = Environment;

getExternalStorageDirectory();

String strpath = "/IOT記錄/" + time + "圖像.png";

File file = new File(sdCardDir, strpath);

3)使用Bitmap的compress方法指定壓縮格式為PNG格式:

bitmap.compress(CompressFormat.PNG,100,fos);

4)存儲到系統相冊中時需使用sendBroadcast方法向系統進行廣播:

Intent intent = new Intent(Intent.

ACTION_MEDIA_SCANNER_SCAN_FILE);

Uri uri = Uri.fromFile(file);

intent.setData(uri);

sendBroadcast(intent);

經測試,可以將顯示圖像的區域保存為PNG格式圖片到相冊,滿足了用戶保存圖像的需求。

3 試驗結果與分析

為檢驗移動終端軟件運行情況,于2018年6月14日早9:00進行試驗。

試驗時以云數據庫中用戶liming為登錄賬號,其名下有2個block,其中BLOCK1中有3個光譜節點,6個環境節點。

光譜節點1號最新存儲數據采集時間為2018年6月13日上午10:05:00,參見圖5。開啟軟件,登錄liming賬號后選擇BLOCK1中的光譜節點1號,然后選擇2018年6月13日10:00,來檢測移動終端的光譜數據獲取、數據處理及保存功能。試驗結果如圖6所示。

圖5 數據庫截圖

圖6 移動終端數據處理檢測結果

由光譜圖像及微分處理圖像可知,一階微分圖像可以分析光譜圖像中的肩峰。一階微分給出了光譜曲線的變化率,其最大值最小值點不是光譜曲線的最大值最小值點,而是光譜曲線的最大斜率點。在一階微分圖像中,肩峰變窄,更容易識別。

二階微分圖像表示光譜曲線變化率的變化情況,可以找到光譜曲線的確切峰位。二階微分比一階微分基線噪聲更多,每做一次微分,噪聲就會增加,但是信號強度卻減小,可以降低信噪比。

環境節點1號最新數據為2018年6月10日的數據,如圖7所示,溫度,濕度,二氧化碳濃度,光照強度展示的為最新檢測結果。階段性的環境數據獲取以溫度為例,獲取2018年6月10日10:29至15:29的數據,繪制圖像見圖8。

圖7 節點1號的環境信息

圖8 節點1號溫度曲線圖

由試驗結果可得移動終端成功從云服務器請求光譜數據進行處理并繪制出圖像,找出峰值。期間網絡請求流暢,圖像繪制精準,數據處理無誤,可將光譜數據簡單形象的呈現給用戶。對于環境信息,此移動終端可以實時展示最新環境數據,以及獲取對應時間段的環境數據繪制圖像,直觀的將環境信息變化情況用圖像展現,可以輔助用戶對生產生活做出決策。此移動終端與服務器完成通信,數據獲取、繪圖、保存以及處理功能實現正常,實現了開發的預期效果,滿足了光譜傳感物聯網專用移動終端的需求。

4 結束語

本文設計的軟件實現了光譜傳感物聯網移動終端的基本功能。界面簡潔,與用戶交互性好。移動終端與服務器通信穩定,可以方便用戶獲取數據并處理。使移動端光譜處理軟件突破與光譜儀節點距離的限制,在蜂窩網絡環境下隨時隨地訪問光譜及環境信息,在將來的智能農業,智慧城市等領域會有廣泛用處。

猜你喜歡
微分光譜服務器
基于三維Saab變換的高光譜圖像壓縮方法
基于3D-CNN的高光譜遙感圖像分類算法
一類帶有Slit-strips型積分邊值條件的分數階微分方程及微分包含解的存在性
薄膜光伏組件在不同光譜分布下的測試差異
PowerTCP Server Tool
BlackJumboDog
2018年全球服務器市場將保持溫和增長
基于跟蹤微分器的高超聲速飛行器減步控制
微分在近似計算中的應用
基于微分對策理論的兩車碰撞問題
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合