一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過Opencv+Openpose實現(xiàn)體姿態(tài)檢測

新機器視覺 ? 來源:CSDN博主我與nano ? 2023-05-22 10:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

通過一個偶然機會,我了解到了人體姿態(tài)解算,在學(xué)習(xí)K210之余,我便想著通過opencv實現(xiàn)這個功能,查找了很多資料,發(fā)現(xiàn)可以利用opencv+openpose實現(xiàn),接著我又開始找一些資料,在pycharm上部署。

前言

人體姿態(tài)估計的一個有趣應(yīng)用是 CGI(computer graphic image,一種電影制造技術(shù))應(yīng)用。如果可以檢測出人體姿態(tài),那么圖形、風(fēng)格、特效增強、設(shè)備和藝術(shù)造型等就可以被加載在人體上。

通過追蹤人體姿態(tài)的變化,渲染的圖形可以在人動的時候“自然”地與人“融合”。姿態(tài)估計的一個有趣應(yīng)用是在交互游戲中追蹤人體對象的運動。

比較流行的 Kinect 使用 3D 姿態(tài)估計(采用 IR 傳感器數(shù)據(jù))來追蹤人類玩家的運動,從而利用它來渲染虛擬人物的動作。

應(yīng)用:

用于檢測一個人是否摔倒或疾病

用于健身、體育和舞蹈等的自動教學(xué)

用于理解全身的肢體語言(如機場跑道信號、交警信號等)

用于增強安保和監(jiān)控

一、環(huán)境配置

pycharm2021.2.2

pycharm是一個很好用的軟件,剛開始我們必須要配置相應(yīng)的環(huán)境,當(dāng)然你使用我主頁里那篇模型訓(xùn)練的環(huán)境也可以,在你運行的時候系統(tǒng)會提示你缺少了什么環(huán)境,并讓你安裝,你直接安裝即可。這里我就不過多的贅述了。

1.導(dǎo)入文件

07251b6c-f77e-11ed-90ce-dac502259ad0.png

在pycharm上導(dǎo)入相應(yīng)的文件后,你可以直接點擊運行,系統(tǒng)會提示你缺少了什么環(huán)境,缺少什么就安裝什么,通過終端使用pip安裝即可。

需要的留下郵箱即可,我發(fā)給你。

2.具體代碼

# To use Inference Engine backend, specify location of plugins:
# export LD_LIBRARY_PATH=/opt/intel/deeplearning_deploymenttoolkit/deployment_tools/external/mklml_lnx/lib:$LD_LIBRARY_PATH
import cv2 as cv
import numpy as np
import argparse


parser = argparse.ArgumentParser()
parser.add_argument('--input', help='Path to image or video. Skip to capture frames from camera')
parser.add_argument('--thr', default=0.2, type=float, help='Threshold value for pose parts heat map')
parser.add_argument('--width', default=368, type=int, help='Resize input to specific width.')
parser.add_argument('--height', default=368, type=int, help='Resize input to specific height.')


args = parser.parse_args()


BODY_PARTS = { "Nose": 0, "Neck": 1, "RShoulder": 2, "RElbow": 3, "RWrist": 4,
        "LShoulder": 5, "LElbow": 6, "LWrist": 7, "RHip": 8, "RKnee": 9,
        "RAnkle": 10, "LHip": 11, "LKnee": 12, "LAnkle": 13, "REye": 14,
        "LEye": 15, "REar": 16, "LEar": 17, "Background": 18 }


POSE_PAIRS = [ ["Neck", "RShoulder"], ["Neck", "LShoulder"], ["RShoulder", "RElbow"],
        ["RElbow", "RWrist"], ["LShoulder", "LElbow"], ["LElbow", "LWrist"],
        ["Neck", "RHip"], ["RHip", "RKnee"], ["RKnee", "RAnkle"], ["Neck", "LHip"],
        ["LHip", "LKnee"], ["LKnee", "LAnkle"], ["Neck", "Nose"], ["Nose", "REye"],
        ["REye", "REar"], ["Nose", "LEye"], ["LEye", "LEar"] ]


inWidth = args.width
inHeight = args.height


