<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

英碼科技EA500I基于昇騰Mind SDK實現實時人體關鍵點檢測

英碼嵌入式 ? 2024-04-20 08:25 ? 次閱讀


在教育、體育、安防、交通、醫療等領域中,實時人體關鍵點檢測應用發揮著至關重要的作用,比如在體育訓練時,實時人體關鍵點檢測可以精確、實時地捕捉運動員的動作,從而進行動作分析和優化;在安防應用場景中,實時人體關鍵點檢測應用可以用來識別異常行為或特定姿態,以達到場景安全防控的目的。

那么,什么是實時人體關鍵點檢測?


簡單來說,實時人體關鍵點檢測是一種計算機視覺技術,它能夠在圖像或視頻中實時地自動識別并標注出人體的關鍵部位,如關節點、頭部等。


實時人體關鍵點檢測在邊緣計算領域的應用非常重要和廣泛,今天我們來介紹:如何在英碼科技EA500I邊緣計算盒子上使用昇騰Mind SDK來實現實時人體關鍵點檢測。

8b766930-feac-11ee-9118-92fbcf53809c.jpg

案例概述

本應用以英碼科技EA500I邊緣計算盒子為主要硬件平臺,使用昇騰MindX SDK開發端到端人體關鍵點識別的參考設計,實現對視頻中的人體進行關鍵點識別的功能。

案例說明

本案例參考華為昇騰Mind SDK 實時人體關鍵點檢測,底層原理邏輯請參考:<昇騰社區應用案例>

前置條件

8bcbbb74-feac-11ee-9118-92fbcf53809c.png

1環境安裝
●注意:


?以下操作以普通用戶HwHiAiUser安裝CANN包為例說明,推薦使用root用戶進行操作,如果是root用戶,請將安裝準備中所有的${HOME}修改為/usr/local。


?推薦按照本文檔路徑進行操作,如安裝在自定義路徑可能會導致環境沖突等問題

①配置相關環境

# 以安裝用戶在任意目錄下執行以下命令,打開.bashrc文件。vi ~/.bashrc # 在文件最后一行后面添加如下內容。source ${HOME}/Ascend/ascend-toolkit/set_env.shsource /home/work/MindX_SDK/mxVision-5.0.RC3/set_env.sh
export CPU_ARCH=`arch`export THIRDPART_PATH=${HOME}/Ascend/thirdpart/${CPU_ARCH} #代碼編譯時鏈接samples所依賴的相關庫文件export LD_LIBRARY_PATH=${THIRDPART_PATH}/lib:$LD_LIBRARY_PATH #運行時鏈接庫文件export INSTALL_DIR=${HOME}/Ascend/ascend-toolkit/latest #CANN軟件安裝后的文件存儲路徑,根據安裝目錄自行修改export DDK_PATH=${HOME}/Ascend/ascend-toolkit/latest #聲明CANN環境export NPU_HOST_LIB=${DDK_PATH}/runtime/lib64/stub #聲明CANN環境# 執行命令保存文件并退出。:wq! # 執行命令使其立即生效。source ~/.bashrc# 創建samples相關依賴文件夾mkdir -p ${THIRDPART_PATH}# 下載源碼并安裝gitcd ${HOME}sudo apt-get install gitgit clone https://gitee.com/ascend/samples.git# 拷貝公共文件到samples相關依賴路徑中cp -r ${HOME}/samples/common ${THIRDPART_PATH} # 拷貝media_mini等so文件以及相關頭文件mkdir -p ${INSTALL_DIR}/drivercp /usr/lib64/libmedia_mini.so ${INSTALL_DIR}/driver/ #如路徑中沒有相關so文件,可跳過該命令cp /usr/lib64/libslog.so ${INSTALL_DIR}/driver/cp /usr/lib64/libc_sec.so ${INSTALL_DIR}/driver/cp /usr/lib64/libmmpa.so ${INSTALL_DIR}/driver/cp /usr/local/Ascend/include/peripheral_api.h ${INSTALL_DIR}/driver/ #如路徑中沒有相關頭文件,可跳過該命令# 下載案例源碼并安裝gitcd ${HOME}git clone https://gitee.com/ascend/mindxsdk-referenceapps.git

②安裝x264插件

