0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

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

新機(jī)器視覺 ? 來源:新機(jī)器視覺 ? 2023-06-26 10:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

利用opencv+openpose實(shí)現(xiàn)人體姿態(tài)檢測,附詳細(xì)代碼。

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

前言

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

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

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

應(yīng)用:

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

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

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

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

一、環(huán)境配置

pycharm2021.2.2

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

1.導(dǎo)入文件

9d879b94-13b1-11ee-962d-dac502259ad0.png

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

2.具體代碼

#TouseInferenceEnginebackend,specifylocationofplugins:
#exportLD_LIBRARY_PATH=/opt/intel/deeplearning_deploymenttoolkit/deployment_tools/external/mklml_lnx/lib:$LD_LIBRARY_PATH
importcv2ascv
importnumpyasnp
importargparse

parser=argparse.ArgumentParser()
parser.add_argument('--input',help='Pathtoimageorvideo.Skiptocaptureframesfromcamera')
parser.add_argument('--thr',default=0.2,type=float,help='Thresholdvalueforposepartsheatmap')
parser.add_argument('--width',default=368,type=int,help='Resizeinputtospecificwidth.')
parser.add_argument('--height',default=368,type=int,help='Resizeinputtospecificheight.')

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.inputifargs.inputelse0)

whilecv.waitKey(1)args.threlseNone)

forpairinPOSE_PAIRS:
partFrom=pair[0]
partTo=pair[1]
assert(partFrominBODY_PARTS)
assert(partToinBODY_PARTS)

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