net = cv.dnn.readNetFromTensorflow("graph_opt.pb")


cap = cv.VideoCapture(args.input if args.input else 0)


while cv.waitKey(1) < 0:
 ? ?hasFrame, frame = cap.read()
 ? ?if not hasFrame:
 ? ? ? ?cv.waitKey()
 ? ? ? ?break


 ? ?frameWidth = frame.shape[1]
 ? ?frameHeight = frame.shape[0]
 ? ?
 ? ?net.setInput(cv.dnn.blobFromImage(frame, 1.0, (inWidth, inHeight), (127.5, 127.5, 127.5), swapRB=True, crop=False))
 ? ?out = net.forward()
 ? ?out = out[:, :19, :, :] ?# MobileNet output [1, 57, -1, -1], we only need the first 19 elements


 ? ?assert(len(BODY_PARTS) == out.shape[1])


 ? ?points = []
 ? ?for i in range(len(BODY_PARTS)):
 ? ? ? ?# Slice heatmap of corresponging body's part.
 ? ? ? ?heatMap = out[0, i, :, :]


 ? ? ? ?# Originally, we try to find all the local maximums. To simplify a sample
 ? ? ? ?# we just find a global one. However only a single pose at the same time
 ? ? ? ?# could be detected this way.
 ? ? ? ?_, conf, _, point = cv.minMaxLoc(heatMap)
 ? ? ? ?x = (frameWidth * point[0]) / out.shape[3]
 ? ? ? ?y = (frameHeight * point[1]) / out.shape[2]
 ? ? ? ?# Add a point if it's confidence is higher than threshold.
 ? ? ? ?points.append((int(x), int(y)) if conf > args.thr else None)


  for pair in POSE_PAIRS:
    partFrom = pair[0]
    partTo = pair[1]
    assert(partFrom in BODY_PARTS)
    assert(partTo in BODY_PARTS)


    idFrom = BODY_PARTS[partFrom]
    idTo = BODY_PARTS[partTo]


    if points[idFrom] and points[idTo]:
      cv.line(frame, points[idFrom], points[idTo], (0, 255, 0), 3)
      cv.ellipse(frame, points[idFrom], (3, 3), 0, 0, 360, (0, 0, 255), cv.FILLED)
      cv.ellipse(frame, points[idTo], (3, 3), 0, 0, 360, (0, 0, 255), cv.FILLED)


  t, _ = net.getPerfProfile()
  freq = cv.getTickFrequency() / 1000
  cv.putText(frame, '%.2fms' % (t / freq), (10, 20), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0))


  cv.imshow('OpenPose using OpenCV', frame)

這里便是主函數(shù)的代碼。

3.效果展示

這副圖片便是識別的效果,幀率還是很不錯的。

三、效果優(yōu)化

這個幀率雖然可以,但是效果屬實有點拉跨。教我K210的學(xué)長便指導(dǎo)我進行優(yōu)化改進,這里附上學(xué)長的連接

1.具體代碼


import cv2
import time
import mediapipe as mp
from tqdm import tqdm


# 導(dǎo)入solution
mp_pose = mp.solutions.pose




mp_drawing = mp.solutions.drawing_utils




pose = mp_pose.Pose(static_image_mode=False,
      #  model_complexity=1,
          smooth_landmarks=True,
      #    enable_segmentation=True,
          min_detection_confidence=0.5,
          min_tracking_confidence=0.5)




def process_frame(img):
  # BGR轉(zhuǎn)RGB
  img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)


  results = pose.process(img_RGB)


  # 可視化
  mp_drawing.draw_landmarks(img, results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
  # look_img(img)


  # mp_drawing.plot_landmarks(results.pose_world_landmarks, mp_pose.POSE_CONNECTIONS)


  #   # BGR轉(zhuǎn)RGB
  #   img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  #
  #   results = hands.process(img_RGB)


  #   if results.multi_hand_landmarks: # 如果有檢測到手
  #
  #     for hand_idx in range(len(results.multi_hand_landmarks)):
  #       hand_21 = results.multi_hand_landmarks[hand_idx]
  #       mpDraw.draw_landmarks(img, hand_21, mp_hands.HAND_CONNECTIONS)


  return img


cap = cv2.VideoCapture(1)


# 打開cap
cap.open(0)


# 無限循環(huán),直到break被觸發(fā)
while cap.isOpened():
  # 獲取畫面
  success, frame = cap.read()
  if not success:
    print('Error')
    break


  ## !!!處理幀函數(shù)
  frame = process_frame(frame)


  # 展示處理后的三通道圖像
  cv2.imshow('my_window', frame)


  if cv2.waitKey(1) in [ord('q'), 27]:
    break




cap.release()




cv2.destroyAllWindows()

2.效果展示

效果簡直太好了

總結(jié)

到這里這篇文章就結(jié)束了,寫這篇博客只是單純記錄自己的學(xué)習(xí)過程。希望看到這篇博客的你,能夠更加堅定的學(xué)習(xí)。胡適說過一句話我覺得特別好,這里分享給大家。

怕什么真理無窮,進一寸有進一寸的歡喜。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2565

    文章

    52971

    瀏覽量

    767198
  • 3D
    3D
    +關(guān)注

    關(guān)注

    9

    文章

    2959

    瀏覽量

    110727
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70694
  • OpenCV
    +關(guān)注

    關(guān)注

    32

    文章

    642

    瀏覽量

    42861
  • CGI
    CGI
    +關(guān)注

    關(guān)注

    0

    文章

    20

    瀏覽量

    10493

原文標(biāo)題:【人體姿態(tài)檢測】通過Opencv+Openpose實現(xiàn)

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    樹莓派上使用OpenCV和Python實現(xiàn)實時人臉檢測

    本文介紹了如何在樹莓派上,使用 OpenCV 和 Python 完成人臉檢測項目。該項目不僅描述了識別人臉?biāo)枰木唧w步驟,同時還提供了很多擴展知識。此外,該項目并不需要讀者了解詳細(xì)的人臉識別
    的頭像 發(fā)表于 03-06 09:00 ?5.2w次閱讀

    【愛芯派 Pro 開發(fā)板試用體驗】人體姿態(tài)估計模型部署前期準(zhǔn)備

    使用到,這里給大家舉幾個例子: 1、虛擬主播:大家看到B站直播時的“皮套人”,通常通過一個2D live的形象展示一個動漫形象,然后和主播同步動作。這就是通過攝像頭識別當(dāng)前主播姿態(tài),再同步到虛擬形象上
    發(fā)表于 01-01 01:04

    基于openCV的人臉檢測系統(tǒng)的設(shè)計

    通過對基于Adaboost人臉檢測算法的研究,利用該算法與計算機視覺類庫openCV進行人臉檢測系統(tǒng)的設(shè)計,實現(xiàn)了對出現(xiàn)在視頻或圖像中的人臉
    發(fā)表于 12-23 14:19

    怎么實現(xiàn)基于iNEMO模塊的姿態(tài)檢測及數(shù)據(jù)傳輸系統(tǒng)設(shè)計?

    怎么實現(xiàn)基于iNEMO模塊的姿態(tài)檢測及數(shù)據(jù)傳輸系統(tǒng)設(shè)計?
    發(fā)表于 05-19 06:06

    如何對基于RK3399的OPENPOSE進行開發(fā)設(shè)計呢

    模型下載,建議在PC上做若報cv2.dnn錯誤,這是opencv版本低的問題,需要升級opencv到3.4.1以上版本(不包含3.4.1), 若報&quot; ValueError
    發(fā)表于 06-20 16:53

    如何使用Python中的OpenCV模塊檢測顏色

    在這篇文章中,我們將看到如何使用 Python 中的 OpenCV 模塊檢測顏色,進入這個領(lǐng)域的第一步就是安裝下面提到的模塊。pip install opencv-pythonpip install
    發(fā)表于 02-09 16:31

    openCV邊緣檢測原理是什么?

    openCV通過什么原理來實現(xiàn)邊緣檢測
    發(fā)表于 10-10 06:21

    飛行姿態(tài)角測試技術(shù)

    研究飛行姿態(tài)角測試技術(shù),提出了一種姿態(tài)角測試方法,給出了可行的實現(xiàn)方案和實測曲線,用卡爾丹角結(jié)合測試曲線對被測
    發(fā)表于 12-23 10:02 ?16次下載

    人手姿態(tài)檢測系統(tǒng)的設(shè)計與實現(xiàn)

    為了增強人機交互的交互性以及遙控操作的可控性,設(shè)計并實現(xiàn)了一款基于磁場傳感器與微加速度計的人手姿態(tài)檢測系統(tǒng)。利用坐標(biāo)變換理論,通過磁場傳感器數(shù)據(jù)解算
    發(fā)表于 09-09 11:35 ?66次下載
    人手<b class='flag-5'>姿態(tài)</b><b class='flag-5'>檢測</b>系統(tǒng)的設(shè)計與<b class='flag-5'>實現(xiàn)</b>

    基于openCV的人臉檢測識別系統(tǒng)的設(shè)計

    通過對基于Adaboost人臉檢測算法的研究,利用該算法與計算機視覺類庫openCV進行人臉檢測系統(tǒng)的設(shè)計,實現(xiàn)了對出現(xiàn)在視頻或圖像中的人臉
    發(fā)表于 06-15 10:53 ?477次下載
    基于<b class='flag-5'>openCV</b>的人臉<b class='flag-5'>檢測</b>識別系統(tǒng)的設(shè)計

    使用Adaboost算法實現(xiàn)車牌檢測OpenCV實現(xiàn)的研究分析

    AdabtxⅪt是一個構(gòu)建精確分類器的學(xué)習(xí)算法,在目標(biāo)檢測領(lǐng)域有著廣泛的應(yīng)用。OpenCV是Intel開源計算機視覺庫。該文給出了在OpenCV上利用Adaboost算法,實現(xiàn)車輛車牌
    發(fā)表于 09-27 17:49 ?7次下載
    使用Adaboost算法<b class='flag-5'>實現(xiàn)</b>車牌<b class='flag-5'>檢測</b>在<b class='flag-5'>OpenCV</b>上<b class='flag-5'>實現(xiàn)</b>的研究分析

    使用Python和OpenCV實現(xiàn)行人檢測的資料合集免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用Python和OpenCV實現(xiàn)行人檢測的資料合集免費下載。
    發(fā)表于 06-01 17:42 ?23次下載
    使用Python和<b class='flag-5'>OpenCV</b><b class='flag-5'>實現(xiàn)</b>行人<b class='flag-5'>檢測</b>的資料合集免費下載

    使用Vitis AI和Openpose處理數(shù)據(jù)以檢測跌倒檢測

    電子發(fā)燒友網(wǎng)站提供《使用Vitis AI和Openpose處理數(shù)據(jù)以檢測跌倒檢測.zip》資料免費下載
    發(fā)表于 11-17 09:40 ?0次下載
    使用Vitis AI和<b class='flag-5'>Openpose</b>處理數(shù)據(jù)以<b class='flag-5'>檢測</b>跌倒<b class='flag-5'>檢測</b>

    利用opencv+openpose實現(xiàn)人體姿態(tài)檢測

    利用opencv+openpose實現(xiàn)人體姿態(tài)檢測,附詳細(xì)代碼。 通過一個偶然機會,我了解到了人體姿態(tài)
    的頭像 發(fā)表于 06-26 10:15 ?3622次閱讀
    利用<b class='flag-5'>opencv+openpose</b><b class='flag-5'>實現(xiàn)</b>人體<b class='flag-5'>姿態(tài)</b><b class='flag-5'>檢測</b>

    基于機器學(xué)習(xí)的IWR6843AOP跌倒和姿態(tài)檢測實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于機器學(xué)習(xí)的IWR6843AOP跌倒和姿態(tài)檢測實現(xiàn).pdf》資料免費下載
    發(fā)表于 09-03 10:02 ?3次下載
    基于機器學(xué)習(xí)的IWR6843AOP跌倒和<b class='flag-5'>姿態(tài)</b><b class='flag-5'>檢測</b><b class='flag-5'>實現(xiàn)</b>