0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英码科技EA500I基于昇腾Mind SDK实现实时人体关键点检测

英码科技 ? 来源:英码科技 ? 作者:英码科技 ? 2024-04-21 17:44 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在教育、体育、安防、交通、医疗等领域中,实时人体关键点检测应用发挥着至关重要的作用,比如在体育训练时,实时人体关键点检测可以精确、实时地捕捉运动员的动作,从而进行动作分析和优化;在安防应用场景中,实时人体关键点检测应用可以用来识别异常行为或特定姿态,以达到场景安全防控的目的。

那么,什么是实时人体关键点检测?
简单来说,实时人体关键点检测是一种计算机视觉技术,它能够在图像或视频中实时地自动识别并标注出人体的关键部位,如关节点、头部等。

实时人体关键点检测在边缘计算领域的应用非常重要和广泛,今天我们来介绍:如何在英码科技EA500I边缘计算盒子上使用昇腾Mind SDK来实现实时人体关键点检测。

案例概述

本应用以英码科技EA500I边缘计算盒子为主要硬件平台,使用昇腾MindX SDK开发端到端人体关键点识别的参考设计,实现对视频中的人体进行关键点识别的功能。

案例说明

本案例参考华为昇腾Mind SDK 实时人体关键点检测,底层原理逻辑请参考:<昇腾社区应用案例>

前置条件

wKgaomYjXaCANyxYAARGWGREaIo093.png

一、环境安装

●注意:


?以下操作以普通用户HwHiAiUser安装CANN包为例说明,推荐使用root用户进行操作,如果是root用户,请将安装准备中所有的${HOME}修改为/usr/local。
?推荐按照本文档路径进行操作,如安装在自定义路径可能会导致环境冲突等问题

①配置相关环境

# 以安装用户在任意目录下执行以下命令,打开.bashrc文件。 vi ~/.bashrc # 在文件最后一行后面添加如下内容。 source ${HOME}/Ascend/ascend-toolkit/set_env.sh source /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} # 下载源码并安装git cd ${HOME} sudo apt-get install git git clone https://gitee.com/ascend/samples.git # 拷贝公共文件到samples相关依赖路径中 cp -r ${HOME}/samples/common ${THIRDPART_PATH} # 拷贝media_mini等so文件以及相关头文件 mkdir -p ${INSTALL_DIR}/driver cp /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/ #如路径中没有相关头文件,可跳过该命令 # 下载案例源码并安装git cd ${HOME} git clone https://gitee.com/ascend/mindxsdk-referenceapps.git

②安装x264插件

# 下载x264 cd ${HOME} git clone https://code.videolan.org/videolan/x264.git cd x264 # 安装x264 ./configure --enable-shared --disable-asm make sudo make install sudo cp /usr/local/lib/libx264.so.164 /lib

wKgaomYjXiWAamFpAAHENFoOOwQ594.png

③安装部署ffmpeg

# 下载ffmpeg cd ${HOME} wget http://www.ffmpeg.org/releases/ffmpeg-4.1.3.tar.gz --no-check-certificate tar -zxvf ffmpeg-4.1.3.tar.gz cd ffmpeg-4.1.3 # 安装ffmpeg ./configure --enable-shared --enable-pic --enable-static --disable-x86asm --enable-libx264 --enable-gpl --prefix=${THIRDPART_PATH} #此步骤报错可参考FAQ make -j8 make install # 添加环境变量 vi ~/.bashrc # 在文件最后一行后面添加如下内容。 export PATH=${HOME}/Ascend/thirdpart/aarch64/bin:$PATH # 执行命令保存文件并退出。 :wq! # 执行命令使其立即生效。 source ~/.bashrc

wKgaomYjXlGAGFfsAAfsa6cpNHA352.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.gz cd live/ # 修改config.linux vi 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 ../mediaServer vi 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 # 启动成功后该终端窗口会一直推流,请另开一个终端窗口进行后续步骤

wKgaomYjXnuARSgQAALuoWK1Chw560.png

