2023-07-09|閱讀時間 ‧ 約 17 分鐘

MediaPipe結合Grasshopper進行互動設計

互動裝置
為了強化步行感知的創造與圍塑,對於環境本身的危險因素,可以透過街道設施的設計與檢驗,提高安全性。但針對若在環境安全的心理危險感知,該如何解決現存公共空間存在的潛在危險。危險感知通常來自心理層面的情緒知覺或認知,設計上該如何介入已被填滿的都市。根據筆者分析,這種具時間性、特定族群、情緒感知的街道改善建議,並非從實際環境的基礎設施與場景改善就能解決。經筆者調查,儘管街道安全指數很高,但感知的恐懼仍無法被消除。好比在寬敞明亮且安全無人商場,有時仍深感恐懼。
現階段增設都市設施做為安全感提升裝置有多種困難,本篇提出虛擬設施以及結合都市既有設施的想法。利用攝影機是街道的眼睛,攝影機的存在除了讓沿街面店家的安全得到保障,路人也因為受到監視而感到安全。隨著穿戴式裝置近年產品發布,更細緻維護人體感知的設備產生。筆者希望透過街頭攝影機、姿勢追蹤等科技,創造MR互動裝置,形成都市感知輔助的虛擬設施。本篇文章想針對攝影機如何捕捉骨架、將實體環境偵測點加入現階段建築學子使用之參數軟體Grasshopper,做階段性紀錄與分享。

現階段Mediapipe的實務應用
《An Integrated Real-Time Hand Gesture Recognition Framework for Human-Robot Interaction in Agriculture》(整合式農業領域中用於人機互動的即時手勢識別框架)是一篇探討在農業領域中用於人機互動的即時手勢識別框架的論文(Vasileios Moysiadis 2022)。
該論文提出了一個綜合的即時手勢識別框架,旨在促進農業領域中的人機互動。該框架基於深度學習技術,結合了手部姿勢檢測、關鍵點提取和手勢分類等關鍵步驟。研究團隊使用基於深度卷積神經網絡(CNN)的方法訓練模型,使其能夠準確地檢測和識別手部姿勢。改善農業領域中的人機互動體驗,提高農業生產效率具有重要意義。
人機互動的即時手勢識別框架/圖片來源:https://www.mdpi.com/2076-3417/13/4/2700
人機互動的即時手勢識別框架/圖片來源:https://www.mdpi.com/2076-3417/13/4/2700
手勢辨識/圖片來源:https://www.mdpi.com/2076-3417/13/4/2700
Mediapipe Holistic全身辨識體感玩超級瑪莉
此案例為一個上傳至Youtube的實驗性影片,展示使用Mediapipe Holistic(一種全身姿勢識別技術)進行體感控制的超級馬里奧遊戲玩法。 Mediapipe Holistic是一種基於計算機視覺和機器學習的技術,能夠實時捕捉和識別人體的關鍵點和姿勢。通過該技術,玩家可以使用自己的身體動作來控制超級馬里奧遊戲中的角色。
這種體感玩法可以讓玩家更加身臨其境地參與遊戲,通過運動和動作來與遊戲進行互動,增強遊戲的樂趣和體驗。玩家可能需要使用自己的手臂、腿部或全身來模擬角色的跳躍、移動或其他動作,以完成遊戲中的任務和關卡。
這種基於Mediapipe Holistic的全身辨識體感玩法結合了計算機視覺和人機交互的技術,為遊戲提供了一種創新的操控方式。它可以帶來更加沉浸式的遊戲體驗,讓玩家能夠更直接、自然地參與到遊戲中。這種技術的應用展示了計算機視覺和人機交互領域在遊戲娛樂方面的潛力和創新(法蘭斯 2023)。
截圖影片來源:https://www.youtube.com/watch?v=1ZjmQEVsHdE

姿勢追蹤與改變感知的關係
為何以姿勢追蹤(或稱捕捉骨架,本文以姿勢追蹤稱呼)作為街道裝置的策略。姿勢的改變是可以影響人的情緒的。在《Standing tall and standing wide: Body positions have effects on how people feel》這篇研究中,主要探討身體姿勢如何影響人們情感狀態。研究者進行了一系列實驗,重點關注了兩種不同的身體姿勢:站得高和站得寬。他們通過觀察參與者在這兩種姿勢下的反應來研究姿勢與情感之間的關聯。
研究結果呈現,站得高的姿勢(例如挺胸、站直)與積極情感有關聯。參與者在站得高的姿勢下,所偵測的情緒報告有更高的自信感和力量感,同時表現出更積極的情緒狀態。這種姿勢可能有助於提升自尊和自信,以及改善情感體驗。
因此,這項研究表明身體姿勢可以對人們的情感狀態產生影響。站得高的姿勢有助於提升積極情感和自信感,而站得寬的姿勢則與風險承受能力和動機相關。這些發現有助於我們更好地理解身體姿勢與情感之間的關係,同時也為身體語言和情感調節領域的研究提供了新的視角(Körner 2022)。
由此研究可以理解,透過擴大姿勢,可以影響人的情緒。因此在情緒緊張的情況下,改變姿勢也是改善情緒的方式。故希望以姿勢追蹤的方式呈現互動裝置,透過裝置擾動人對於行走路徑的常態,改變姿態而轉換情緒。

