張華偉,史久琛,李嘯宇,董蘇
(大連理工大學軟件學院,大連116000)
兒童時期是人一生中生命力最強、健康問題最少的時期,但也是意外傷害的多發時期。據意外傷害監測網絡顯示,在中國,意外傷害是0~14歲兒童受傷害的首要原因[1]。數據顯示,我國每年大約至少有1000萬兒童受到各種意外傷害,40萬兒童因意外傷害成為殘疾。意外傷害已是0~14歲兒童死亡的首要原因,中國0~14歲兒童意外傷害的傷亡率是美國的2.5倍,韓國的1.5倍[2]。因此,社會迫切需要對兒童的運動狀態及安全狀況有更全面的了解。父母作為兒童監護人,需要實時關注兒童的運動狀態及安全狀況。
目前,國際上許多高校和研究所,如麻省理工學院、牛津大學等都專門設立了針對運動目標檢測的研究組或者研究實驗室。一些著名公司和研究機構,如IBM、Microsoft、麻省理工學院等近幾年來投入了大量的人力物力進行智能監控系統的研究,部分成果已經轉化為產品投入了市場。
目前在國內的研究機構中,中國科學院北京自動化研究所下屬的模式識別國家重點實驗室視覺監控研究處于領先地位。他們在交通場景視覺監控、人的運動視覺監控和行為模式識別方面進行了深入研究。國內其他高校如上海交通大學、北京航空航天大學也對這方面進行了研究[3]。
但是,現有研究仍有許多不足:
(1)市場上的產品主要基于成年人的運動狀態以及健康情況的分析,在對于兒童的安全監測的方面存在缺失。
(2)對于兒童的運動狀態,市場上已經出現的運動狀態分析軟件的功能大多數是不適用的,兒童最普遍的運動問題是跌倒,因此應從跌倒分析中對兒童的運動狀態以及安全狀況進行合理判斷。
(3)大多數的國內外人體運動慣性傳感器的研究中,應用軟件中所反映的數據主要是對于使用者進行反饋,而對于兒童,這些數據需要及時反饋給家長。
本文基于上述問題提出了一種適用于兒童的運動數據統計分析方法,通過調研兒童的大量運動數據,以及檢測兒童每日的跌倒信息,對兒童的運動狀態以及身體安全狀況進行合理判斷。本文設計了基于Android的兒童運動分析及監控系統,在檢測兒童運動狀態的同時還實現了社交功能,可將兒童的運動數據及時反饋給家長,家長可以對兒童的潛在危險與健康情況做出快速反應,更好地保障兒童安全。
本系統主要包含兒童客戶端、家長客戶端、網絡通信三個模塊。其中,兒童客戶端主要包含運動統計、兒童監護、社交活動三個子模塊,家長客戶端主要功包括數據處理、用戶管理兩個子模塊,網絡通信模塊主要功能為在兩個客戶端之間進行數據的傳輸。圖1為系統框架圖:

圖1 系統架構
兒童客戶端模塊主要包含運動統計、兒童監護、用戶管理三個子模塊。
運動統計子模塊主要是對兒童行走的捕捉,記錄與統計每日步數、行走距離和熱量消耗。通過圖表等可視化方式來展示兒童的活動情況,并將數據保存至服務器,提供了準確可靠的數據支持。
兒童監護子模塊主要包括跌倒檢測和定位監測兩個功能。通過對兒童跌倒行為的捕獲,反映兒童運動的穩定性。通過對兒童進行位置監測,實時獲取其活動的位置信息并進行范圍限定,從而提高對兒童進行保護的安全系數。
用戶管理子模塊主要實現了注冊登錄與賬號綁定兩個功能,使得兒童客戶端與家長客戶端之間可以良好地進行數據交換,通過家長與兒童賬號互相綁定,利用兒童監護子模塊獲取兒童的潛在危機,并向家長反饋。
家長客戶端模塊主要包括數據處理與用戶管理兩個子模塊。
數據處理子模塊是基于兒童客戶端上傳至服務器端的運動統計數據,家長客戶端進行定時數據接收,并以圖表形式進行數據展示,根據提示信息,家長可以快捷清晰地了解到兒童的身體狀況。
用戶管理子模塊的注冊登錄功能可以確定唯一識別家長身份的標識,并可以存儲一些必要的信息,賬號綁定功能使得一個家長客戶端對應多名兒童賬號進行綁定,從而實現了對于兒童信息的獲取。