二、模型获取&转换

# 进入案例路径,mindxsdk-referenceapps为前置步骤中下载的案例包 cd ${HOME}/mindxsdk-referenceapps/contrib/RTMHumanKeypointsDetection # 在models路径下下载原始模型,下列链接可下载512x512的onnx模型文件 cd ./models wget 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: 0 src_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

三、编译运行案例

# 修改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"//检查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"//输入的宽,请根据对应模型进行修改 } }, # 将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/RTMHumanKeypointsDetection vi CMakeLists.txt # 在target_link_libraries处添加:cpprest 例:target_link_libraries(main glog mxbase cpprest plugintoolkit mxpidatatype streammanager mindxsdk_protobuf) cd ./plugins bash build.sh # 运行推理 bash run.sh # 运行成功后如无报错会在当前路径下生成一个out.h264文件 # 转换为MP4文件 ffmpeg -i out.h264 -c copy output.mp4

wKgZomYjXx-AMRNVAAI6L1e8kFA948.png

wKgaomYjXx-AQV2RAAEWrWbYJik521.png

四、案例展示

转换为MP4文件后,可以看到视频中的人体关键点。

wKgaomYjXzeAD2VHAASbObMgCB8764.png

至此,实时人体关键点检测应用部署成功,以下是英码科技技术工程师在实际操作过程中遇到的相关FAQ,供大家参考~

五、相关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抛弃。

wKgZomYjX4SAbLVtAAEUCBaKCgI224.png

在“live/liveMedia/MediaSink.cpp”中增加OutPacketBuffer::maxSize大小,同样为了容纳超大帧数据,否则可能会导致数据丢失,设置为 600000。

wKgaomYjX5yAU18OAAEKXva7WBI759.png

在“live/liveMedia/MultiFramedRTPsource.cpp”中增加socket发送缓冲区大小,即increaseSendBufferTo函数的参数值--increaseRecieveBufferTo(env, RTPgs-> socketNUm(), 2000000)”

wKgaomYjX7eANakdAAFqfe74GAg359.png

结语

