





摘要:借助基于多傳感器或云服務的目標跟隨方法成本較高,不利于普通場景下工業級目標跟隨應用的發展。結合移動設備發展現狀,文章設計了一種基于離線手部檢測的智能小車遙控系統,利用移動端設備自帶的攝像頭、藍牙模塊與運算能力在離線狀態下完成手部檢測,并將結果轉換為運動指令以實現靈活的遠程控制。該系統成本低廉,適用于STEM教具等場景。
關鍵詞:手部檢測;圖像識別;智能小車遙控系統;移動開發
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2024)31-0096-03
開放科學(資源服務)標識碼(OSID):
0 引言
在工業應用中,物體自動跟隨方案往往借助單一的超聲波模塊完成跟隨動作,但只能完成直線跟隨和障礙物跟隨動作,運動姿勢有限;而借助基于多種傳感器或基于云服務的目標跟隨方法(涉及目標記憶、目標位置感知、目標標定等工作要求)成本高昂,在智能小車STEM教具、日常行李箱跟隨等場景難以形成工業級的應用。目前,大多數移動設備已具備足夠的圖像傳感器和圖像處理能力,本文設計了一款充分利用手機性能的智能小車遙控系統,可利用攝像頭拍攝實時畫面,使用設備自身計算能力完成離線手部檢測并轉換為相應的車輛運動指令,通過藍牙模塊發送至小車端,無須增加額外的硬件模塊或云服務,有效降低物體跟隨及遙控的成本和開發難度。
1 整體設計
該遙控系統原理框圖如圖1所示,為滿足離線手部檢測需求,手部檢測模型將被部署在應用內,相機模塊采集的實時畫面被送入手部檢測模型開展推理計算,若檢測結果的置信度高于設定值,應用將會根據算法將其轉換為具體遙控指令并通過手機藍牙模塊發送至小車藍牙模塊;小車藍牙模塊通過串口將數據傳達給小車運動控制模塊驅動電機運動,使小車按照應用發出的遙控指令運動。
1.1 遙控應用總體設計
遙控系統需完成視頻拍攝、手部檢測及藍牙匹配、指令發送等工作,因此移動遙控應用由4大模塊構成,如圖2所示。
物體檢測模塊負責加載手部檢測模型、讀取設備攝像頭模塊采集的實時圖像數據,利用設備自身的計算能力提供手部檢測推理結果。收到推理結果后,前端模塊會顯示實時畫面與識別結果框;遙控服務模塊負責將推理結果轉換為遙控指令并控制藍牙信號發送。藍牙服務模塊負責與智能小車建立藍牙連接、執行發送遙控指令。
軟件工作流程如圖3所示。App啟動時須判斷移動設備是否具備攝像頭和藍牙模塊、用戶是否愿意提供攝像頭、藍牙和定位等模塊權限。在初始化階段,程序將設置圖像采集參數、加載手部檢測模型并設置應用界面。在檢測階段,以畫面幀為單位持續進行手部檢測工作。當用戶開啟遙控,如已成功創建藍牙連接,App會向小車發送遙控指令,如未匹配設備,則提醒用戶進行匹配。
1.2 手部識別
在iOS或Android操作系統體系下,部署機器學習模型需要借助特定軟件接口接收和輸出模型進行運算,TensorFlow Mobile框架[1]精簡了完整的TensorFlow 框架,去除分布式執行等對端設備無用的業務功能,僅保留核心計算功能,增加移動端操作系統應用支持,開發者可以部署符合自身業務需求的模型,通過接口調用模型反饋結果到應用層(軟件)。
由于遙控App根據手部檢測結果遙控小車運動,物體檢測模型只須精確識別手部即可。圖像分類遷移學習可以利用特定圖像數據集對CNNs的輸出層進行再訓練,在保留其他層權重不變的情況下,訓練所需時間較短,準確率與重新訓練整個網絡結果沒有太大差異,且重新訓練原有分類模型對數據集要求較低,為模型提供數千張的特定種類目標圖像即可獲得更優的輸出結果[2]。本文采用物體檢測模型ssd_mo?bilenet_v1_coco作為預訓練模型和經過處理的手部數據集進行遷移學習,得到了遙控系統中所使用的手部檢測模型,遷移學習可借助TensorFlow物體檢測API[3]完成。
1.2.1 手部數據集處理
EgoHands數據集[4]是美國印第安納大學IU計算機視覺實驗室提供的一個以手部畫面為中心的復雜交互場景下專用、免費數據集,該數據集以圖為單位記錄了一連串沿手部輪廓記錄的高精度值標注坐標,以matlab格式記錄。本文在該數據集的基礎上,通過計算將原輪廓型標注轉換為矩形識別標注以滿足遷移學習訓練數據集的格式要求。處理規則如下:一張圖內可能有多個手部,須依次處理;每個手部分別取輪廓型標注數據中的[minx,miny ]及[maxx,maxy ]為該手部矩形標注框左上角及右下角的坐標值。
1.2.2 模型訓練及結果
在API提供的遷移學習腳本中設定訓練與測試數據集文件路徑、分類標簽文件路徑、預訓練模型資源路徑及訓練輪數,執行腳本即可開始訓練。為了獲得穩定輸出效果,訓練輪數設為15萬輪。實驗中,約1萬步左右時模型loss逐步降至2.5,隨著訓練輪次增加在2.0 附近趨于穩定;經過測試集驗證,mAP@0.5IOU 為0.960 8,表明當前模型識別手部效果較好,可以將其部署在遙控應用中。此外,訓練所得的模型網絡計算圖結構model.ckpt文件還需凍結為可用于部署的pb格式。原訓練結果ckpt格式文件約90MB,經凍結操作后獲得pb格式文件僅23MB。
2 軟件實現
2.1 手部檢測模型推理與遙控指令生成
TensorFlowInferenceInterface 接口負責處理數據輸入輸出工作,接口利用模型圖Graph對象和名稱構建指定節點Operation對象,分別為一個輸入節點和四個輸出節點,輸出結果分別給出檢測物體識別框位置、分類信息、分類概率與物體數量信息。相機采集得到幀畫面為YUV格式,須先轉換為RGB格式像素圖對象送入網絡輸入節點,模型推理結果(識別種類和位置等信息)將返回至輸出節點。模型可以返回多個手部識別結果,為確保指令清晰,需選取概率數值最大的結果作為唯一輸出,因此在閱覽區至多只有一個結果框。如圖4所示,AB框為幀畫面中手部物體檢測結果矩陣框。實際情況中,AB框可能涉及多個區域,為得到明確的遙控指令,需利用AB框中心點(下稱中心點)坐標確定具體的指令。定義閱覽區起點坐標為(0,0),中心點坐標計算方法為:
Centralx = top + (button - top) /2
Centraly = left + (right - left) /2
遙控指令與中心點所在位置有關,規則如下:1)中心點在左部區域,即其坐標滿足(x < 150,y 任意),小車向左前方行駛;2)中心點在右部區域,即其坐標滿足(x > 330,y 任意),小車向右前方行駛;3)中心點在上方區域,即其坐標滿足(x ≥ 150,y ≤ 330),小車向正前方行駛;4)當中心點位于以上其他區域之外,即其坐標位于其他區域,小車后退。
2.2 消息傳遞機制
遙控App須監聽用戶點擊遙控按鈕操作、及時創建定時執行的遙控服務,還涉及手部檢測、遙控指令生成、根據藍牙連接狀態決定是否發送藍牙信號,這些涉及多個Activity、Service等組件及其后臺線程的通信,實現難度較大。EventBus事件驅動框架[5]使用訂閱/發布模式降低Activity、Service等組件的耦合度、消除復雜的依賴關系,是一種簡潔、開銷較低的實現方式。在該框架下,Activity和Service可同時具備事件發布者和訂閱者兩種身份;總線程會在發布者發布消息事件后將其轉發,注冊了相關事件的訂閱者即可接收到有關該消息事件的數據。依靠上述設計實現定時發送遙控信號功能相關方法如下:
1)在活動中注冊消息機制,利用定時任務方法發布EventBus消息事件。一旦監聽到用戶點擊遙控按鈕,當前活動將新增定時任務(發布定位事件,內含識別結果坐標和匹配設備信息)并指定發送間隔,使遙控服務定期執行任務。當用戶在界面點擊“開始遙控”按鈕,每3秒向EventBus總線程發布一次消息。
2)遙控服務在收到定位消息事件后,將其攜帶的中心點坐標轉換為遙控指令、發送藍牙信號并以消息彈窗形式顯示指令內容和當前連接狀態。該服務需要先獲得手部檢測結果和藍牙連接設備信息才能執行后續操作,因此需要將這兩種信息包裝成一個消息事件供活動和服務共同使用。
2.3 藍牙服務
在現實場景中,小車端需使用低功耗藍牙模塊來獲得更低的電量消耗,因此應用需與小車建立BLE藍牙連接,通過應用全局類單例對象創建并管理藍牙管理器,根據小車藍牙模塊設定相應服務與特征UUID。當用戶在藍牙匹配彈出對話框中選中智能小車并確認連接,藍牙服務將與選中的BLE 藍牙設備創建GATT連接。GATT連接單次發送的數據不能超過20 字節[6];智能小車端運動控制模塊需要Hex類型數據,因此遙控指令(字符串)需轉換為Hex字符串后再轉為Byte數組,當數據超過20 字節時需分批(以20字節為一組)發送,該過程將循環執行直至全部發送完畢。
3 測試結果
通過測試驗證,手機藍牙功能正常開啟時在應用內點擊“藍牙遙控”按鈕可以查看手機5~10米范圍內所有BLE藍牙設備,可選擇小車藍牙設備并成功匹配;檢測到手部時閱覽區會出現手部識別框,閱覽區下方會出現對應的遙控指令提示文字。如圖5所示,手部識別框中心點在閱覽區下方時小車遙控指令為“go down”。通過串口調試助手進一步檢查小車藍牙模塊所收到的數據,確認App向小車藍牙模塊發送的數據均被正常接收且遙控指令與人物手部運動情況一致。結合多種手部姿態和復雜背景進一步開展測試,發現App仍能實時識別出不同姿態的手部并給出相應運動方向的遙控指令。目前,該模型在測試設備上完成單幀檢測時間在250ms~380ms之間浮動,FPS 均值約為3。
4 結束語
本文設計并實現了一種基于離線手部檢測模型的智能小車遙控系統,該系統利用移動端設備硬件模塊可實現離線手部檢測,并將其轉換為智能小車的運動指令,通過低功耗藍牙連接發送至小車端。該方法經過適當調整(如通過遷移學習調整識別物體種類)可適配工作性質類似的應用場景,對推動基于圖像識別的遙控低成本工具發展有一定的實際意義。
參考文獻:
[1] TAKAWALE H C,THAKUR A.Talos app:on-device machine learning using TensorFlow to detect android malware[C]//2018Fifth International Conference on Internet of Things:Systems,Management and Security.October 15-18,2018,Valencia,Spain.IEEE,2018:250-255.
[2] JEFF TANG.Intelligent Mobile Projects with TensorFlow[M].Birmingham, UK: Packt Publishing Ltd., 2018.
[3] AL-AZZOA F,MOHAMMED A,MILANOVAB M.Human related-health actions detection using android camera based on TensorFlow object detection API[J].International Journal of Ad?vanced Computer Science and Applications,2018,9(10):9-23.
[4] BAMBACH S,LEE S,CRANDALL D J,et al.Lending A hand:de?tecting hands and recognizing activities in complex egocentric interactions[C]//2015 IEEE International Conference on Com?puter Vision (ICCV). December 7-13, 2015, Santiago, Chile.IEEE,2015:1949-1957.
[5] Greenrobot. EventBus: Events for Android[EB/OL].[2023-10-20].https://greenrobot.org/eventbus/.
[6] Punch Through. How GAP and GATT Work-Bluetooth Low En?ergy Basics[EB/OL]. [2023-10-20]. https://punchthrough. com/products/bean/guides/everything-else/how-gap-and-gattwork.
【通聯編輯:代影】