91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

【開(kāi)發(fā)實(shí)例】基于BPI-CanMV-K230D-Zero開(kāi)發(fā)板實(shí)現(xiàn)人體關(guān)鍵點(diǎn)的實(shí)時(shí)動(dòng)態(tài)識(shí)別

電子發(fā)燒友論壇 ? 2025-07-08 08:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文介紹了香蕉派 CanMV K230D Zero 開(kāi)發(fā)板通過(guò)攝像頭實(shí)現(xiàn)人體關(guān)鍵點(diǎn)的實(shí)時(shí)動(dòng)態(tài)檢測(cè)識(shí)別的項(xiàng)目設(shè)計(jì)。

https://bbs.elecfans.com/jishu_2493481_1_1.html


項(xiàng)目介紹

  • 人體關(guān)鍵點(diǎn)檢測(cè)應(yīng)用使用 YOLOv8n-pose 模型對(duì)人體姿態(tài)進(jìn)行檢測(cè);
  • 檢測(cè)結(jié)果得到 17 個(gè)人體骨骼關(guān)鍵點(diǎn)的位置,并用不同顏色的線將關(guān)鍵點(diǎn)連起來(lái)在屏幕顯示。

17 個(gè)人體骨骼關(guān)鍵點(diǎn)包括:鼻子、左眼、右眼、左耳、右耳、左肩、右肩、左肘、右肘、左腕、右手腕、左髖關(guān)節(jié)、右髖關(guān)節(jié)、左膝、右膝蓋、左腳踝、右腳踝。

模型官方文檔詳見(jiàn):COCO8 Pose 數(shù)據(jù)集 -Ultralytics YOLO 文檔.

模型訓(xùn)練過(guò)程詳見(jiàn):訓(xùn)練部署YOLOv8姿態(tài)估計(jì)模型 | Seeed Studio Wiki.


流程圖

285df6ce-5b8f-11f0-9cf1-92fbcf53809c.jpg

代碼

使用CanMV IDE打開(kāi)\CanMV\sdcard\examples\05-AI-Demo\person_keypoint_detect.py文件

fromlibs.PipeLineimportPipeLine, ScopedTiming
fromlibs.AIBaseimportAIBase
fromlibs.AI2DimportAi2d
importos
importujson
frommedia.mediaimport*
fromtimeimport*
importnncase_runtimeasnn
importulab.numpyasnp
importtime
importutime
importimage
importrandom
importgc
importsys
importaidemo

# 自定義人體關(guān)鍵點(diǎn)檢測(cè)類
classPersonKeyPointApp(AIBase):
def__init__(self,kmodel_path,model_input_size,confidence_threshold=0.2,nms_threshold=0.5,rgb888p_size=[1280,720],display_size=[1920,1080],debug_mode=0):
super().__init__(kmodel_path,model_input_size,rgb888p_size,debug_mode)
self.kmodel_path=kmodel_path
# 模型輸入分辨率
self.model_input_size=model_input_size
# 置信度閾值設(shè)置
self.confidence_threshold=confidence_threshold
# nms閾值設(shè)置
self.nms_threshold=nms_threshold
# sensor給到AI的圖像分辨率
self.rgb888p_size=[ALIGN_UP(rgb888p_size[0],16),rgb888p_size[1]]
# 顯示分辨率
self.display_size=[ALIGN_UP(display_size[0],16),display_size[1]]
self.debug_mode=debug_mode
#骨骼信息
self.SKELETON = [(16,14),(14,12),(17,15),(15,13),(12,13),(6, 12),(7, 13),(6, 7),(6, 8),(7, 9),(8, 10),(9, 11),(2, 3),(1, 2),(1, 3),(2, 4),(3, 5),(4, 6),(5, 7)]
#肢體顏色
self.LIMB_COLORS = [(255,51, 153,255),(255,51, 153,255),(255,51, 153,255),(255,51, 153,255),(255,255,51, 255),(255,255,51, 255),(255,255,51, 255),(255,255,128,0),(255,255,128,0),(255,255,128,0),(255,255,128,0),(255,255,128,0),(255,0, 255,0),(255,0, 255,0),(255,0, 255,0),(255,0, 255,0),(255,0, 255,0),(255,0, 255,0),(255,0, 255,0)]
#關(guān)鍵點(diǎn)顏色,共17個(gè)
self.KPS_COLORS = [(255,0, 255,0),(255,0, 255,0),(255,0, 255,0),(255,0, 255,0),(255,0, 255,0),(255,255,128,0),(255,255,128,0),(255,255,128,0),(255,255,128,0),(255,255,128,0),(255,255,128,0),(255,51, 153,255),(255,51, 153,255),(255,51, 153,255),(255,51, 153,255),(255,51, 153,255),(255,51, 153,255)]

