上一期小編給大家介紹了和MediaPipe的相遇之路,本期小編將帶著大家一起來動手,如何打造一個屬于自己的手勢識別應用。
歡迎感興趣的小伙伴們到這里訪問MediaPipe中的手勢識別任務:
https://ai.google.dev/edge/mediapipe/solutions/vision/gesture_recognizer?hl=zh-cn
下面就讓我們開始今天的任務吧!
1模型在哪?
我們知道,一個AI應用最精華的部分就是他的模型,換句話來說,如果我們能拿到MediaPipe的模型文件,是不是就可以讓模型為我們所用了?說干就干。要不說還得是Google,真的是大方,直接貼上了用到的模型:
既然有了模型就成功了一大步了,而且還貼心的告訴了我們模型的輸入大小,讓我們下載下來看下,文件擴展名是.task,不要管他,直接解壓縮,我們會得到兩組模型,共四個:
歸屬于hand_gensture_recognizer的兩個:
以及歸屬于hand_landmarker的兩個:
2模型怎么用?
得到模型之后,萬里長征才剛剛開始。由于這個模型是依靠于MediaPipe來進行推理的,并沒有更多的信息來告訴我們這幾個模型是要怎么使用,接下來就需要我們根據一些直覺來進行分析了:
先來分析模型怎么用,根據文件命名,我們可以分析出:前兩個模型是負責手勢識別的,后兩個模型是進行手部檢測+手部關鍵點識別的,這么一看,好像有了點思路。算法流程看起來是先進行手部檢測,即首先檢測到手的位置,隨后在進行手勢識別。
那新的問題來了,landmark模型有什么作用呢?下面就讓我們先打開landmark模型看下他的輸入輸出結構:
我們可以確定,他的輸入是一張224x224大小的RGB圖像,然后輸出有四個維度,好消息是,模型里面很貼心的標上了輸出所代表的含義。從這里,我們可以知道模型本身可以識別出左右手、是否有手以及手部關鍵點,這里提供了兩種類型的關鍵點信息,一種是歸一化坐標,一種是世界坐標。那具體用哪一個,還要我們測試才能知道。
接下來打開手勢識別模型,先看一下gesture_embedder.tflite模型的輸入輸出結構:
他的輸入有三個,分別是hand,handedness,以及world_hand,輸出是一個128維的向量。看到這,是不是有些激動了?沒錯,這個輸入是不是和剛才landmark的模型名字很像。也就是說,剛才的landmark模型的輸出就是這里embed模型的輸入,是不是有種福爾摩斯的感覺了?
還沒有結束,還有個疑問?輸出這個128維的向量要怎么用?不要急,這里不是還有一個叫canned_gesture_classifier.tflite的模型:
不用小編多說,是不是細心的大家已經發現了端倪?輸入剛好是128維的向量,然后輸出是手勢的分類得分,具體是哪8類呢?mediapipe上已經告訴了我們:
0 - Unrecognized gesture, label: Unknown
1 - Closed fist, label: Closed_Fist
2 - Open palm, label: Open_Palm
3 - Pointing up, label: Pointing_Up
4 - Thumbs down, label: Thumb_Down
5 - Thumbs up, label: Thumb_Up
6 - Victory, label: Victory
7 - Love, label: ILoveYou
現在,我們已經分析出來了三個模型的作用,那么還剩一個叫做hand_detector.tflite的模型,他是干什么用的呢?
通過分析模型的輸入輸出,我們可以知道:這個模型的作用是為了檢測出圖像中的手部位置以及手部得分,那看起來一切都通順了。原來一個小小的手勢識別任務需要四個模型來實現,并且各個模型之間是串行的關系,一環套一環。每一個模型的輸出都要作為下一個模型的輸入來得到最終的手勢分類結果。
那么本期小編就為大家抽絲剝繭,分析出了整個手勢識別的模型處理關系,接下來我們就要實際進行模型轉換,讓他們為我們所用。提前預告下:
下一期小編將為大家帶來如何量化tflite模型的篇章!
-
手勢識別
+關注
關注
8文章
229瀏覽量
48344 -
AI
+關注
關注
88文章
35476瀏覽量
281207 -
模型
+關注
關注
1文章
3531瀏覽量
50564
原文標題:站在巨人肩膀上開發AI應用分享(二)
文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
評論