欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Python中通過(guò)機(jī)器學(xué)習(xí)實(shí)現(xiàn)人體姿勢(shì)估計(jì)

 更新時(shí)間:2021年12月29日 11:17:10   作者:woshicver  
姿態(tài)檢測(cè)是計(jì)算機(jī)視覺(jué)領(lǐng)域的一個(gè)活躍研究領(lǐng)域。這篇文章將為大家介紹在Python中如何利用機(jī)器學(xué)習(xí)進(jìn)行人體姿勢(shì)估計(jì),感興趣的小伙伴可以了解一下

姿態(tài)檢測(cè)是計(jì)算機(jī)視覺(jué)領(lǐng)域的一個(gè)活躍研究領(lǐng)域。你可以從字面上找到數(shù)百篇研究論文和幾個(gè)試圖解決姿勢(shì)檢測(cè)問(wèn)題的模型。

之所以有如此多的機(jī)器學(xué)習(xí)愛(ài)好者被姿勢(shì)估計(jì)所吸引,是因?yàn)樗膽?yīng)用范圍很廣,而且實(shí)用性很強(qiáng)。

在本文中,我們將介紹一種使用機(jī)器學(xué)習(xí)和 Python 中一些非常有用的庫(kù)進(jìn)行姿勢(shì)檢測(cè)和估計(jì)的應(yīng)用。

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

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

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

1.Open pose

2.Pose net

3.Blaze pose

4.Deep Pose

5.Dense pose

6.Deep cut

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

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

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

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

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

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

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

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

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

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

你可以通過(guò)此鏈接從 Kaggle 下載數(shù)據(jù)集

該數(shù)據(jù)集包含 5 個(gè)瑜伽姿勢(shì),但是,在本文中,我只采用了兩個(gè)姿勢(shì)。如果需要,你可以使用所有這些,程序?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ù)集的必要庫(kù)。然后在接下來(lái)的四行中,我們將導(dǎo)入提取關(guān)鍵點(diǎn)所需的模塊及其繪制工具。

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

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ú)遍歷姿勢(shì)圖像,使用Blaze姿勢(shì)模型提取關(guān)鍵點(diǎn)并將它們存儲(chǔ)在臨時(shí)數(shù)組“temp”中。

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

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

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

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

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

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

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

該模型有望以高置信度給出正確的結(jié)果。在本文中,我將使用 sklearn 庫(kù)中的 SVC(支持向量分類(lèi)器)來(lái)執(zhí)行分類(lèi)任務(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 庫(kù)中導(dǎo)入了 SVC(支持向量分類(lèi)器)。我們已經(jīng)用目標(biāo)變量作為 Y 標(biāo)簽訓(xùn)練了我們之前在 SVC 上構(gòu)建的數(shù)據(jù)集。

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

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

模型結(jié)果

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

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

結(jié)論

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

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

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

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

到此這篇關(guān)于在Python中通過(guò)機(jī)器學(xué)習(xí)實(shí)現(xiàn)人體姿勢(shì)估計(jì)的文章就介紹到這了,更多相關(guān)Python機(jī)器學(xué)習(xí) 人體姿勢(shì)估計(jì)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python matplotlib 繪圖 和 dpi對(duì)應(yīng)關(guān)系詳解

    python matplotlib 繪圖 和 dpi對(duì)應(yīng)關(guān)系詳解

    這篇文章主要介紹了python matplotlib 繪圖 和 dpi對(duì)應(yīng)關(guān)系詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • pytorch實(shí)現(xiàn)邏輯回歸

    pytorch實(shí)現(xiàn)邏輯回歸

    這篇文章主要為大家詳細(xì)介紹了pytorch實(shí)現(xiàn)邏輯回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • django商品分類(lèi)及商品數(shù)據(jù)建模實(shí)例詳解

    django商品分類(lèi)及商品數(shù)據(jù)建模實(shí)例詳解

    這篇文章主要介紹了django商品分類(lèi)及商品數(shù)據(jù)建模實(shí)例代碼內(nèi)容,需要的朋友們學(xué)習(xí)參考下。
    2020-01-01
  • Python中一些自然語(yǔ)言工具的使用的入門(mén)教程

    Python中一些自然語(yǔ)言工具的使用的入門(mén)教程

    這篇文章主要介紹了Python中一些自然語(yǔ)言工具的使用的入門(mén)教程,本文來(lái)自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python實(shí)現(xiàn)免費(fèi)音樂(lè)下載器

    Python實(shí)現(xiàn)免費(fèi)音樂(lè)下載器

    本文主要為大家介紹了通過(guò)Python實(shí)現(xiàn)的免費(fèi)音樂(lè)下載器,文中的示例代碼講解詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,需要的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • python3.10及以上版本編譯安裝ssl模塊的詳細(xì)過(guò)程

    python3.10及以上版本編譯安裝ssl模塊的詳細(xì)過(guò)程

    最近搞安裝ssl模塊每天都弄到很晚,所以這里給大家整理下,這篇文章主要給大家介紹了關(guān)于python3.10及以上版本編譯安裝ssl模塊的詳細(xì)過(guò)程,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Python裝飾器詳情

    Python裝飾器詳情

    這篇文章主要介紹了Python裝飾器,裝飾器Decorator從字面上理解,就是裝飾對(duì)象的器件,其的特點(diǎn)是特點(diǎn)是函數(shù)是作為其參數(shù)出現(xiàn)的,裝飾器還擁有閉包的特點(diǎn),下面來(lái)看看文中的具體內(nèi)容
    2021-11-11
  • 一文搞懂關(guān)于?sys.argv?的詳解

    一文搞懂關(guān)于?sys.argv?的詳解

    sys.argv?其實(shí)就是一個(gè)列表,里邊需要用戶傳入的參數(shù),關(guān)鍵就是要明白這參數(shù)是從程序外部輸入的,而非代碼本身的什么地方,要想看到它的效果就應(yīng)該將程序保存了,從外部來(lái)運(yùn)行程序并給出參數(shù),通過(guò)本文學(xué)習(xí)你將明白?sys.argv很多知識(shí),感興趣的朋友一起看看吧
    2023-01-01
  • 淺談Python接口對(duì)json串的處理方法

    淺談Python接口對(duì)json串的處理方法

    今天小編就為大家分享一篇淺談Python接口對(duì)json串的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python之tkinter進(jìn)度條Progressbar用法解讀

    Python之tkinter進(jìn)度條Progressbar用法解讀

    這篇文章主要介紹了Python之tkinter進(jìn)度條Progressbar用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評(píng)論