# Ai2d實(shí)例,用于實(shí)現(xiàn)模型預(yù)處理
self.ai2d=Ai2d(debug_mode)
# 設(shè)置Ai2d的輸入輸出格式和類型
self.ai2d.set_ai2d_dtype(nn.ai2d_format.NCHW_FMT,nn.ai2d_format.NCHW_FMT,np.uint8, np.uint8)

# 配置預(yù)處理操作,這里使用了pad和resize,Ai2d支持crop/shift/pad/resize/affine,具體代碼請(qǐng)打開(kāi)/sdcard/app/libs/AI2D.py查看
defconfig_preprocess(self,input_image_size=None):
withScopedTiming("set preprocess config",self.debug_mode >0):
# 初始化ai2d預(yù)處理配置,默認(rèn)為sensor給到AI的尺寸,您可以通過(guò)設(shè)置input_image_size自行修改輸入尺寸
ai2d_input_size=input_image_sizeifinput_image_sizeelseself.rgb888p_size
top,bottom,left,right=self.get_padding_param()
self.ai2d.pad([0,0,0,0,top,bottom,left,right],0, [0,0,0])
self.ai2d.resize(nn.interp_method.tf_bilinear, nn.interp_mode.half_pixel)
self.ai2d.build([1,3,ai2d_input_size[1],ai2d_input_size[0]],[1,3,self.model_input_size[1],self.model_input_size[0]])

# 自定義當(dāng)前任務(wù)的后處理
defpostprocess(self,results):
withScopedTiming("postprocess",self.debug_mode >0):
# 這里使用了aidemo庫(kù)的person_kp_postprocess接口
results = aidemo.person_kp_postprocess(results[0],[self.rgb888p_size[1],self.rgb888p_size[0]],self.model_input_size,self.confidence_threshold,self.nms_threshold)
returnresults

