Mediapipe
安裝Mediapipe
- 打開Anaconda prompt
- 檢查環境和python運行環境是否一致(默認base環境,不用切換)
- 輸入命令行
pip install mediapipe==0.9.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
Mediapope完成手部關鍵點檢測
手部檢測
- 創建對象(加載模型參數) mp.solutions.hands.Hands()
- 圖像通道更換(BGR --> RGB) cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
- 獲得手部標志 result = hand.process(frame_rgb)
- 獲得手部關鍵點 result.multi_hand_landmarks
- 獲得左手關鍵點 hand_landmarks = result.multi_hand_landmarks[0]
- 繪制樣式 mp.solutions.drawing_utils.draw_landmarks
- 參數1 樣式繪制的圖像
- 視頻捕捉的圖像 frame
- 參數2 左手關鍵點
- hand_landmarks
- 參數3 連接點
- cnn = mp.solutions.hands_connections.HAND_CONNECTIONS
- 參數4 關鍵點樣式
- lm_style = mp.solutions.drawing_styles.DrawingSpec()
- 參數5 連接線樣式
- cnn_style = mp.solutions.drawing_styles.DrawingSpec(color=(255, 0, 0))
- 參數1 樣式繪制的圖像
視頻捕捉
- 初始化手部檢測屬性
- self.hand = HandProcess()
- 打開攝像頭 cap = cv2.VideoCapture(0)
- 0 表示打開本地攝像頭
- 1 2 3 外接攝像頭
- 路徑/播放視頻
- 循環一幀一幀讀取圖像 while cap.isOpened():
- 獲得圖像 retval, frame = cap.read()
- 手部檢測 self.hand.process(frame)
- 顯示圖像 cv2.imshow(‘frame’, frame)
- 等待顯示 key = cv2.waitKey(25)
- if key == ord(‘z’): break
- 釋放攝像頭 cap.release()
- 釋放顯示窗口 cv2.destroyAllWindows()
動作識別分析
- 準備數據(標準動作/標簽)
- 錄制視頻,某個動作的視頻幀較多(50幀),抽取出(5幀)作為標準的動作
- 視頻保存一幀一幀圖像 OpenCV
- 間隔時間保存
- 根據標簽提取特征(向量vector)
- 保存提取出來的特征(db_feats)
- 當前的動作(圖像/某幀)提取特征(feat)
- 當前的feat和已存儲的db_feats進行比較
- 范式/距離
- 余弦定理 v1和v2作比較 cos 0-1 (1為最相似)
- 模塊分析
- 視頻采集 video_process
- 循環一幀一幀讀取圖像 capture()
- 繼承修改 process() 用于 pose_rec 調用識別
- 動作識別 pose_rec
- 存放 frame_feat 對象
- 調用 recognize() 進行識別,獲得 cal_similarity() 預測動作
- 提取圖像特征 frame_feat
- 獲得關鍵點 get_pose_landmark
- 獲得圖像特征 get_frame_feat
- 加載標準數據庫 load_db_feat
- 相似度比較 cal_similarity
- 視頻采集 video_process