以上就是英码科技EA500I边缘计算盒子基于昇腾Mind SDK实现实时人体关键点检测应用的全部操作内容,将持续推出更多基于昇腾AI芯片的边缘计算盒子和技术干货,欢迎大家持续关注和留言交流~

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    460

    文章

    52624

    浏览量

    442785
  • AI
    AI
    +关注

    关注

    88

    文章

    35506

    浏览量

    281395
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1079

    浏览量

    49435
  • 边缘计算
    +关注

    关注

    22

    文章

    3347

    浏览量

    51086
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【开发实例】基于BPI-CanMV-K230D-Zero开发板实现人体关键点的实时动态识别

    本文介绍了香蕉派CanMVK230DZero开发板通过摄像头实现人体关键点的实时动态检测识别的项目设计。https://bbs.elecfa
    的头像 发表于 07-08 08:04 ?515次阅读
    【开发实例】基于BPI-CanMV-K230D-Zero开发板<b class='flag-5'>实现</b><b class='flag-5'>人体</b><b class='flag-5'>关键</b>点的<b class='flag-5'>实时</b>动态识别

    【BPI-CanMV-K230D-Zero开发板体验】人体关键点检测

    【BPI-CanMV-K230D-Zero开发板体验】人体关键点检测 本文介绍了香蕉派 CanMV K230D Zero 开发板通过摄像头实现人体
    发表于 06-28 13:18

    华为人工智能伙伴峰会成功举行

    近日,在华为中国合作伙伴大会期间,人工智能伙伴峰会在深圳正式召开。会上,华为计算业务总裁张迪煊发表了《与时代 共
    的头像 发表于 04-01 15:38 ?783次阅读

    DeepSeek在上的模型部署的常见问题及解决方案

    2024年12月26日,DeepSeek-V3横空出世,以其卓越性能备受瞩目。该模型发布即支持,用户可在硬件和MindIE推理引擎上实现
    的头像 发表于 03-25 16:53 ?957次阅读
    DeepSeek在<b class='flag-5'>昇</b><b class='flag-5'>腾</b>上的模型部署的常见问题及解决方案

    创思远达与合作推动AI PC应用创新

    近日,端侧智能领域创新者创思远达携手,基于算力平台正式发布一系列AIPC应用。双方深度融合了
    的头像 发表于 03-25 10:22 ?690次阅读

    Deepseek进入业务深水区,为什么需要大EP?

    行业智能化的高铁,由大EP+DeepSeek的双轨铺成
    的头像 发表于 03-17 15:09 ?1287次阅读
    Deepseek进入业务深水区,为什么需要<b class='flag-5'>昇</b><b class='flag-5'>腾</b>大EP?

    (原创)310B(8T/20T)算力主板定制方案

    310B(20T)算力主板规格书 1.功能、性能与接口a)310B 20T算力处理器, 4个64位TAISHAN V200M处理器核,最高主频1.8GHz,计算加速器如下:1)
    发表于 03-16 21:43

    润和软件将持续深化“+DeepSeek”技术路线

    近日,“+DeepSeek 智算引擎创新行”江苏省首站活动在南京成功举办,本次活动由南京江北新区产业技术研创园指导,江苏省人工智能学会、江苏鲲鹏·生态创新中心主办。江苏润和软件
    的头像 发表于 03-08 09:39 ?803次阅读

    漫话之《一体机请就位》

    为什么是DeepSeek部署「最优解」?
    的头像 发表于 03-07 00:12 ?1629次阅读
    漫话<b class='flag-5'>昇</b><b class='flag-5'>腾</b>之《一体机请就位》

    迅龙软件出席华为APN伙伴大会,获APN钻石伙伴授牌及两项大奖

    2025年2月15日,华为APN伙伴大会在深圳顺利举办。本次大会汇聚来自能源、交通、制造、教育等各行各业的APN合作伙伴,共同探讨APN产业生态的新机遇与发展路径,分享
    的头像 发表于 02-17 17:04 ?1103次阅读
    迅龙软件出席华为<b class='flag-5'>昇</b><b class='flag-5'>腾</b>APN伙伴大会,获<b class='flag-5'>昇</b><b class='flag-5'>腾</b>APN钻石伙伴授牌及两项大奖

    变频器图纸

    变频器图纸
    发表于 01-07 18:18 ?30次下载

    CHE100变频器原理图

    图纸包括:变频器电源及通讯电路变频器TMS320LF2406外围电路、变频器电
    发表于 12-16 11:06 ?11次下载

    《DNK210使用指南 -CanMV版 V1.0》第四十四章 人脸68关键点检测实验

    第四十四章 人脸68关键点检测实验 在上一章节中,介绍了利用maix.KPU模块实现了人脸属性分析,本章将继续介绍利用maix.KPU模块实现的人脸68
    发表于 11-18 14:28

    系列双处理边缘计算盒子DA500I,打造高效低延迟的视觉推理解决方案

    时效率较低,容易出现性能瓶颈,导致延迟增大;而GPU虽然在图像处理上表现优秀,但功耗较高且不能灵活应对多样化任务。 为应对这一挑战,科技推出系列首款双处理的边缘计算盒子—DA
    的头像 发表于 11-14 14:45 ?769次阅读
    <b class='flag-5'>昇</b><b class='flag-5'>腾</b>系列双处理边缘计算盒子DA<b class='flag-5'>500I</b>,打造高效低延迟的视觉推理解决方案

    思原生,助力智谱打造自主创新大模型体系!

    自从全面启动原生开发,越来越多的生态伙伴选择,大模型生态从“应用迁移”走向“原生开发”,充分依托
    的头像 发表于 08-20 18:29 ?816次阅读
    <b class='flag-5'>昇</b><b class='flag-5'>腾</b>与<b class='flag-5'>昇</b>思原生,助力智谱打造自主创新大模型体系!