OliveX 是一家專注于健身領(lǐng)域軟件研發(fā)的公司,自第一款產(chǎn)品上線以來已經(jīng)服務(wù)超過 200 萬用戶。
我們都知道健身軟件的主要使用人群是青年和中年人,但隨著智能手機(jī)的普及,越來越多老年人也在使用智能手機(jī),而我們希望能夠也幫助這些老年人。
在眾多老年人的健身運(yùn)動中,流行最廣的項(xiàng)目之一是健身氣功八段錦,因此我們希望可以從跟這個運(yùn)動入手來幫助老年人養(yǎng)成健身習(xí)慣,以及在運(yùn)動中減少受傷的可能性。同時(shí),我們希望借助于人工智能的輔助,識別老年人進(jìn)行八段錦運(yùn)動的姿勢,并且有針對性的提供反饋。
目標(biāo)
八段錦是一種在中國古代發(fā)明的健身方法,由八種肢體動作組成,內(nèi)容包括肢體運(yùn)動和氣息調(diào)理。八段錦依據(jù)人體的骨骼、關(guān)節(jié)、內(nèi)臟器官等生理結(jié)構(gòu)創(chuàng)編的,對外在的自我鍛煉和內(nèi)在的調(diào)理達(dá)到內(nèi)外兼修的目的。
八段錦和五禽戲、太極拳等,都是中國民間廣為流傳的健身方法。2003 年,中國國家體育總局把重新編排后的八段錦等健身法作為“健身氣功”的內(nèi)容向全國推廣。
“智能八段錦”這個項(xiàng)目的最終目標(biāo)是希望可以創(chuàng)造一個人工智能的八段錦助手,而這個基于人工智能的助手可以幫助用戶來判斷他們練習(xí)的動作做的是否標(biāo)準(zhǔn),以及對他們的八段錦動作進(jìn)行打分。我們希望通過引入人工智能的相關(guān)功能,改進(jìn)傳統(tǒng)的單純依照視頻鍛煉的方法。為普通的鍛煉提供更多的交互性和反饋,我們也希望這些功能可以幫助老年人更加有效的練習(xí)八段錦。
用戶進(jìn)行八段錦鍛煉的主要場所是在戶外,因此我們的 App 需要運(yùn)行在移動端。
用戶在進(jìn)行八段錦鍛煉時(shí),通常需要觀看視頻教程,以及播放口令錄音。
我們希望通過前置攝像頭采集用戶運(yùn)動數(shù)據(jù),并給出反饋。
而對于姿勢識別部分,我們希望我們的算法可以做到以下幾點(diǎn):
該算法需要可以識別到每一個具體的姿勢。
該算法可以對姿勢的正確程度做出評分。
該算法可以對不正確的姿勢提出改正意見。
技術(shù)分析
技術(shù)調(diào)研
基于以上的需求,我們希望可以選擇的深度學(xué)習(xí)框架可以支持以下幾點(diǎn):
對移動端有良好的支持,其模型推理可以在中低端手機(jī)上流暢運(yùn)行。
友好的接口設(shè)計(jì)以及豐富的調(diào)試工具。
成熟的技術(shù)社區(qū)支持。
通過技術(shù)調(diào)研,我們發(fā)現(xiàn) TensorFlow 完全滿足于我們的需求,并且我們驚喜的發(fā)現(xiàn) Google 還開源了PoseNet 的算法庫,并且實(shí)現(xiàn)了在 JavaScript 平臺的示例程序。這樣,Google 即幫助我們完成了初期的人體骨骼的識別工作,而且由于在 JavaScript 平臺的性能表現(xiàn),讓我們充分相信我們的運(yùn)動識別算法也可以在移動端運(yùn)行。
注:PoseNet 算法庫
https://github.com/tensorflow/tfjs-models/tree/master/PoseNet
算法方案
姿勢識別
在項(xiàng)目預(yù)研階段,我們對現(xiàn)有的運(yùn)動識別算法進(jìn)行了調(diào)研。目前主流的動作類型識別算法基本都是基于連續(xù)的視頻序列幀。雖然其準(zhǔn)確率達(dá)到我們需求,但是整體網(wǎng)絡(luò)都比較復(fù)雜,其推斷計(jì)算 需要大量的計(jì)算資源。而我們的目標(biāo)是希望運(yùn)行在移動設(shè)備上,因此,我們不得不在識別準(zhǔn)確度 和計(jì)算速度之間進(jìn)行權(quán)衡。
我們采取的策略是首先利用 PoseNet 獲取人體骨骼信息,然后再基于人體骨骼的序列進(jìn)行具體姿勢和運(yùn)動類型的識別。而通過 PoseNet 獲取的骨骼信息只有 17 個關(guān)鍵點(diǎn)的位置信息,相比較于一幅圖像,其需要處理的數(shù)據(jù)已經(jīng)大大減少了。下圖所示即為算法的處理流程,首先我們利用 PoseNet 將輸入的視頻轉(zhuǎn)換為連續(xù)的骨骼數(shù)據(jù),然后在骨骼數(shù)據(jù)的基礎(chǔ)上按照關(guān)鍵姿勢進(jìn)行分類。
姿勢識別算法流程
關(guān)鍵姿勢的定義
在確定策略之后,首先需要定義我們需要識別的關(guān)鍵姿勢。于是我們將具體的姿勢識別轉(zhuǎn)化為一個分類問題。下圖就是我們根據(jù)八段錦的教程定義的部分關(guān)鍵姿勢。
分類的算法我們采用的是傳統(tǒng)的 DNN 網(wǎng)絡(luò)進(jìn)行計(jì)算,通過多次的調(diào)整參數(shù)和優(yōu)化訓(xùn)練數(shù)據(jù),最后的計(jì)算結(jié)果還算不錯,在實(shí)際應(yīng)用中完全符合我們的需求。
移動設(shè)備的挑戰(zhàn)
除了模型的開發(fā)外,我們的下一步挑戰(zhàn)是把所有的模型應(yīng)用在移動設(shè)備上,包括主流的兩個手機(jī)平臺 iOS 和 Android。在剛開始的時(shí)候,我們第一個方案是使用 TensorFlow Mobile。由于我們需要檢測實(shí)時(shí)動作, TensorFlow Mobile 的效率并不足以滿足我們的需要。
正當(dāng)我們致力于解決運(yùn)算效率的問題的時(shí)候, TensorFlow 發(fā)布了 Lite 版本。TensorFlow Lite 在移動平臺上的效率有了重大突破
以下是我們在不同的移動設(shè)備上測試的運(yùn)算時(shí)間
根據(jù)現(xiàn)在的情況,在大部分 Android 手機(jī)上都無法實(shí)時(shí)進(jìn)行運(yùn)動檢測。而在所有的模型當(dāng)中,我們采用的 PoseNet 的運(yùn)算最為復(fù)雜,也用時(shí)最長,占總運(yùn)算時(shí)間的 95% 以上。所以我們根據(jù)需要,再重新調(diào)整 PoseNet 的輸入大小和參數(shù),與此同時(shí)我們重新訓(xùn)練了姿勢分類算法來彌補(bǔ)輸入精度的缺失。最后我們用的是 337 x 337 RGB 輸入的大小,而且在 Android 上使用了 0.5 作為 MobileNet 的寬度參數(shù)。
因?yàn)槲覀儺a(chǎn)品的目標(biāo)用戶群為老人家,他們所使用的手機(jī)配置普遍較低。雖然在 PoseNet 參數(shù)調(diào)整后,效能有明顯的改善,但在低配置手機(jī)上仍然未如理想。所以我們便著手研究使用手機(jī)中的 GPU 來加速計(jì)算。而恰好這時(shí) TensorFlow Lite GPU delegate (experimental) 推出,節(jié)省了我們大量的研發(fā)時(shí)間。在 GPU 中,算法的運(yùn)算效率也得到大幅提升。
以下是我們在調(diào)整 PoseNet 參數(shù)后在不同的移動設(shè)備上測試 Lite 和 Lite GPU 的運(yùn)算時(shí)間。
因?yàn)榘硕五\中的動作相對較慢,所以我們在使用 TensorFlow Lite GPU delegate (experimental) 后,大部分市面上的手機(jī)都可以正常使用。
成果及展望
我們最終成功的在 iOS 以及 Android 平臺上完成了八段錦項(xiàng)目,并且在用戶測試中得到了不少積極的反饋。利用姿勢的識別,我們提供了引導(dǎo)模式,幫助八段錦新手一步一步的跟著老師進(jìn)行鍛煉。對于經(jīng)常鍛煉八段錦的用戶,我們提供了評分反饋等功能。目前“智能八段錦”這個應(yīng)用可以在蘋果的 App Store 和 Google Play 上下載到。
與此同時(shí),OliveX 還在積極探索人體姿勢識別在其他健身運(yùn)動中的使用。我們發(fā)現(xiàn)在日常很多健身運(yùn)動和八段錦一樣,姿勢的正確與否非常重要。正確的姿勢可以更好的保護(hù)身體不受損傷,以及更好的提高運(yùn)動效率。因此我們希望能將在八段錦項(xiàng)目中的姿勢識別和糾正的算法應(yīng)用在其他的運(yùn)動場景。
-
智能手機(jī)
+關(guān)注
關(guān)注
66文章
18331瀏覽量
178708 -
人工智能
+關(guān)注
關(guān)注
1787文章
46060瀏覽量
234968
原文標(biāo)題:人體動作識別在智能八段錦 App 中的實(shí)踐
文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論