# 下載x264cd ${HOME}git clone https://code.videolan.org/videolan/x264.gitcd x264# 安裝x264./configure --enable-shared --disable-asmmakesudo make installsudo cp /usr/local/lib/libx264.so.164 /lib

8be68c1a-feac-11ee-9118-92fbcf53809c.png

③安裝部署ffmpeg

# 下載ffmpegcd ${HOME}wget http://www.ffmpeg.org/releases/ffmpeg-4.1.3.tar.gz --no-check-certificatetar -zxvf ffmpeg-4.1.3.tar.gzcd ffmpeg-4.1.3# 安裝ffmpeg./configure --enable-shared --enable-pic --enable-static --disable-x86asm --enable-libx264 --enable-gpl --prefix=${THIRDPART_PATH} #此步驟報錯可參考FAQmake -j8make install# 添加環境變量vi ~/.bashrc # 在文件最后一行后面添加如下內容。export PATH=${HOME}/Ascend/thirdpart/aarch64/bin:$PATH# 執行命令保存文件并退出。:wq! # 執行命令使其立即生效。source ~/.bashrc

8bfdf58a-feac-11ee-9118-92fbcf53809c.png

④安裝live555

# 下載相應版本的live555軟件包,該版本測試可用,部分版本的軟件包會有代碼編譯的報錯cd ${HOME}wget http://www.live555.com/liveMedia/public/live.xxxx.xx.xx.tar.gz(請根據實際版本下載)tar -zxvf live.xxxx.xx.xx.tar.gzcd live/# 修改config.linuxvi config.linux找到:CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1替換為:CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1 -std=c++2a# 執行命令保存文件并退出。:wq! # 配置視頻循環推流,按照以下提示修改文件可以使自主搭建的rtsp循環推流,如果不作更改,則為有限的視頻流cd ./liveMedia/vi ByteStreamFileSource.cpp# 在liveMedia庫下的ByteStreamFileSource.cpp文件中的95行,找到:void ByteStreamFileSource::doGetNextFrame() {
if (feof(fFid) || ferror(fFid) || (fLimitNumBytesToStream && fNumBytesToStream == 0)){ handleClosure(); return; }# 替換為:void ByteStreamFileSource::doGetNextFrame() {
if (feof(fFid) || ferror(fFid) || (fLimitNumBytesToStream && fNumBytesToStream == 0)) { //handleClosure();** //return;** fseek(fFid, 0, SEEK_SET); }# 執行命令保存文件并退出。:wq! # 編譯并安裝cd .../genMakefiles linux #注意后面這個參數是根據當前文件夾下config.<后綴>獲取得到的,與服務器架構等有關。make -j8# 編譯完成后就會在當前目錄下生成mediaServer 文件夾,有一個live555MediaServer可執行文件# 防止推流丟幀cd ../mediaServervi DynamicRTSPServer.cpp在mediaServer的DynamicRTSPServer.cpp文件中,修改每一處OutPacketBuffer::maxSize的值,更改到800000,該版本有三處需要修改。# 執行命令保存文件并退出。:wq!# 修改了代碼后需要重新執行編譯cd ..make clean./genMakefiles linux #注意后面這個參數是根據當前文件夾下config.<后綴>獲取得到的,與服務器架構等有關。make -j8# 轉換MP4文件,把需要推流的人體MP4視頻文件上傳到相應目錄,執行命令轉換成h264文件,相應參數請自行修改ffmpeg -i test.mp4 -vcodec h264 -bf 0 -g 25 -r 10 -s 1280*720 -an -f h264 test1.264//-bf B幀數目控制,-g 關鍵幀間隔控制,-s 分辨率控制 -an關閉音頻, -r 指定幀率# 把轉換后的h264文件拷貝到${HOME}/live/mediaServer/路徑下# 啟動推流./live555MediaServer# 啟動完成會輸出推流地址,其中rtsp_Url的格式是 rtsp://host:port/Data,host:port/路徑映射到mediaServer/目錄下,Data為視頻文件的路徑。例:rtsp://10.1.30.111:80/test1.h264# 啟動成功后該終端窗口會一直推流,請另開一個終端窗口進行后續步驟

8c169702-feac-11ee-9118-92fbcf53809c.png

2模型獲取&轉換

# 進入案例路徑,mindxsdk-referenceapps為前置步驟中下載的案例包cd ${HOME}/mindxsdk-referenceapps/contrib/RTMHumanKeypointsDetection# 在models路徑下下載原始模型,下列鏈接可下載512x512的onnx模型文件cd ./modelswget https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/RTMHumanKeypointsDetection/human-pose-estimation512.onnx --no-check-certificate# 進入"${RTMHumanKeypointsDetection代碼包目錄}/models/"目錄,對"insert_op.cfg"文件做以下修改related_input_rank: 0src_image_size_w: 512 # onnx模型輸入的寬,請根據對應模型進行修改,如使用本案例文檔下載的原始模型,則不需要修改src_image_size_h: 512 # onnx模型輸入的高,請根據對應模型進行修改,如使用本案例文檔下載的原始模型,則不需要修改crop: false# 使用ATC工具進行模型轉換atc --model=./human-pose-estimation512.onnx --framework=5 --output=openpose_pytorch_512 --soc_version=Ascend310B1 --input_shape="data:1, 3, 512, 512" --input_format=NCHW --insert_op_conf=./insert_op.cfg

3編譯運行案例

# 修改RTMHumanKeypointsDetection/pipeline目錄下的rtmOpenpose.pipeline文件中mxpi_rtspsrc0的內容。 "mxpi_rtspsrc0": { "factory": "mxpi_rtspsrc", "props": { "rtspUrl":"rtsp://xxx.xxx.xxx.xxx:xxxx/xxx.264", // 修改為自己所使用的的服務器和文件名,例:rtsp://10.1.30.111:80/test1.h264 "channelId": "0" }, "next": "mxpi_videodecoder0" }, # 注意檢查om模型文件名是否和pipeline/rtmOpenpose.pipeline中的mxpi_tensorinfer0 插件 modelPath 屬性值相同,若不同需改為一致。 "mxpi_tensorinfer0":{ "next":"mxpi_rtmopenposepostprocess0", "factory":"mxpi_tensorinfer", "props":{ "dataSource": "mxpi_imageresize0", "modelPath":"./models/openpose_pytorch_512.om"http://檢查om模型文件名是否正確 } },# 若修改了模型的輸入尺寸,還需要將 mxpi_imageresize0 插件中的 resizeWidth 和 resizeHeight 屬性改成修改后的模型輸入尺寸值;將 mxpi_rtmopenposepostprocess0 插件中的 inputWidth 和 inputHeight 屬性改成修改后的模型輸入尺寸值。 "mxpi_imageresize0":{ "next":"queue3", "factory":"mxpi_imageresize", "props":{ "interpolation":"2", "resizeWidth":"512",//輸入的寬,請根據對應模型進行修改 "resizeHeight":"512",//輸入的高,請根據對應模型進行修改 "dataSource":"mxpi_videodecoder0", "resizeType":"Resizer_KeepAspectRatio_Fit" } }, ...... "mxpi_rtmopenposepostprocess0":{ "next":"queue4", "factory":"mxpi_rtmopenposepostprocess", "props":{ "imageSource":"mxpi_videodecoder0", "inputHeight":"512",//輸入的高,請根據對應模型進行修改 "dataSource":"mxpi_tensorinfer0", "inputWidth":"512"http://輸入的寬,請根據對應模型進行修改 } },# 將pipeline里面的 mxpi_videoencoder0 插件中的 imageHeight 和 imageWidth 更改為上傳視頻的實際高和寬。 "mxpi_videoencoder0":{ "props": { "inputFormat": "YUV420SP_NV12", "outputFormat": "H264", "fps": "1", "iFrameInterval": "50", "imageHeight": "720",#上傳視頻的實際高 "imageWidth": "1280"#上傳視頻的實際寬 },# 本項目需要使用 mxpi_opencvosd 插件,使用前需要生成所需的模型文件。執行MindX SDK開發套件包安裝目錄下 operators/opencvosd/generate_osd_om.sh 腳本生成所需模型文件。例:bash /home/work/MindX_SDK/mxVision-5.0.RC3/operators/opencvosd/generate_osd_om.sh# 編譯項目cd ${HOME}/mindxsdk-referenceapps/contrib/RTMHumanKeypointsDetectionvi CMakeLists.txt# 在target_link_libraries處添加:cpprest例:target_link_libraries(main glog mxbase cpprest plugintoolkit mxpidatatype streammanager mindxsdk_protobuf)cd ./pluginsbash build.sh# 運行推理bash run.sh# 運行成功后如無報錯會在當前路徑下生成一個out.h264文件# 轉換為MP4文件ffmpeg -i out.h264 -c copy output.mp4

8c3695ac-feac-11ee-9118-92fbcf53809c.png

8c6d9098-feac-11ee-9118-92fbcf53809c.png

4案例展示轉換為MP4文件后,可以看到視頻中的人體關鍵點。

至此,實時人體關鍵點檢測應用部署成功,以下是英碼科技技術工程師在實際操作過程中遇到的相關FAQ,供大家參考~

5相關FAQ
①安裝ffmpeg執行命令:./configure時報錯:“Unable to create and execute files in /tmp. Set the TMPDIR environm”?該報錯可能是環境問題

# 聲明相關環境

export TMPDIR=~/tmp-ffmpeg

mkdir $TMPDIR

# 之后再執行./configure .......

②如果在使用Live555進行拉流時,依舊出現”The input frame datawas too large for our buffer“問題,導致丟幀。?嘗試進行下列優化

在“live/liveMedia/StreamParser.cpp”中擴展幀解析buffer大小,即BANK_SIZE,默認值為150k,根據傳輸的H264數據幀大小,至少設置為300k。否則超出大小,可能會被Live555拋棄。

8ca442aa-feac-11ee-9118-92fbcf53809c.png

在“live/liveMedia/MediaSink.cpp”中增加OutPacketBuffer::maxSize大小,同樣為了容納超大幀數據,否則可能會導致數據丟失,設置為 600000。

8cc9aefa-feac-11ee-9118-92fbcf53809c.png

在“live/liveMedia/MultiFramedRTPsource.cpp”中增加socket發送緩沖區大小,即increaseSendBufferTo函數的參數值--increaseRecieveBufferTo(env, RTPgs-> socketNUm(), 2000000)”

8ce91f88-feac-11ee-9118-92fbcf53809c.png

結語

8b91d562-feac-11ee-9118-92fbcf53809c.png以上就是英碼科技EA500I邊緣計算盒子基于昇騰Mind SDK實現實時人體關鍵點檢測應用的全部操作內容,將持續推出更多基于昇騰AI芯片的邊緣計算盒子和技術干貨,歡迎大家持續關注和留言交流~

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

    關注

    5

    文章

    4085

    瀏覽量

    90746
  • AI
    AI
    +關注

    關注

    87

    文章

    26459

    瀏覽量

    264080
  • SDK
    SDK
    +關注

    關注

    3

    文章

    966

    瀏覽量

    44712
收藏 人收藏

    評論

    相關推薦

    【昇騰系列產品應用】英碼科技EA500I邊緣計算盒子接口使用示例和目標檢測算法演示

    EA500I是英碼科技聯合華為昇騰精心打造的AI邊緣計算盒子,其搭載昇騰310系列處理器,可提供20TOPSINT8的計算能力,并設計了豐富的外圍接口,包括Type-C系統調試口、LINE音頻接口
    的頭像 發表于 03-30 08:25 ?73次閱讀
    【昇騰系列產品應用】英碼科技<b class='flag-5'>EA500I</b>邊緣計算盒子接口使用示例和目標<b class='flag-5'>檢測</b>算法演示

    【EASY EAI Nano】RV1126實時讀取攝像頭并進行yolo檢測顯示

    實現了三個并行模塊,分別是 攝像頭讀取,使用opencv轉換到適合大小 yolo檢測 托管到Qt進行現實 檢測的DEMO從每幀10次改到每幀2次,可以看到還是具備一定
    發表于 01-14 18:53

    【飛凌 OK113i-C 全志T113-i開發板】測試實時系統

    被稱為Real-Time(RT)補丁。它通過增加內核的可搶占性,使得Linux內核能夠實現實時性能。PREEMPT-RT補丁提供了可配置的實時選項,可以根據應用程序的需求進行調整。這個版本跟內核的版本
    發表于 12-25 09:50

    配網故障定位系統:實現實時監測、精準控制

    隨著電力系統的不斷發展,配電網絡的規模和復雜性也在不斷增加,這使得配網故障的排查和處理變得越來越困難。為了提高配電網絡的安全性和可靠性,業界紛紛引入了配網故障定位系統,以實現實時監測、精準控制。本文將以“配網行波型故障預警與定位系統”為關鍵詞,詳細介紹這一技術的應用及其優
    的頭像 發表于 12-12 10:49 ?250次閱讀

    人體感應燈是如何檢測到人的存在的?

    人體感應燈是如何檢測到人的存在的? 人體感應燈是一種智能照明設備,它可以偵測到人的存在,并在人接近或離開時自動開啟或關閉。這一技術的實現離不開人體
    的頭像 發表于 12-07 11:09 ?626次閱讀

    基于NXP微控制器i.MX RT1170的多人體實時檢測算法和系統

    基于NXP微控制器i.MX RT1170的多人體實時檢測算法和系統
    的頭像 發表于 10-26 16:27 ?706次閱讀
    基于NXP微控制器i.MX RT1170的多<b class='flag-5'>人體</b><b class='flag-5'>實時</b><b class='flag-5'>檢測</b>算法和系統

    加特蘭發布基于Rhine SoC單芯片的室內人體點云SDK

    近期,加特蘭發布了基于Rhine SoC單芯片的室內人體點云SDK,通過集成加特蘭最新研發的室內人體感知應用組件,輸出豐富、高質量、高凝聚度、高感知力的動靜人體點云數據,幫助客戶開發出
    的頭像 發表于 10-11 11:47 ?807次閱讀

    人體健康指標實時監測系統設計

    的多參量設備,并在Android智能手機平臺上開發實時監測采集系統。并以體積小、功耗低、可實時監控等優點完成醫院以及家庭醫療等條件下的家庭醫療的需求,充分實現了家庭醫療的實時性,預防性
    發表于 09-27 07:06

    科技精彩亮相火爆的IOTE 2023,多面賦能AIoT產業發展!

    于智慧城市、智慧應急、智慧交通、智慧校園、智慧金融、智慧園區等領域。科技“深元”AI引擎為客戶提供算法到算力的一體化快速生產模式,實實在在賦能企業快速具備AI能力,實現降本增效。 本次生態大會重磅
    發表于 09-25 10:03

    泰倫新成果發布交流會線上直播預約開啟

    SDK,燒錄到芯片中即可。全程零代,極大地簡化了開發流程,讓開發門檻更低,更高效。 以上只是部分劇透,了解詳細內容請關注直播哦。 直播詳情 01直播主題 《用AI解鎖聲音的奧秘——啟泰倫新成果發布
    發表于 08-15 14:31

    AI深度相機-人體姿態估計應用

    我們非常高興地發布一個新的代碼示例,展示虹科AI深度相機SDK的驚人功能。只需6行源代碼,您就可以實時準確地估計和跟蹤人體姿態!我們最新的代碼示例使用AI機器學習技術來識別和跟蹤人體
    的頭像 發表于 07-31 17:42 ?617次閱讀
    AI深度相機-<b class='flag-5'>人體</b>姿態估計應用

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

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

    RG500U-EA順利完成海外多局點場測,以優越性能助力5G客戶揚帆出海

    一步為海外用戶提供穩定、可靠、極具性價比的5G網絡連接,助力全球5G產業實現大規模商用。 海外測試,性能再升級 RG500U-EA海外場測在歐洲、東南亞、中亞、非洲、拉美、中東的多個國家和地區完成,對搭載RG500U-EA的5G
    發表于 06-25 11:01 ?406次閱讀
    RG<b class='flag-5'>500U-EA</b>順利完成海外多局點場測,以優越性能助力5G客戶揚帆出海

    ?使用旭日X3派實現手勢檢測

    本篇博客通過旭日X3搭載手勢識別算法,實現實時檢測,同時測試其運行性能。
    的頭像 發表于 06-02 17:36 ?569次閱讀
    ?使用旭日X3派<b class='flag-5'>實現</b>手勢<b class='flag-5'>檢測</b>

    點檢測儀的維護

    點檢測儀的維護。在線式露點儀,便攜式露點儀的維護保養
    的頭像 發表于 05-13 14:00 ?986次閱讀
    露<b class='flag-5'>點檢測</b>儀的維護
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>