實作與測試
筆者預期利用街道攝影機與互動模型連接,先依照文獻回顧的建議,整理成四個預期框架作為銜接方式。
1. 影機連接:將街道攝影機與嵌入式系統連接起來,以便獲取攝影機的影像。
2. 影像處理:使用適當的視訊處理庫或框架(例如OpenCV)讀取和處理攝影機的視訊流,成為MediaPipe提供處理的輸入數據(Fortes 2022)。
3. 整合MediaPipe:使用MediaPipe框架的相關模塊和功能,將錄影的影像傳遞到MediaPipe進行視覺感知處理。可以使用MediaPipe提供的預訓練模型,進行姿勢追蹤(Fortes 2022)。
4. 分析和應用:根據MediaPipe的輸出結果,進行分析進到虛擬模型裡面。
想針對從第四點延伸應用。利用media pipe抓取由點與線所構成的人體骨架,將MediaPipe框架整合到Grasshopper建模軟體中進行模型測試,並回測研究預期目的。進行的步驟如下:
1. 匯入MediaPipe模型:在Grasshopper中,使用Python程式語言,匯入MediaPipe模型。使用MediaPipe的功能和類別來處理及時影像數據。Mediapipe Holistic 集合了人體姿勢、面部標誌和手部追蹤三種模型與相關的演算法,可以偵測身體姿勢、臉部網格、手掌動作,完整偵測則會產生543 個偵測節點 (33 個姿勢節點、468、個臉部節點和每隻手、21 個手部節點 )。(教育學習網)
Mediapipe 全身偵測 ( Holistic )圖片來源:https://steam.oxxostudio.tw/category/python/ai/ai-mediapipe-holistic.html.
2. 設定資料輸入和輸出:在Grasshopper中,利用plug-in: Ghowl作為資料輸入和輸出的介面,以便將MediaPipe框架的數據與grasshopper的互動模型進行交互。本研究是以攝影鏡頭捕獲即時視頻、載入預訓練模型、將資料傳遞給MediaPipe進行處理,並將結果的點位顯示在Grasshopper中,座位模型的控制點。
Mediapipe 全身偵測 ( Holistic )/圖片來源:https://steam.oxxostudio.tw/category/python/ai/ai-mediapipe-holistic.html.
3. 設定資料輸入和輸出:在Grasshopper中,利用plug-in: Ghowl作為資料輸入和輸出的介面,以便將MediaPipe框架的數據與grasshopper的互動模型進行交互。本研究是以攝影鏡頭捕獲即時視頻、載入預訓練模型、將資料傳遞給MediaPipe進行處理,並將結果的點位顯示在Grasshopper中,座位模型的控制點。
設定資料輸入和輸出/圖片來源:筆者自行繪製
4. 測試和除錯:確認確保資料能夠正確地從Grasshopper傳遞給MediaPipe,並正確地處理和顯示互動模型結果。
測試和除錯/圖片來源:筆者自行繪製
# source: https://steam.oxxostudio.tw/category/python/ai/ai-mediapipe-pose.html
# source: https://github.com/yucheno/opencv2gh/blob/master/opencv2GH.py
# 按 q 跳出

import mediapipe as mp
import cv2

# 設定 UDPsocket 與 pickle(專門用於python的json)
import socket
import json
def UDP_client(IP, port, message):
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.sendto(bytes(message, 'utf-8'), (IP, port))

設定銜接端口,銜接ghowl,請調整成自己的IP
IP = "127.0.0.1"
port = 5003
# 輸出資料


# 偵測骨架 並輸出 socket 等待接收
mp_drawing = mp.solutions.drawing_utils          # mediapipe 繪圖方法
mp_drawing_styles = mp.solutions.drawing_styles  # mediapipe 繪圖樣式
mp_pose = mp.solutions.pose                      # mediapipe 姿勢偵測

cap = cv2.VideoCapture(0)
#以上cap = cv2.VideoCapture(0)需視鏡頭位置調整(0)(1)(2)
# 啟用姿勢偵測
with mp_pose.Pose(
        min_detection_confidence=0.5,
        min_tracking_confidence=0.5) as pose:

    if not cap.isOpened():
        print("Cannot open camera")
        exit()
    while True:
        ret, img = cap.read()
        if not ret:
            print("Cannot receive frame")
            break
        # webcam 為 4:3 縮小尺寸,加快演算速度
        img = cv2.resize(img, (640, 480))
        img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)   # 將 BGR 轉換成 RGB
        results = pose.process(img2)                  # 取得姿勢偵測結果
        # 根據姿勢偵測結果,標記身體節點和骨架
        mp_drawing.draw_landmarks(
            img,
            results.pose_landmarks,
            mp_pose.POSE_CONNECTIONS,
            landmark_drawing_spec=mp_drawing_styles.get_default_pose_landmarks_style())

        # 使用 pickle 匯出為字串
        all = {'data': []}
        if results.pose_landmarks:
            for id, lm in enumerate(results.pose_landmarks.landmark):
                all['data'].append({
                    'x': lm.x,
                    'y': lm.y,
                    'z': lm.z,
                })

        outputjson = json.dumps(all, indent=4)
        UDP_client(IP, port, outputjson)

        cv2.imshow('oxxostudio', img)
        if cv2.waitKey(5) == ord('q'):
            break     # 按下 q 鍵停止
cap.release()
cv2.destroyAllWindows()

資料來源:

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.