#繪制結(jié)果,繪制人體關(guān)鍵點(diǎn)
defdraw_result(self,pl,res):
withScopedTiming("display_draw",self.debug_mode >0):
ifres[0]:
pl.osd_img.clear()
kpses = res[1]
foriinrange(len(res[0])):
forkinrange(17+2):
if(k 17):
kps_x,kps_y,kps_s =round(kpses[i][k][0]),round(kpses[i][k][1]),kpses[i][k][2]
kps_x1 =int(float(kps_x) * self.display_size[0] // self.rgb888p_size[0])
kps_y1 =int(float(kps_y) * self.display_size[1] // self.rgb888p_size[1])
if(kps_s >0):
pl.osd_img.draw_circle(kps_x1,kps_y1,5,self.KPS_COLORS[k],4)
ske = self.SKELETON[k]
pos1_x,pos1_y=round(kpses[i][ske[0]-1][0]),round(kpses[i][ske[0]-1][1])
pos1_x_ =int(float(pos1_x) * self.display_size[0] // self.rgb888p_size[0])
pos1_y_ =int(float(pos1_y) * self.display_size[1] // self.rgb888p_size[1])

pos2_x,pos2_y =round(kpses[i][(ske[1] -1)][0]),round(kpses[i][(ske[1] -1)][1])
pos2_x_ =int(float(pos2_x) * self.display_size[0] // self.rgb888p_size[0])
pos2_y_ =int(float(pos2_y) * self.display_size[1] // self.rgb888p_size[1])

pos1_s,pos2_s = kpses[i][(ske[0] -1)][2],kpses[i][(ske[1] -1)][2]
if(pos1_s >0.0andpos2_s >0.0):
pl.osd_img.draw_line(pos1_x_,pos1_y_,pos2_x_,pos2_y_,self.LIMB_COLORS[k],4)
gc.collect()
else:
pl.osd_img.clear()

# 計(jì)算padding參數(shù)
defget_padding_param(self):
dst_w = self.model_input_size[0]
dst_h = self.model_input_size[1]
input_width = self.rgb888p_size[0]
input_high = self.rgb888p_size[1]
ratio_w = dst_w / input_width
ratio_h = dst_h / input_high
ifratio_w < ratio_h:
ratio = ratio_w
else:
ratio = ratio_h
new_w = (int)(ratio * input_width)
new_h = (int)(ratio * input_high)
dw = (dst_w - new_w) /2
dh = (dst_h - new_h) /2
top =int(round(dh -0.1))
bottom =int(round(dh +0.1))
left =int(round(dw -0.1))
right =int(round(dw -0.1))
return top, bottom, left, right

if__name__=="__main__":
# 顯示模式,默認(rèn)"hdmi",可以選擇"hdmi"和"lcd"
display_mode="hdmi"
# k230保持不變,k230d可調(diào)整為[640,360]
rgb888p_size = [1920,1080]

ifdisplay_mode=="hdmi":
display_size=[1920,1080]
else:
display_size=[800,480]
# 模型路徑
kmodel_path="/sdcard/examples/kmodel/yolov8n-pose.kmodel"
# 其它參數(shù)設(shè)置
confidence_threshold =0.2
nms_threshold =0.5
# 初始化PipeLine
pl=PipeLine(rgb888p_size=rgb888p_size,display_size=display_size,display_mode=display_mode)
pl.create()
# 初始化自定義人體關(guān)鍵點(diǎn)檢測(cè)實(shí)例
person_kp=PersonKeyPointApp(kmodel_path,model_input_size=[320,320],confidence_threshold=confidence_threshold,nms_threshold=nms_threshold,rgb888p_size=rgb888p_size,display_size=display_size,debug_mode=0)
person_kp.config_preprocess()
whileTrue:
withScopedTiming("total",1):
# 獲取當(dāng)前幀數(shù)據(jù)
img=pl.get_frame()
# 推理當(dāng)前幀
res=person_kp.run(img)
# 繪制結(jié)果到PipeLine的osd圖像
person_kp.draw_result(pl,res)
# 顯示當(dāng)前的繪制結(jié)果
pl.show_image()
gc.collect()
person_kp.deinit()
pl.destroy()

連接開(kāi)發(fā)板并運(yùn)行代碼;


將攝像頭對(duì)準(zhǔn)目標(biāo)檢測(cè)畫(huà)面,即可在 IDE 獲取實(shí)時(shí)識(shí)別效果。

286afd38-5b8f-11f0-9cf1-92fbcf53809c.jpg

效果

運(yùn)動(dòng)場(chǎng)景

2880b0ec-5b8f-11f0-9cf1-92fbcf53809c.jpg

科幻電影

289264c2-5b8f-11f0-9cf1-92fbcf53809c.jpg

動(dòng)作電影

28aa4560-5b8f-11f0-9cf1-92fbcf53809c.jpg

動(dòng)態(tài)識(shí)別效果詳見(jiàn)頂部和底部視頻


總結(jié)


本文介紹了香蕉派 CanMV K230D Zero 開(kāi)發(fā)板通過(guò)攝像頭實(shí)現(xiàn)人體關(guān)鍵點(diǎn)的實(shí)時(shí)動(dòng)態(tài)檢測(cè)和識(shí)別的項(xiàng)目設(shè)計(jì),為相關(guān)產(chǎn)品的快速開(kāi)發(fā)和產(chǎn)品設(shè)計(jì)提供了參考。


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    香蕉派 BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片設(shè)計(jì)

    資源和小巧的尺寸使其成為市場(chǎng)上最具競(jìng)爭(zhēng)力的開(kāi)發(fā)板之一。無(wú)論是編程學(xué)習(xí)、邊緣 AI 音視頻產(chǎn)品創(chuàng)新,還是性能評(píng)估,Canmv K230D Zero 都助您開(kāi)啟創(chuàng)新之旅。
    發(fā)表于 07-30 17:43

    香蕉派開(kāi)發(fā)板BPI-CanMV-K230D-Zero 嘉楠科技 RISC-V開(kāi)發(fā)板開(kāi)發(fā)

    Banana Pi BPI-CanMV-K230D-Zero開(kāi)發(fā)售[]() Banana Pi 與 嘉楠科技繼K210官方合作后,推出的最新的K230D的開(kāi)源硬件產(chǎn)品。雙方將緊密合
    發(fā)表于 11-05 15:29

    Banana Pi BPI-CanMV-K230D-Zero :AIoT 應(yīng)用的 Kendryte K230D RISC-V

    Banana Pi BPI-CanMV-K230D-Zero 是一款緊湊型低功耗單板計(jì)算機(jī),基于 Kendryte K230D 雙核 XuanTie C908 RISC-V 芯片構(gòu)建,集成第三代知識(shí)
    發(fā)表于 12-05 09:19

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】香蕉派 K230D 視覺(jué)開(kāi)發(fā)板開(kāi)箱+CamMV 環(huán)境搭建

    【開(kāi)箱】 今天收到了香蕉派 Banana Pi BPI-CanMV-K230D-Zero 開(kāi)發(fā)板,先上圖一睹為快。 【處理器介紹】 這款開(kāi)發(fā)板搭載嘉楠科技 K230D 處理器,
    發(fā)表于 06-24 22:54

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】介紹、系統(tǒng)安裝、工程測(cè)試

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】介紹、系統(tǒng)安裝、工程測(cè)試 本文介紹了香蕉派 CanMV K230D Zero
    發(fā)表于 06-25 20:15

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】+初品嘉楠科技產(chǎn)品

    感謝組織者能提供這樣好的活動(dòng),使大家能切身地感受到嘉楠科技的產(chǎn)品,在2款提供的產(chǎn)品中所達(dá)到的是Banana Pi BPI-CanMV-K230D-Zero,它采用K230D RISC-V芯片設(shè)計(jì),該
    發(fā)表于 06-26 08:55

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】01_開(kāi)箱+環(huán)境配置+系統(tǒng)燒錄

    1 開(kāi)發(fā)板簡(jiǎn)介 今天收到了發(fā)燒友論壇寄來(lái)的試用產(chǎn)品--BPI-CanMV-K230D-Zero17,這塊開(kāi)發(fā)板是采用嘉楠科技 K230D RISC-V芯片設(shè)計(jì),探索 RISC-V Ve
    發(fā)表于 06-26 19:07

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】+燈效控制與Python編程

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板易于開(kāi)發(fā)的一大特定在于它系統(tǒng)內(nèi)置了Python,因此不在僅依賴于在LINUX下開(kāi)發(fā)。此外,隨著AI智能技術(shù)的推進(jìn),Python的使用也越來(lái)
    發(fā)表于 06-27 17:33

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】人體關(guān)鍵點(diǎn)檢測(cè)

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】人體關(guān)鍵點(diǎn)檢測(cè) 本文介紹了香蕉派 CanMV K2
    發(fā)表于 06-28 13:18

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】+ADC數(shù)據(jù)采集及尋找引腳的問(wèn)題

    在通常情況下。A/D數(shù)據(jù)采集功能基本上是標(biāo)準(zhǔn)功能之一,在BPI-CanMV-K230D-Zero上自然也基本這樣的功能并提供了相應(yīng)的示例以供學(xué)習(xí)和借鑒。 示例的程序比較簡(jiǎn)單,就是對(duì)通道0的信號(hào)進(jìn)行
    發(fā)表于 06-29 17:04

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】+串口通訊及應(yīng)用

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板上配有相應(yīng)的串口資源,通過(guò)它們不但可以實(shí)現(xiàn)設(shè)備的數(shù)據(jù)交流,還可控制相應(yīng)的串口設(shè)備實(shí)現(xiàn)特點(diǎn)的功能。 在
    發(fā)表于 06-30 12:43

    BPI-CanMV-K230D-Zero開(kāi)發(fā)板體驗(yàn)】+TFT屏顯示驅(qū)動(dòng)及信息顯示

    對(duì)于BPI-CanMV-K230D-Zero開(kāi)發(fā)板來(lái)講,其標(biāo)準(zhǔn)的顯示器配置是基于芯片ST7701的LCD顯示屏,該顯示屏的顯示分辨率為800x480像素點(diǎn),可在智能設(shè)備時(shí)實(shí)現(xiàn)攝像內(nèi)容的
    發(fā)表于 07-02 11:03

    Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片設(shè)計(jì)

    Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片設(shè)計(jì),探索 RISC-V Vector1.0 的前沿技術(shù),選擇嘉楠科技的 Canmv
    的頭像 發(fā)表于 07-30 17:41 ?1075次閱讀
    Banana Pi <b class='flag-5'>BPI-CanMV-K230D-Zero</b> 采用嘉楠科技 <b class='flag-5'>K230D</b> RISC-V芯片設(shè)計(jì)

    香蕉派開(kāi)發(fā)板BPI-CanMV-K230D-Zero 嘉楠科技 RISC-V開(kāi)發(fā)板開(kāi)發(fā)

    Banana Pi 與 嘉楠科技繼K210官方合作后,推出的最新的K230D的開(kāi)源硬件產(chǎn)品。雙方將緊密合作,共推開(kāi)源生態(tài)。Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠
    的頭像 發(fā)表于 11-05 15:27 ?1445次閱讀
    香蕉派<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>BPI-CanMV-K230D-Zero</b> 嘉楠科技 RISC-V<b class='flag-5'>開(kāi)發(fā)板</b>公<b class='flag-5'>開(kāi)發(fā)</b>售

    搭載雙核玄鐵C908 ?RISC-V CPU,BPI-CanMV-K230D-Zero開(kāi)發(fā)板試用

    Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片設(shè)計(jì),探索 RISC-V ?Vector1.0 的前沿技術(shù),選擇嘉楠科技的 Canmv
    的頭像 發(fā)表于 06-05 16:49 ?507次閱讀
    搭載雙核玄鐵C908 ?RISC-V CPU,<b class='flag-5'>BPI-CanMV-K230D-Zero</b><b class='flag-5'>開(kāi)發(fā)板</b>試用
    主站蜘蛛池模板: www.三级.com| gav久久| 岛国大片在线播放 | 91成人午夜性a一级毛片 | 中国国产aa一级毛片 | 曰曰摸天天摸人人看久久久 | 久久中文字幕综合婷婷 | 99久久99久久久99精品齐 | 亚洲va久久久久综合 | 欧美不在线| 久久奇米 | 边摸边吃奶边做视频叫床韩剧 | 黄色免费片 | 女人色视频 | 日本黄色大片在线观看 | 久久久精品免费视频 | 欧美性色黄 | 插久久 | 欧美午夜视频 | 九色窝 | 久久这里只有精品免费播放 | 亚洲欧美日韩高清mmm777 | 亚洲黄色成人 | 爱爱免费视频网站 | 亚洲综合激情丁香六月 | 激情五月社区 | 国产精品美女自在线观看免费 | 亚洲国产精品第一页 | 国产在线观看www鲁啊鲁免费 | 狠狠色噜噜狠狠狠狠97影音先锋 | 久久久久久久国产精品电影 | 四虎精品影院永久在线播放 | 免费一日本一级裸片在线观看 | 六月婷婷色 | 老师叫我下面含着精子去上课 | 久久福利免费视频 | 日夜操在线视频 | 五月综合激情 | 久青草免费在线视频 | 欧美一级日韩一级亚洲一级 | 特级毛片aaaa级毛片免费 |