于方軍 山東省淄博市博山區山頭中心學校
侯鵬 山東省淄博市博山區實驗中學
孫麗君 山東省淄博第二中學
計算機視覺主要研究的是讓計算機認識人和物,把拍攝的物體數字化后,通過算法計算機學會認識物體,把人體數字化后計算機也能認識人類,更好地服務于人類。例如,計算機學會了人臉識別的算法,我們在坐火車時,不用取票刷臉就能進入高鐵站;學會檢測手部關鍵點可以用手勢控制設備;當檢測到肩部數據點坐標和膝蓋數據點坐標比較接近時,判斷出他可能在蹲下身體。這類算法統稱為人體關鍵點檢測,常用的能進行人體關鍵點檢測的開源算法模型有OpenPose、MMPose、MediaPipe等,其工作過程都是通過算法檢測出人體有代表性的關鍵點,再對這些關鍵點進行判斷。
以MediaPipe中的姿態、人臉、手勢識別為例,MediaPipe借助一個輕量級的卷積神經網絡架構,分別利用姿勢(MediaPipe Pose)、面部(MediaPipe Face Mesh)和手部(MediaPipe Hands)關鍵點模型,生成總共500多個關鍵點(身體姿勢33個,臉部468個、手部21個,如圖1所示),運算速度快,可以用它完成如健身追蹤和手語識別、舞蹈和健身應用等。下面,我們從手勢識別入手,了解人體關鍵點檢測工作過程,并借助手勢識別實現一個手勢控制燈的硬件應用實例,再通過采集手部關鍵點數據作為數據集,訓練一個手勢識別的神經網絡,通過手勢控制開源硬件制作的小車運動。

圖1 關鍵點檢測圖片(MediaPipe官網)
利用采集到的手部關鍵點數據,結合開源硬件,可以實現簡單的手勢控制燈,硬件選用arduino板,用pinpong庫進行控制。
1.獲取手部關鍵點坐標,通過如下頁圖2所示的代碼讀取手部關鍵點4(大拇指尖)、關鍵點8(食指尖)的x、y坐標,MediaPipe用landmark函數,可以讀取食指尖關鍵點坐標,同理可以用landmark讀取拇指尖坐標,用食指和拇指的位置坐標作為控制量,只要拇指尖的x、y坐標和食指尖x、y坐標的差值小于5,就認為兩個手指尖接觸,此時點亮LED燈。

圖2 手指尖關鍵點坐標讀取及代碼應用
2.用Python控制開源硬件arduino板的11腳輸出,從而控制燈的亮滅。這里選用的是pinpong庫,用pip install pinpong可以方便安裝該庫,使用時需要先定義好輸出腳,本例中定義11腳為輸出腳,運行代碼如圖3所示,根據實時采集到的手指關鍵點坐標,控制接在arduino板11腳的燈亮滅。

圖3 手勢控制開關燈代碼
這個案例是對MediaPipe提供的訓練好的模型的一個簡單應用,如果要訓練特定的手勢識別,通過這種方式則難以完成。所以,可以自己設計一個神經網絡模型,并用采集到的數據訓練它,讓計算機學習、認識各種特定手勢,幫助我們更好地理解基于數據的機器學習算法是如何工作的,這其中包括數據采集、搭建神經網絡、模型訓練、模型應用等過程。
從數據中學習的過程,就像生活中教幼兒識圖的過程,教師會從一堆圖片中挑出一張“蘋果”,不斷地給幼兒讀“蘋果”讓他認識,再挑出一張“桔子”讓他認識,然后任意挑一張讓他判斷是什么,這些圖片就是學習用的數據。所以,在教給計算機認識手勢時需要先采集一些手勢信息,在CPU模式下為了提高訓練速度,可以采用手部關鍵點的數據訓練,MediaPipe Hands已經把人手圖像抽象為21個數據點,用這些數據點的信息進行訓練可以大大提高模型訓練效率,同時也能幫助學生理解神經網絡如何通過數據進行學習。
1.采集信息構建數據集,首先做一個手勢指示方向,學習需要的數據為:圖片、帶數據點圖片、方向標簽、對應采集序號(如下表)。

圖片帶關鍵點信息圖片標簽 Stop(停止) Up(上) Down(下) Left(左) Right(右)序號 0 1 2 3 4images/BZ_85_1109_2139_2268_2584.png
采集左手信息,握拳代表原地不動,用食指朝上代表向上,食指朝下代表向下,食指朝右代表向右,拇指朝左代表向左,每種手勢可以從不同角度采集20張圖片,用keypoint.csv保存數據點相對坐標信息,第一列記錄是手勢標簽信息,如0代表stop停止,也就是攥拳時手指信息。后面42個信息代表手部21個特征點,每個特征點記錄x、y兩個相對坐標信息。上頁圖4顯示了同一個手勢的多次數據采集的過程,并可以作為后續分析的基礎數據。

圖4 手指數據點信息
可以用keypoint_classifier_label.csv來記錄標簽信息,手工添加該信息,進而決定神經網絡模型的分類標簽數,如圖5所示。在采集模式下,按下對應序號完成手勢拍照,采集一定數量的照片。

圖5 分類標簽信息
2.搭建神經網絡,用keras構架的sequential模型搭建一個六層神經網絡(如圖6),在輸入、輸出層中間是兩個全連接層(Dense)和兩個防止過擬合的dropout層。

圖6 Keras搭建的神經網絡
3.訓練認知模型。設置好各種訓練參數后,就可以開始進行訓練了,經過測試,core i5處理器每訓練一個epoch用時不到1秒,在幾分鐘之內就可以完成訓練(如圖7),當回調函數callbacks監控的準確率不再改進時停止訓練,在訓練了455個epoch后,識別準確率達到了0.9913。

圖7 模型訓練代碼
4.模型部署應用。定義好小車arduino板上的端口10、11腳控制左輪,12、13控制右輪,對應連到驅動板L298N的4個輸入腳IN1-IN4,當神經網絡檢測到攝像頭采集的視頻圖像是“up”手勢時小車前進,是“down”手勢時小車后退,以此類推,如圖8所示。

圖8 手勢控制小車
綜上所述,對于中學人工智能課的開設,筆者認為需要有數據采集、模型搭建、訓練模型等基本過程,不能只停留在對結果的體驗上,這樣才能有利于學生計算思維的培養,幫助學生更深刻地認知數字化信息的本源,在此基礎上結合前期的創客活動,把“造物”的學習提升到造“智能”物的更高階段。