日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

计算机视觉--Python实现人体姿态估计

發(fā)布時間:2025/3/13 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机视觉--Python实现人体姿态估计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

參考:?在 Python 中使用機(jī)器學(xué)習(xí)進(jìn)行人體姿勢估計(jì)姿態(tài)檢測是計(jì)算機(jī)視覺領(lǐng)域的一個活躍研究領(lǐng)域。https://mp.weixin.qq.com/s/D_sTpTp_pkLeO2nrcjgpaA

?

什么是姿態(tài)估計(jì)?

姿態(tài)估計(jì)是一種跟蹤人或物體運(yùn)動的計(jì)算機(jī)視覺技術(shù)。這通常通過查找給定對象的關(guān)鍵點(diǎn)位置來執(zhí)行?;谶@些關(guān)鍵點(diǎn),我們可以比較各種動作和姿勢并得出見解。姿態(tài)估計(jì)在增強(qiáng)現(xiàn)實(shí)、動畫、游戲和機(jī)器人領(lǐng)域得到了積極的應(yīng)用。

目前有幾種模型可以執(zhí)行姿態(tài)估計(jì)。下面給出了一些姿勢估計(jì)的方法:

  • Open pose

  • Pose net

  • Blaze pose

  • Deep Pose

  • Dense pose

  • Deep cut

  • 選擇任何一種模型而不是另一種可能完全取決于應(yīng)用程序。此外,運(yùn)行時間、模型大小和易于實(shí)現(xiàn)等因素也可能是選擇特定模型的各種原因。因此,最好從一開始就了解你的要求并相應(yīng)地選擇模型。

    在本文中,我們將使用 Blaze pose檢測人體姿勢并提取關(guān)鍵點(diǎn)。該模型可以通過一個非常有用的庫輕松實(shí)現(xiàn),即眾所周知的Media Pipe。

    Media Pipe——Media Pipe是一個開源的跨平臺框架,用于構(gòu)建多模型機(jī)器學(xué)習(xí)管道。它可用于實(shí)現(xiàn)人臉檢測、多手跟蹤、頭發(fā)分割、對象檢測和跟蹤等前沿模型。

    Blaze Pose Detector?——大部分姿態(tài)檢測依賴于由 17 個關(guān)鍵點(diǎn)組成的 COCO 拓?fù)浣Y(jié)構(gòu),而Blaze姿態(tài)檢測器預(yù)測 33 個人體關(guān)鍵點(diǎn),包括軀干、手臂、腿部和面部。包含更多關(guān)鍵點(diǎn)對于特定領(lǐng)域姿勢估計(jì)模型的成功應(yīng)用是必要的,例如手、臉和腳。每個關(guān)鍵點(diǎn)都使用三個自由度以及可見性分?jǐn)?shù)進(jìn)行預(yù)測。Blaze Pose是亞毫秒模型,可用于實(shí)時應(yīng)用,其精度優(yōu)于大多數(shù)現(xiàn)有模型。該模型有兩個版本:Blazepose lite 和 Blazepose full,以提供速度和準(zhǔn)確性之間的平衡。

    Blaze 姿勢提供多種應(yīng)用程序,包括健身和瑜伽追蹤器。這些應(yīng)用程序可以通過使用一個額外的分類器來實(shí)現(xiàn),比如我們將在本文中構(gòu)建的分類器。

    你可以在此處了解有關(guān)Blaze Pose Detector的更多信息:?https://ai.googleblog.com/2020/08/on-device-real-time-body-pose-tracking.html

    2D 與 3D 姿態(tài)估計(jì)

    姿勢估計(jì)可以在 2D 或 3D 中完成。2D 姿態(tài)估計(jì)通過像素值預(yù)測圖像中的關(guān)鍵點(diǎn)。而3D姿態(tài)估計(jì)是指預(yù)測關(guān)鍵點(diǎn)的三維空間排列作為其輸出。

    為姿態(tài)估計(jì)準(zhǔn)備數(shù)據(jù)集

    我們在上一節(jié)中了解到,人體姿勢的關(guān)鍵點(diǎn)可以用來比較不同的姿勢。在本節(jié)中,我們將使用Media Pipe庫本身來準(zhǔn)備數(shù)據(jù)集。我們將拍攝兩個瑜伽姿勢的圖像,從中提取關(guān)鍵點(diǎn)并將它們存儲在一個 CSV 文件中。

    你可以通過此鏈接從 Kaggle 下載數(shù)據(jù)集:https://www.kaggle.com/niharika41298/yoga-poses-dataset

    該數(shù)據(jù)集包含 5 個瑜伽姿勢,但是,在本文中,我只采用了兩個姿勢。如果需要,你可以使用所有這些,程序?qū)⒈3植蛔儭?/p>

    import?mediapipe?as?mp
    import?cv2
    import?time
    import?numpy?as?np
    import?pandas?as?pd
    import?os
    mpPose?=?mp.solutions.pose
    pose?=?mpPose.Pose()
    mpDraw?=?mp.solutions.drawing_utils?#?For?drawing?keypoints
    points?=?mpPose.PoseLandmark?#?Landmarks
    path?=?"DATASET/TRAIN/plank"?#?enter?dataset?path
    data?=?[]
    for?p?in?points:
    ????????x?=?str(p)[13:]
    ????????data.append(x?+?"_x")
    ????????data.append(x?+?"_y")
    ????????data.append(x?+?"_z")
    ????????data.append(x?+?"_vis")
    data?=?pd.DataFrame(columns?=?data)?#?Empty?dataset

    在上面的代碼片段中,我們首先導(dǎo)入了有助于創(chuàng)建數(shù)據(jù)集的必要庫。然后在接下來的四行中,我們將導(dǎo)入提取關(guān)鍵點(diǎn)所需的模塊及其繪制工具。

    接下來,我們創(chuàng)建一個空的 Pandas 數(shù)據(jù)框并輸入列。這里的列包括由Blaze姿態(tài)檢測器檢測到的 33 個關(guān)鍵點(diǎn)。每個關(guān)鍵點(diǎn)包含四個屬性,即關(guān)鍵點(diǎn)的 x 和 y 坐標(biāo)(從 0 到 1 歸一化),z 坐標(biāo)表示以臀部為原點(diǎn)且與 x 的比例相同的地標(biāo)深度,最后是可見度分?jǐn)?shù)??梢娦苑?jǐn)?shù)表示地標(biāo)在圖像中可見或不可見的概率。

    count?=?0

    for?img?in?os.listdir(path):

    ????????temp?=?[]

    ????????img?=?cv2.imread(path?+?"/"?+?img)

    ????????imageWidth,?imageHeight?=?img.shape[:2]

    ????????imgRGB?=?cv2.cvtColor(img,?cv2.COLOR_BGR2RGB)

    ????????blackie?=?np.zeros(img.shape)?#?Blank?image

    ????????results?=?pose.process(imgRGB)

    ????????if?results.pose_landmarks:

    ????????????????#?mpDraw.draw_landmarks(img,?results.pose_landmarks,?mpPose.POSE_CONNECTIONS)?#draw?landmarks?on?image

    ????????????????mpDraw.draw_landmarks(blackie,?results.pose_landmarks,?mpPose.POSE_CONNECTIONS)?#?draw?landmarks?on?blackie

    ????????????????landmarks?=?results.pose_landmarks.landmark

    ????????????????for?i,j?in?zip(points,landmarks):

    ????????????????????????temp?=?temp?+?[j.x,?j.y,?j.z,?j.visibility]

    ????????????????data.loc[count]?=?temp

    ????????????????count?+=1

    ????????cv2.imshow("Image",?img)

    ????????cv2.imshow("blackie",blackie)

    ????????cv2.waitKey(100)

    data.to_csv("dataset3.csv")?#?save?the?data?as?a?csv?file

    在上面的代碼中,我們單獨(dú)遍歷姿勢圖像,使用Blaze姿勢模型提取關(guān)鍵點(diǎn)并將它們存儲在臨時數(shù)組“temp”中。

    迭代完成后,我們將這個臨時數(shù)組作為新記錄添加到我們的數(shù)據(jù)集中。你還可以使用Media Pipe本身中的繪圖實(shí)用程序來查看這些地標(biāo)。

    在上面的代碼中,我在圖像以及空白圖像“blackie”上繪制了這些地標(biāo),以僅關(guān)注Blaze姿勢模型的結(jié)果??瞻讏D像“blackie”的形狀與給定圖像的形狀相同。

    應(yīng)該注意的一件事是,Blaze姿態(tài)模型采用 RGB 圖像而不是 BGR(由 OpenCV 讀取)。

    獲得所有圖像的關(guān)鍵點(diǎn)后,我們必須添加一個目標(biāo)值,作為機(jī)器學(xué)習(xí)模型的標(biāo)簽。你可以將第一個姿勢的目標(biāo)值設(shè)為 0,將另一個設(shè)為 1。之后,我們可以將這些數(shù)據(jù)保存到 CSV 文件中,我們將在后續(xù)步驟中使用該文件創(chuàng)建機(jī)器學(xué)習(xí)模型。

    你可以從上圖中觀察數(shù)據(jù)集的外觀。

    創(chuàng)建姿勢估計(jì)模型

    現(xiàn)在我們已經(jīng)創(chuàng)建了我們的數(shù)據(jù)集,我們只需要選擇一種機(jī)器學(xué)習(xí)算法來對姿勢進(jìn)行分類。在這一步中,我們將拍攝一張圖像,運(yùn)行 blaze 姿勢模型(我們之前用于創(chuàng)建數(shù)據(jù)集)以獲取該圖像中人物的關(guān)鍵點(diǎn),然后在該測試用例上運(yùn)行我們的模型。

    該模型有望以高置信度給出正確的結(jié)果。在本文中,我將使用 sklearn 庫中的 SVC(支持向量分類器)來執(zhí)行分類任務(wù)。

    from?sklearn.svm?import?SVC
    data?=?pd.read_csv("dataset3.csv")
    X,Y?=?data.iloc[:,:132],data['target']
    model?=?SVC(kernel?=?'poly')
    model.fit(X,Y)
    mpPose?=?mp.solutions.pose
    pose?=?mpPose.Pose()
    mpDraw?=?mp.solutions.drawing_utils
    path?=?"enter?image?path"
    img?=?cv2.imread(path)
    img?=?cv2.cvtColor(img,?cv2.COLOR_BGR2RGB)
    results?=?pose.process(imgRGB)
    if?results.pose_landmarks:
    ????????landmarks?=?results.pose_landmarks.landmark
    ????????for?j?in?landmarks:
    ????????????????temp?=?temp?+?[j.x,?j.y,?j.z,?j.visibility]
    ????????y?=?model.predict([temp])
    ????????if?y?==?0:
    ????????????asan?=?"plank"
    ????????else:
    ????????????asan?=?"goddess"
    ????????print(asan)
    ????????cv2.putText(img,?asan,?(50,50),?cv2.FONT_HERSHEY_SIMPLEX,1,(255,255,0),3)
    ????????cv2.imshow("image",img)

    在上面的代碼行中,我們首先從 sklearn 庫中導(dǎo)入了 SVC(支持向量分類器)。我們已經(jīng)用目標(biāo)變量作為 Y 標(biāo)簽訓(xùn)練了我們之前在 SVC 上構(gòu)建的數(shù)據(jù)集。

    然后我們讀取輸入圖像并提取關(guān)鍵點(diǎn),就像我們在創(chuàng)建數(shù)據(jù)集時所做的那樣。

    最后,我們輸入臨時變量并使用模型進(jìn)行預(yù)測?,F(xiàn)在可以使用簡單的 if-else 條件檢測姿勢。

    模型結(jié)果

    從上面的圖像中,你可以觀察到模型已經(jīng)正確地對姿勢進(jìn)行了分類。你還可以在右側(cè)看到Blaze姿勢模型檢測到的姿勢。

    在第一張圖片中,如果你仔細(xì)觀察,一些關(guān)鍵點(diǎn)是不可見的,但姿勢分類是正確的。由于Blaze姿態(tài)模型給出的關(guān)鍵點(diǎn)屬性的可見性,這是可能的。

    結(jié)論

    姿勢檢測是機(jī)器學(xué)習(xí)領(lǐng)域的一個活躍研究領(lǐng)域,并提供了多種實(shí)際應(yīng)用。在本文中,我們嘗試開發(fā)一個這樣的應(yīng)用程序,并通過姿勢檢測來解決問題。

    我們了解了姿勢檢測和幾個可用于姿勢檢測的模型。出于我們的目的選擇了 blaze 姿勢模型,并了解了它相對于其他模型的優(yōu)缺點(diǎn)。

    最后,我們使用 sklearn 庫中的支持向量分類器構(gòu)建了一個分類器來對瑜伽姿勢進(jìn)行分類。為此,我們還構(gòu)建了自己的數(shù)據(jù)集,可以使用更多圖像進(jìn)一步擴(kuò)展。

    你也可以嘗試其他機(jī)器學(xué)習(xí)算法而不是 SVM,并相應(yīng)地比較結(jié)果

    總結(jié)

    以上是生活随笔為你收集整理的计算机视觉--Python实现人体姿态估计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。