謝作如



機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、算法復雜度理論等多門學科,專門研究計算機怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構,使之不斷改善自身的性能,是人工智能的核心。
機器學習從詞面上理解就是讓機器進行“學習”的技術,其最基本的做法是讓計算機利用已有數據得出某種模型,并利用此模型預測結果。最近國內一線創客教師發布了一款開源硬件——掌控,掌控板支持Python語言,于是我們嘗試用它做了一個簡單的機器學習方面的案例——識別簡單手勢。
解決思路
市面上的手勢識別解決方案有很多,如利用數據手套或光學標記。數據手套由多個傳感器件組成,通過傳感器將用戶手的位置、手指的方向等信息傳送到計算機系統中。光學標記則需要戴在用戶手上,通過紅外線可獲得手指的各種變化。更高級的解決方案是對視頻采集設備拍攝到的包含手勢的圖像序列,通過計算機視覺技術進行處理,進而對手勢加以識別。
我們采取的方案是利用掌控板自帶的重力加速度傳感器。當用戶佩戴掌控完成一個固定手勢時,掌控會在空中沿著一定的軌跡運動,在整個過程中加速度不斷改變,將這個不斷改變的加速度數據記錄下來分析,可以發現同一種手勢的數據變化規律是相同的。基于這個原理,我們能夠將當前正在進行的手勢與事先“學習”過的手勢做實時對比,如果相似度較高,則判定識別成功。
判定手勢是否相似的算法,我們選擇了曼哈頓距離(Manhattan Distance)算法,因為實現起來比較簡單,也容易理解。曼哈頓距離算法先計算一系列數據對中每對數據差值的絕對值,并將這些值累加起來判斷數據之間的差異。曼哈頓距離中距離d的定義為:
當我們記錄下完成一個手勢的加速度數值后,可以得到時間(橫軸)-加速度(縱軸)的對應關系(如圖1)。通過圖1可以大致判斷出這是一個讓掌控加速運動的手勢。
錄入該手勢之后,我們再做一個手勢與其作對比(如圖2)。
根據曼哈頓距離的定義,兩個手勢之間的差異,可以等價于圖中陰影部分的面積大小(如圖3)。面積越大差異越大,面積越小則差異越小。
由此,我們可以通過此標準判斷一下圖4中a和b兩張圖的相似度。a圖的面積大于b圖,說明b圖與錄入的手勢更接近。
兩個手勢的圖形完全重合當然是不可能做到的。需要設置一個閾值,只要小于這個閾值,就表示兩個手勢是一致的。閾值設置太大會誤判,太小則容易導致難以正確識別。
硬件準備
手勢識別利用的是掌控板自帶的重力加速度傳感器,因此硬件設備只需要一塊掌控板即可。為了做手勢更加方便,建議使用電池供電,或者安裝供電擴展板、接小型充電寶。圖5為加了供電底板的掌控板。
解決過程
1.流程設計
掌控板要識別手勢,首先要錄制需識別的手勢數據,然后以此為模型判斷新手勢數據與錄制的手勢是否一致,即先學習,再識別,具體步驟如下:
①錄制動作。開機后,按住A鍵進入到動作錄制模式,錄入固定長度的動作,如在空中寫一個字母,將每個時間點的加速度記錄在一個原始數組中。錄制完成后,生成一個固定長度的原始數組。
②識別動作。完成動作后松開A鍵結束錄制,自動進入識別模式。再次在空中比劃手勢,每過一固定時間間隔錄入新的即時加速度,更新在樣本數組中。將樣本數組的每一個數值與原始數組對應的數值做差值,并取絕對值。
③結果判斷。將絕對值做累加,如果絕對值小于一定閾值則判定為動作被識別,即證明動作與之前錄入的動作相似,顯示屏會顯示“識別成功”,表示識別成功。
2.代碼編寫
用Python語言編寫手勢識別的代碼,核心還是“學習”和“識別”兩大功能,即實現按下A鍵時錄入動作的原始數據,松開A鍵默認進入識別模式。識別模式中要記錄實時時間戳,并將即時的加速度數據記錄下來,和原始數據做對比。下面為實現機器學習的關鍵代碼:
①導入掌控必要的庫以及數學運算的庫,如圖6。
②定義采樣率和數組長度,如圖7。
③按下A鍵時錄入動作的原始數據,如下頁圖8。
④錄入動作方差計算,如下頁圖9。
⑤默認進入識別模式并記錄實時時間戳,如下頁圖10。
⑥將即時的加速度數據記錄下來,并和原始數據做對比,如下頁圖11。
完整代碼可通過筆者博客或者DF創客社區索取。
3.實驗測試
將掌控握于手心,OLED屏朝外,方便查看提示消息。開啟電源后,按住A鍵,屏幕出現“開始記錄”,此時可以預先錄入一個手勢,如在空中比劃大寫字母A。錄入完畢后,屏幕顯示記錄完成。任意比劃時,屏幕一直顯示“正在識別……”,當比劃的手勢也是A時,屏幕將出現“識別成功”。
思考與總結
圍棋界Master的橫空出世,讓人們對機器學習充滿了敬畏,或將其想得過于神秘,或將其想得過于萬能。本案例通過Python語言讓一塊小小的智能硬件具有簡單的機器學習能力,掀開了機器學習的神秘面紗。雖然這是一個小數據環境下的淺層學習案例,但原理上完全符合機器學習的技術要求,編程實現也容易,大多數人都可以進行研究并實現。智能時代已然來到,學有余力且具備一定編程能力的中學生需要了解一些機器學習的相關知識,并且,借助智能硬件來一次真刀真槍的實操是很有必要的。
注:本案例也可以使用micro:bit實現,掌控板和micro:bit的Python代碼規范是一致的。