精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

通過Opencv+Openpose實現體姿態檢測

新機器視覺 ? 來源:CSDN博主我與nano ? 2023-05-22 10:44 ? 次閱讀

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

前言

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

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

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

應用:

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

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

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

用于增強安保和監控

一、環境配置

pycharm2021.2.2

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

1.導入文件

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

在pycharm上導入相應的文件后,你可以直接點擊運行,系統會提示你缺少了什么環境,缺少什么就安裝什么,通過終端使用pip安裝即可。

需要的留下郵箱即可,我發給你。

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)

這里便是主函數的代碼。

3.效果展示

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

三、效果優化

這個幀率雖然可以,但是效果屬實有點拉跨。教我K210的學長便指導我進行優化改進,這里附上學長的連接

1.具體代碼


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


# 導入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轉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轉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)


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


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


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


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




cap.release()




cv2.destroyAllWindows()

2.效果展示

效果簡直太好了

總結

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

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2548

    文章

    50667

    瀏覽量

    751947
  • 3D
    3D
    +關注

    關注

    9

    文章

    2862

    瀏覽量

    107324
  • 代碼
    +關注

    關注

    30

    文章

    4747

    瀏覽量

    68348
  • OpenCV
    +關注

    關注

    30

    文章

    628

    瀏覽量

    41260
  • CGI
    CGI
    +關注

    關注

    0

    文章

    20

    瀏覽量

    10342

原文標題:【人體姿態檢測】通過Opencv+Openpose實現

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

收藏 人收藏

    評論

    相關推薦

    樹莓派上使用OpenCV和Python實現實時人臉檢測

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

    【愛芯派 Pro 開發板試用體驗】人體姿態估計模型部署前期準備

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

    基于openCV的人臉檢測系統的設計

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

    怎么實現基于iNEMO模塊的姿態檢測及數據傳輸系統設計?

    怎么實現基于iNEMO模塊的姿態檢測及數據傳輸系統設計?
    發表于 05-19 06:06

    如何對基于RK3399的OPENPOSE進行開發設計呢

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

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

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

    openCV邊緣檢測原理是什么?

    openCV通過什么原理來實現邊緣檢測
    發表于 10-10 06:21

    飛行姿態角測試技術

    研究飛行姿態角測試技術,提出了一種姿態角測試方法,給出了可行的實現方案和實測曲線,用卡爾丹角結合測試曲線對被測
    發表于 12-23 10:02 ?16次下載

    人手姿態檢測系統的設計與實現

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

    基于openCV的人臉檢測識別系統的設計

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

    使用Adaboost算法實現車牌檢測OpenCV實現的研究分析

    AdabtxⅪt是一個構建精確分類器的學習算法,在目標檢測領域有著廣泛的應用。OpenCV是Intel開源計算機視覺庫。該文給出了在OpenCV上利用Adaboost算法,實現車輛車牌
    發表于 09-27 17:49 ?7次下載
    使用Adaboost算法<b class='flag-5'>實現</b>車牌<b class='flag-5'>檢測</b>在<b class='flag-5'>OpenCV</b>上<b class='flag-5'>實現</b>的研究分析

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

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

    使用Vitis AI和Openpose處理數據以檢測跌倒檢測

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

    利用opencv+openpose實現人體姿態檢測

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

    基于機器學習的IWR6843AOP跌倒和姿態檢測實現

    電子發燒友網站提供《基于機器學習的IWR6843AOP跌倒和姿態檢測實現.pdf》資料免費下載
    發表于 09-03 10:02 ?1次下載
    基于機器學習的IWR6843AOP跌倒和<b class='flag-5'>姿態</b><b class='flag-5'>檢測</b><b class='flag-5'>實現</b>