ifpoints[idFrom]andpoints[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('OpenPoseusingOpenCV',frame)

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

3.效果展示

9d980970-13b1-11ee-962d-dac502259ad0.png

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

三、效果優(yōu)化

這個幀率雖然可以,但是效果屬實(shí)有點(diǎn)拉跨。教我K210的學(xué)長便指導(dǎo)我進(jìn)行優(yōu)化改進(jìn),這里附上學(xué)長的連接(https://blog.csdn.net/hyayq8124spm=1001.2014.3001.5509)

1.具體代碼

importcv2
importtime
importmediapipeasmp
fromtqdmimporttqdm

#導(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)


defprocess_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)

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

returnimg

cap=cv2.VideoCapture(1)

#打開cap
cap.open(0)

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

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

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

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


cap.release()


cv2.destroyAllWindows()

2.效果展示

9dc0803a-13b1-11ee-962d-dac502259ad0.png

總結(jié)

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

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

    關(guān)注

    2565

    文章

    52942

    瀏覽量

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

    關(guān)注

    9

    文章

    2959

    瀏覽量

    110698
  • OpenCV
    +關(guān)注

    關(guān)注

    32

    文章

    642

    瀏覽量

    42844

原文標(biāo)題:實(shí)踐教程|通過Opencv+Openpose實(shí)現(xiàn)人體姿態(tài)檢測

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

    Bottom-up類型的。 3、Openpose/lightweight openpose模型 首先要用到的是Openpose模型,這應(yīng)該是最有名的人體
    發(fā)表于 01-01 01:04

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

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

    如何利用MPU6050進(jìn)行姿態(tài)檢測

    與標(biāo)準(zhǔn)方向的夾角繞載體Y 軸旋轉(zhuǎn)可改變利用陀螺儀檢測角度最直觀的角度檢測器就是陀螺儀了,見圖 47-3,它可以檢測物體繞坐標(biāo)軸轉(zhuǎn)動的“角速度”,如同...
    發(fā)表于 02-10 06:31

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

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

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

    為了增強(qiáng)人機(jī)交互的交互性以及遙控操作的可控性,設(shè)計(jì)并實(shí)現(xiàn)了一款基于磁場傳感器與微加速度計(jì)的人手姿態(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è)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    iNEMO模塊的姿態(tài)檢測設(shè)計(jì)方案

    近年來,MEMS技術(shù)的發(fā)展開辟了一個全新的技術(shù)領(lǐng)域和產(chǎn)業(yè),采用MEMS技術(shù)制作的微傳感器、微執(zhí)行器、電力電子器件等在航空、航天、汽車、生物醫(yī)學(xué)、軍事等領(lǐng)域中都有著十分廣闊的應(yīng)用前景,同時人體姿態(tài)檢測
    發(fā)表于 10-15 10:40 ?0次下載
    iNEMO模塊的<b class='flag-5'>姿態(tài)</b><b class='flag-5'>檢測</b>設(shè)計(jì)方案

    iNEMO模塊的特點(diǎn)及用其實(shí)現(xiàn)人體姿態(tài)檢測系統(tǒng)的設(shè)計(jì)

    本系統(tǒng)提出的算法主要是在加速度計(jì)、陀螺儀、磁力計(jì)采集人體運(yùn)動姿態(tài)信息的基礎(chǔ)上,運(yùn)用擴(kuò)展卡爾曼濾波將數(shù)據(jù)進(jìn)行融合,得到人體腰部和腿部的角度信息,然后通過大量實(shí)驗(yàn)建立與姿態(tài)的對應(yīng)關(guān)系,采用
    的頭像 發(fā)表于 11-16 07:53 ?3529次閱讀
    iNEMO模塊的特點(diǎn)及用其<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>人體</b><b class='flag-5'>姿態(tài)</b><b class='flag-5'>檢測</b>系統(tǒng)的設(shè)計(jì)

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

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

    利用OpenCV構(gòu)建一個RaspberryPi運(yùn)動檢測系統(tǒng)

    OpenCV是一個強(qiáng)大的工具,結(jié)合RaspberryPi可以打開許多便攜式智能設(shè)備的大門,我們將學(xué)習(xí)如何利用OpenCV的強(qiáng)大功能并在我們的實(shí)時閉路電視畫面上構(gòu)建一個RaspberryPi運(yùn)動
    發(fā)表于 08-01 16:48 ?1618次閱讀
    <b class='flag-5'>利用</b><b class='flag-5'>OpenCV</b>構(gòu)建一個RaspberryPi運(yùn)動<b class='flag-5'>檢測</b>系統(tǒng)

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

    電子發(fā)燒友網(wǎng)站提供《使用Vitis AI和Openpose處理數(shù)據(jù)以檢測跌倒檢測.zip》資料免費(fèi)下載
    發(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>

    100行Python實(shí)現(xiàn)人體膚色檢測

    本文中的人體膚色檢測功能采用 OpenCV實(shí)現(xiàn)OpenCV是一個基于BSD許可(開源)發(fā)行的跨平臺計(jì)算機(jī)視覺庫,可以運(yùn)行在Linux、
    的頭像 發(fā)表于 05-06 10:46 ?968次閱讀

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

    通過一個偶然機(jī)會,我了解到了人體姿態(tài)解算,在學(xué)習(xí)K210之余,我便想著通過opencv實(shí)現(xiàn)這個功能,查找了很多資料,發(fā)現(xiàn)可以利用
    的頭像 發(fā)表于 05-22 10:44 ?1535次閱讀
    通過<b class='flag-5'>Opencv+Openpose</b><b class='flag-5'>實(shí)現(xiàn)</b>體<b class='flag-5'>姿態(tài)</b><b class='flag-5'>檢測</b>

    AI深度相機(jī)-人體姿態(tài)估計(jì)應(yīng)用

    夠構(gòu)建一個可以檢測、分析和響應(yīng)人體運(yùn)動的應(yīng)用程序和系統(tǒng)。代碼我們的演示視頻如下,該視頻展示了這項(xiàng)技術(shù)的實(shí)際功能。您可以看到使用虹科AI深度相機(jī)實(shí)現(xiàn)人體姿勢估計(jì)是多
    的頭像 發(fā)表于 07-31 17:42 ?1344次閱讀
    AI深度相機(jī)-<b class='flag-5'>人體</b><b class='flag-5'>姿態(tài)</b>估計(jì)應(yīng)用

    利用OpenCV進(jìn)行顏色檢測

    關(guān)于利用OpenCV進(jìn)行顏色分類,本文包含了HSV介紹及應(yīng)用、cv2.inRange及應(yīng)用、RGB與HSV通道的區(qū)別三個方面。
    的頭像 發(fā)表于 08-18 10:32 ?1517次閱讀
    <b class='flag-5'>利用</b><b class='flag-5'>OpenCV</b>進(jìn)行顏色<b class='flag-5'>檢測</b>

    毫米波雷達(dá)模塊在高精度人體姿態(tài)識別的應(yīng)用

    人體姿態(tài)識別是計(jì)算機(jī)視覺領(lǐng)域中的重要問題之一,具有廣泛的應(yīng)用前景,如智能安防、虛擬現(xiàn)實(shí)、醫(yī)療輔助等。毫米波雷達(dá)技術(shù)作為一種無需直接接觸目標(biāo)就能實(shí)現(xiàn)高精度探測的感知技術(shù),在人體
    的頭像 發(fā)表于 04-24 15:20 ?1226次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品