【OpenVINO™教學】土炮體感控制系統

作者:許哲豪 Jack

2006 年 11 月任天堂推出新一代電玩主機「Wii」,同時搭配具有「重力感測器(或稱線性加速度計)」的搖桿,讓玩電動不再只有香菇頭和按鍵,而是可以透過揮動手把來體驗更仿真的運動類遊戲,如網球、桌球等,從此開啟「體感遊戲」新世代。

雖然後續有更多廠商加入,甚至加入了陀螺儀(或稱角加速度器)來偵測手把轉動角度、速度,還有利用地磁感測器來感知玩家面對的方向使得體感遊戲更加逼真,但玩家對於手上握著的那個手把仍感到有些累贅。

2010 年 11 月微軟為了挽救 Xbox360 的銷售業績推出了「Kinect」,這項劃時代的產品讓玩家從此拋開手把,只需擺動肢體就能操作遊戲中的虛擬人物或物件。這項技術主要結合了一個紅外線雷射發射器(產生光斑)、一個紅外線攝影機及一個普通的彩色攝影機,經過複雜計算後就能得出場景中各項物件的深度(距離)資訊,進而分析出玩家的骨架(頭、手、腳)位置及姿勢,如此即可精準控制遊戲的進行。

也正因有這項便宜(約六千多台幣)又好用的工具誕生,且可同時偵測多人(最多六人)的動作,所以有更多的互動遊戲及應用裝置產生。雖然後來微軟及其它廠商陸續推出改良產品,並將市場延伸至簡易型 3D 物件及室內環境掃描用途,隨著風潮淡去,2017 年微軟已正式停止生產這項產品。

好姨說:「為什麼?為什麼?為什麼讓我用到一套這麼好用的體感互動工具,以後我用不到怎麼辦?」(星爺食神經典橋段)。各位看倌請不用擔心,我幫大家找到了一個解決方案,只要用使用一組網路攝影機加上 Intel 的 OpenVINO™ 開源軟體套件包中的 human-pose-estimation 預訓練模型就可以辦到了。

星爺說:「只要有 OpenVINO™,人人都可是互動之神」。對!你沒聽錯,連 Kinect 這樣的深度感測器都不用,不管你是用 CPU、GPU、VPU(神經運算棒)都可以一次搞定。

食神橋段 vs. OpenVINO™人體姿態估測模型執行結果(圖片來源:Jack提供)

人體姿態定義

當然以上是比較搞笑的說法,以 2D 人體姿態估測是無法完全取代像 Kinect 這類深度感測器所產生的 3D 骨架(skeleton)分析,不過對大多數的姿態估測及互動應用應該還是游刃有餘的,接下來就先幫大家說明一下什麼是 2D 姿態估測及如何應用。

一般來說人的姿態是包括 3D(上下左右前後)位置資訊,但被拍成 2D 照片或視頻後,自然失去深度(前後位置)資訊,所以僅能就人的肢體重要關節(關鍵)點位置進行分析,進而建立人體骨架及姿態。

目前最常見的 2D 姿態估測關鍵點開放資料集包括微軟 COCO(17點),CMU OpenPose(18/25點),MPII(16點),AI Challenge(14點),LSP(14點),FLIC(9點),本次要使用的為卡內基梅隆大學(CMU)感知計算實驗室所開源的 OpenPose 18 點骨架資料格式(如下圖a)。除此之外這個資料集還提供另三種輸出格式,用於表示人體骨架(25點)、臉部動作(70點)及手部動作(22點),如下圖所示。