圖2 兒童客戶端模塊框架

圖3 家長客戶端模塊框架
網絡通信模塊主要包括如下三項功能。第一,兒童客戶端將信息封裝為JSON字符串,約定action為動作標識,將JSON字符串上傳到服務器,服務器經過Java后臺處理后將數據寫入數據庫,實現兒童運動數據的定時上傳。第二,服務器數據庫端建立Table{Children,Parents,Data}用來獲取 Android端上傳過來的JSON字符串信息,并將其分類錄入對應的表格中。第三,家長客戶端向服務器發送action為parents的JSON字符串,服務器查詢與家長綁定的兒童運動數據,將結果返回服務器端,服務器將結果通過HTTP協議返回給家長客戶端,從而使家長獲得兒童運動數據。
圖4為本系統的數據流程圖:

圖4 數據流程圖
在兒童客戶端中共有三個可以滑動的一級界面,如圖 5所示。其中圖 5(a)是“運動”界面圖,圖 5(b)是“監護”界面圖,圖5(c)是“我的”界面圖。在“運動”界面中,主要功能是對于健康數據的統計并給出評價。在“監護”界面中,可以顯示兒童在這一天中跌倒的次數并給出相應建議。底部有一個字樣為“進入”的按鈕,點擊可以進入電子圍欄的界面。“我的”界面中用于展示用戶的個人信息以及進行一些App的設置。

圖5 兒童客戶端界面圖
(1)健康數據收集
該模塊可對近七天內兒童行走的步數、消耗熱量、行走距離的綜合統計,并最終給出評級以顯示兒童的健康狀況,并以直方圖形式展示。
計步的實現主要是通過使用Android4.4新增的STEP_DETECTOR以及STEP_COUNTER傳感器。其中STEP_DETECTOR是計步傳感器,用于記錄激活后的步伐數。STEP_DETECTOR是步行檢測傳感器,用戶每走一步就觸發一次事件。STEP_DETECTOR通過分析加速度計的輸入識別用戶何時走步,每走一步都會觸發一個事件。
卡路里統計和距離統計基于用戶的一些個人信息進行計算。行走距離計算采用公式(1):

其中D/m表示行走距離,STEP_COUNTER為行走步數,L/m為步長。
卡路里消耗采用公式(2):

其中W/kg表示體重,D/km表示行走距離。在兒童的統計數據達到要求后,對星級進行累加,對兒童行為進行最終評級。
(2)跌倒檢測
跌倒檢測功能是利用Android內置的加速度傳感器accelerationSensor,仿照步數統計算法進行設計,并結合兒童運動的獨有特征實現。首先設計后臺服務類FallService,在OnCreate方法中通過函數getSystemService(SENSOR_SERVICE)獲取傳感器服務,并創建跌倒統計算法類FallCountDetector對象detector。之后注冊監聽器SensorEventListener,并在注冊監聽器的參數中設置監聽對象detector、設置傳感器類型TYPE_ACCELEROMETER、設置獲取傳感器信息的頻率SENSOR_DELAY_NORMAL。在具體計數算法FallCount-Detector中,設定數值medumValue為判斷跌倒的臨界值,實時監測在三個坐標軸x、y、z方向的加速度acceleration_x、acceleration_y、acceleration_z。若此三個方向上的加速度的絕對值存在一個或多個大于medumValue,則視為一次跌倒,并在跌倒總統計數(FALLING_STEP)的原值基礎上增加1,若不存在任一方向上的加速度絕對值大于medumValue,則視為一次普通震動,跌倒總統計數(FALLING_STEP)數值保持不變。
(3)地理圍欄
地理圍欄的功能是對兒童活動范圍進行限定,一旦越界則向家長報警,本功能在高德地圖API的基礎上進行開發。首先在地圖視圖所關聯的XML文件中添加MapView組件。通過AMap對象加載所有的地圖信息,并與MapView對象綁定,實現基礎地圖的顯示。
實例化一個MyLocationStyle的對象來進行定位的自定義,設置定位時顯示的圖標。調用AMap對象的setMy-LocationStyle方法,傳入MyLocationStyle對象,完成自定義。實例化AMapLocationClient對象,傳入上下文參數,進行定位初始化,并通過setLocationListener方法為該對象設置一個回調監聽,當位置發生改變時,執行回調中的函數。調用該對象的startLocation方法開始定位。第一次進行地圖加載時,獲取到當前位置信息,作為地理圍欄的中心,之后該中心不會改變,并自定義安全范圍。實例化CircleOption對象,傳入圍欄中心位置經緯度坐標centerLatlng和安全范圍的半徑,調用AMap對象的addCircle方法往地圖上添加一個自定義的圓形地理圍欄圖層。在位置變化的回調方法onLocationChanged中,參數為最新的位置信息AMapLocation對象。從此對象中獲取到最新定位點的經緯度坐標endLatlng,調用AMapUtils的靜態方法calculateLineDistance,傳入centerLatlng和endLatlng,計算出兒童當前位置到地理圍欄中心的距離。如果大于之前自定義的安全范圍的距離,則進行示警,發送示警信號到家長客戶端,通知家長采取相應措施。
家長客戶端實現了與兒童客戶端進行綁定、對于兒童健康數據的展示、對于兒童存在潛在危險性的示警、與兒童進行聯系等功能。每個家長可以綁定多個兒童,在家長客戶端進行注冊和綁定后,家長客戶端會將綁定的數據與用戶信息存儲在服務器端的數據庫中。家長客戶端會定期接收服務器端發送的兒童的多種健康數據,通過RecyclerView列表逐條展示;手機的通知欄中也通過Android中的Notification進行顯示。在兒童離開地理圍欄圈定的范圍后,家長客戶端會有示警提醒,包括彈出對話框與鈴聲報警。家長也可以使用界面中右下方的按鈕,通過Android中的broadcast發送廣播,直接使用手機中的撥號功能向兒童撥打電話,與兒童取得聯系。
圖6是家長客戶端界面圖,其中圖6(a)是通知欄提示圖,圖 6(b)是兒童健康數據顯示圖,圖 6(c)是撥號圖。
服務器數據庫端建立Table{Children,Parents,Data}用來獲取Android端上傳過來的JSON字符串信息,并將其分類錄入對應的表格中。其中Children表用于存儲兒童的基本信息,包括兒童的注冊ID、姓名、年齡、性別、體重、步長、綁定家長的ID、手機號等一系列信息;Parents表用于存儲家長的基本信息,包括家長的注冊ID、綁定兒童的ID、手機號等一系列信息;Data表則用于存儲兒童向家長端發送的實時健康數據與危險性評估情況的相關數據。兩個Android客戶端通過JSON字符串進行數據庫中數據的存儲與下載,兒童客戶端通過定時機制,一定時間定時向服務器發送數據,以更新數據庫數據,家長客戶端也通過定時機制,一定時間定時接收服務器的數據,以更新兒童的最新數據。此外,Children與Parents表通過主鍵與外鍵的約束以及一些驗證機制保證綁定信息的無誤性。

圖6 家長客戶端界面圖
本文設計了基于Android的兒童運動分析及監控系統,通過手機內置的傳感器節點對兒童運動數據進行測量,然后通過卡爾曼濾波對基礎數據進行處理,分析兒童運動狀態。同時,利用高德地圖SDK對兒童定位,實現了地理圍欄功能,可以充分滿足家長對兒童運動、安全方面監控的需求。
[1]王林清.兒童青少年對意外傷害認知和行為的調查分析[J].醫學動物防制,2006(11):787-789.
[2]至銘.兒童意外傷害安全防范要做好[J].江蘇衛生保健,2017(07):21.
[3]運動目標檢測研究意義及國內外現狀[R/OL].(2016,09,05)http://www.docin.com/p-1727702961.html