OpenPose支援輸出格式,(a)類COCO 18點,(b) BODY 25點,(c) 臉部70點,(d)手部22點(圖片來源

此次會用到的 OpenPose 18 關鍵點格式和常用的微軟 COCO 17 關鍵點格式非常相似,最主要差別是編號序順不同及 OpenPose 多了脖子點作人體中心點。如有需要相互轉換時,可自行轉換。

MS COCO:(17點)

0:鼻子、1:左眼、2:右眼、3:左耳、4:右耳、5:左肩、6:右肩、7:左肘、8:右肘、9:左腕、10:右腕、11:左臀(腰)、12:右臀(腰)、13:左膝、14:右膝、15:左踝、16:右踝。

CMU OpenPose:(18點)(如上圖a)

0:鼻子、1:脖子、2:右肩、3:右肘、4:右腕、5:左肩、6:左肘、7:左腕、8:右臀(腰)、9:右膝、10:右踝、11:左臀(腰)、12:左膝、13:左踝、14:左眼、15:右眼、16:左耳、17:右耳。

人體姿態估測實作

接下來開始說明如何使用 Intel OpenVINO™ 結合 OpenPose 預訓練模型「human-pose-estimation-0001」來完成「土炮體感控制系統」。還沒有安裝 OpenVINO™ 的朋友可以參考我的上一篇文章「【OpenVINO™教學】土炮影像實例分割型智慧監控系統」,這裡還是使用 Win 10 搭配 OpenVINO™ 2019 R2 環境執行,如果需要在 Linux 環境開發的,請自行參考官網提供安裝程序。

首先利用 OpenVINO™ 工具包的下載工具下載預訓練好的模型「human-pose-estimation-0001」,更進一步說明及使用方法可參考官方文件(source1source2)。

完成下載後,會在指定路徑下得到三種格式(INT8、FP16、FP32)已優化過 IR 中介檔(bin、xml),可直接給 OpenVINO™ 的推論引擎(Inference Engine)使用,不須再進行模型優化器(Model Optimizer)動作,其檔案存放路徑結構如下所示。

由於 OpenVINO™ 在運作時要引用很多路徑,所以執行編譯及執行前要先設定工作環境,只需依下列指令操作即可完成工作環境設定。

目前 OpenVINO™ 提供的範例原始碼預設會在下列路徑:

本範例為 C++ 程式,這裡使用 Visual Studio 2017 進行編譯,預設所有展示用的程式範例專案檔 Demos.sln 會在下面路徑。

本專案中共包含 22 個子項目,而 human_pose_estimation_demo 即為本次範例。如果想要修改內容時,記得以系統管理員身份執行 VS2017,以免因範例程式在 C:\Program Files (x86) 下而無法直接編輯。如想直接使用,那進行重建(編譯)後即可得到執行檔 human_pose_estimation_demo.exe,預設會生成在下面路徑。

參數說明:

-i 輸入影像方式

目前這個範例可支援二種視頻輸入方式,一種是直接從網路攝影機,直接設定 -i cam 即可,預設為第 0 號攝影機。另一種為從視頻檔案輸入,由於底層是利用 OpenCV 的 VideoCapture 讀取視頻影像,所以目前能支援的視頻格式不多,主要是以 *.avi, *.mp4 為主,可設定 -i xxx.mp4。

-m 模型優化中介檔 .xml 所在路徑

一般來說推論計算數值精度可分為 FP32、FP16 及 INT8,而所需運算時間也隨精度降低(推論速度提昇),但通常推論正確率也會隨之略減。運算時 CPU 及 GPU 三種精度都可使用,但 VPU(神經運算棒 NCS1、NCS2)則能選擇 FP16 格式運行,要特別注意不要選錯。設定時如 -m \使用者指定路徑\Transportation\human_pose_estimation\mobilenet-v1\dldt\FP16\human-pose-estimation-0001.xml。

-d 運算裝置名稱

可設為 CPU、GPU 和 MYRIAD,而 MYRIAD 就是 VPU,或稱神經運算棒,不管是 NCS 一代或二代皆設為 MYRIAD 即可,例如 -d MYRIAD。如果執行時未插入神經運算棒至 USB,則程式會直接中斷。

實驗結果

接下來我們就測試一下這個範例帶來的效果。這裡使用四種測試裝置,分別是:

  1. CPU:Intel i7-8950 8GB RAM
  2. GPU:Intel UHD Graphics 630
  3. NCS1:Movidius (Intel) Neural Compute Stick(一代)
  4. NCS2:Intel Neural Compute Stick 2(二代)

首先以視頻影像做為輸入進行測試,分別測試不同裝置在不同精度下運算速度及人體姿態估測結果。為方便大家測試,我們直接從 YOUTUBE 下載了一段微軟 Kinect Dance 的測試影片(1280×720 30fps),並抽取其中五小段作為此次測試及比較依據,相關影片可直接到 GITHUB 下載。

這裡利用其中一小段影片測試,結果如下圖所示。大致上可看出姿態估測部份幾乎沒差,主要差異在運算速度,這裡使用 FPS(每秒多少影格)作為單位,數值越高表示反應速度越快。若能達到 30 FPS 以上則已達一般影片播放速度,滿足即時處理的需求。

視頻影像在不同裝置及不同數值精度下運算速度及人體姿態估測結果(圖片來源:Jack提供)

從這些測試結果來看,目前在 CPU 部份,FP32 及 FP16 運算速度差別不大,表示 CPU 在處理浮點數上並沒有充份利用硬體特性(可能是軟體函式庫造成),但運算數值精度降至 INT8 時,運算速度明顯提升快一倍。

而 GPU 部份,可以看出在浮點數計算上明顯有差異,所以 FP16 運算速度較 FP32 快了約 50%。奇怪的是 INT8 竟然和 FP32 接近,這是因為 GPU 本來就不支援整數運算,所以應該是函式庫自動把整數轉成 FP32 計算造成的結果。

再來是神經運算棒部份,NCS2 在硬體規格上優於 NCS1,所以理所當然運算速度較快,但這次只快了約兩倍,和之前「土炮影像實例分割型智慧監控系統」測試影像分割時快了接近四倍明顯變慢許多,猜想是上次為單張靜態影像,而這次是連續影像,中間多了很多處理(存取)步驟導致。

再來測試不同影片內容運算速度差異,為方便測試起見,這裡統一使用 GPU FP16 的條件來對五小段影片進行測試,這五段影片有單人、多人、動作簡單、大幅動作、輕微遮蔽及嚴重遮蔽。測試後發覺準確度極高,只有在嚴重遮蔽或移動速度過快(影像局部模糊)時會有些失誤,大體上來看是非常不錯的。不同影像內容在計算速度上會有些許差異,如下圖所示。

這裡發現一個有趣的地方,就是影片長度較長(影格數較多)的,其運算速度會越來越快,不知是否是因影片被緩衝進記憶體中,所以減少一些存取時間?

不同視頻運算速度比較(圖片來源:Jack提供)

更完整實際結果如下方 GIF 所示。

人體姿態估測實驗結果圖(圖片來源:Jack提供)

人體姿態估測實驗結果圖(圖片來源:Jack提供)

人體姿態估測實驗結果圖(圖片來源:Jack提供)

人體姿態估測實驗結果圖(圖片來源:Jack提供)

人體姿態估測實驗結果圖(圖片來源:Jack提供)

最後是測試網路攝影機,這裡使用 800×600 的解析度,分別以 CPU 及 GPU 進行測試,測試時故意擺了一樣的姿勢方便比較運算差異。這裡的運算速度明顯比前面測試快了許多,主要原因是輸入視頻解析圖下降。測試時雖然只有半身,但還是可以很正確判斷出來,由此得知這個預訓練好的模型真的很不錯。

寫到這裡大家應該已經可以充份感受到 OpenPose 的威力了,只需 OpenVINO™ 加上一台網路攝影機就能搞定「土炮體感控制系統」。雖然目前看起來運算速度似乎有點慢,但對於簡單型的應用已綽綽有餘,只要善用圖像上所提取到的關節點座標,就可輕鬆開發體感遊戲及各種人機互動應用了。如果想要更深入了解的朋友,可自行研讀範例源碼。

小結

透過 2D 影像配合 OpenVINO™ 來進行人體姿態估測已不再是困難的事,除了電玩遊戲、人機互動外,未來還可應用在無人商店消費者行為或智慧教室的學習行為分析等等,更多應用就等著大家一起集思廣義了。

(責任編輯:楊子嫻)

許 哲豪

工作經驗超過二十年,主要專長機電整合、電腦視覺、人機互動、人工智慧、專利分析及新創輔導。曾任機電整合工程師、機器視覺研發副理、技轉中心商業發展經理。目前擔任多家公司兼任技術顧問並積極推廣實境互動相關技術。
主持歐尼克斯實境互動工作室(OmniXRI):
http://omnixri.blogspot.com
許 哲豪

Author: 許 哲豪

工作經驗超過二十年,主要專長機電整合、電腦視覺、人機互動、人工智慧、專利分析及新創輔導。曾任機電整合工程師、機器視覺研發副理、技轉中心商業發展經理。目前擔任多家公司兼任技術顧問並積極推廣實境互動相關技術。 主持歐尼克斯實境互動工作室(OmniXRI): http://omnixri.blogspot.com

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *