1 Star 6 Fork 7

Jiashi / Atlas200DK动作识别

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Atlas200Dk动作识别

介绍

本项目将OpenPose人体骨骼关键点检测模型以及自行训练的基于时空图卷积网络的动作识别模型在Atlas 200 DK上进行了移植与部署,构建了一个人体动作识别系统,并利用此系统与四足机器人进行人机交互。该系统将实时视频流分解出的图像帧作为输入数据,首先利用OpenPose模型提取出人体的骨骼关键点;再利用动作识别模型对骨骼关键点序列进行识别,得到对应的动作id;最后将识别出的动作传送至四足机器人(绝影mini),使其执行相应的动作。

实验原理及流程

实验原理

本实验分成两个阶段,分别是训练阶段和预测阶段,如图6.1所示。 在进行动作识别网络训练和预测之前,首先要在Atlas 200DK上部署人体骨骼关键点检测算法OpenPose模型,OpenPose模型直接使用CMU实验室提供的预训练好的模型,利用其提供的模型结构和参数文件,对模型进行转换;并且实现获取图像帧序列和对图像预处理的算法,将其输入到OpenPose模型中进行推理,获得人体骨骼关键点序列。

训练阶段首先进行数据集的制作,使用OpenPose采集动作的人体骨骼关键点数据,之后再对数据进行预处理等过程,将其保存为tfrecord格式的文件,作为后续的训练数据;接着基于时空卷积网络设计动作识别网络,并对其进行训练、验证和评估,验证算法的有效性;最后将模型固化成pb格式的模型文件,用于后续模型转换;

预测阶段主要利用OpenPose推理后的人体骨骼关键点序列作为模型输入,并在推理后获取五种动作对应的置信度,得到概率最大的动作作为模型的识别结果,并将其发送至机器人的控制器来执行相应的动作。

实验流程

模型转换

在完成训练,得到动作识别模型之后,首先需要将基于Caffe的OpenPose模型以及基于TensorFlow的动作识别模型进行转换,将二者均转换为Ascend 310芯片支持的om模型(Davinci架构模型)。

OpenPose模型转换

对于OpenPose模型首先要下载其对应的model文件以及weight文件,下载链接分别为: pose_iter_440000.caffemodel以及 pose_deploy.prototxt

在MindStudio软件中,选择“Tools”->“Model Converter”打开模型转换器;分别加载model文件和weight文件,并设置输出模型的名称等。

动作识别模型转换

本项目中使用的动作识别模型已上传至gitee的工程中,此处仅对模型转换做示例说明。动作识别模型是基于TensorFlow框架训练的模型,因此是pb类型。且模型输入为骨骼关键点的位置序列,因此无需进行图像预处理操作。图7.2展示了将动作识别模型转换为Davinci模型的参数配置。

案例部署

本小节将案例系统部署分为三个部分,分别为配置开发板环境、部署动作识别项目以及实时传输摄像头数据。

配置开发板环境

项目部署前,首先需要配置Atlas 200DK的运行环境,分别安装编译工具以及OpenCV,本安装过程主要分为两个步骤

  1. 配置开发板联网

su root

vim /etc/netplan/01-netcfg.yaml

填写如图所示配置

填写后执行以下命令使配置生效,并将开发板网口接上可正常联网的网线

netplan apply

  1. 安装编译工具以及OpenCV

    • 安装编译工具

    sudo apt-get install -y g++-aarch64-linux-gnu g++-5-aarch64-linux-gnu

    • 安装Eigen库

    git clone https://gitlab.com/libeigen/eigen.git

    cd eigen

    mkdir build

    cd build

    cmake ..

    sudo make install

    • 安装OpenCV

    具体步骤请参考安装步骤

部署动作识别项目

在MindStudio中打开上述动作识别项目,首先需要导入OpenPose及动作识别的模型。在MindStudio对应工程上点击鼠标右键,选择“Add Model”,分别选择转换后的OpenPose模型及动作识别模型。

之后打开“Tools”->“Device Manager”,选择“Add Device”并在“Host IP”中输入已连接的Atlas 200DK的IP地址,将该设备添加到MindStudio中。

在MindStudio中选择“Build”->“Edit Build Configurations”,并将Target OS更改为Euleros2.8,点击“Build”开始编译项目。编译完成后点击运行,即开始将本项目部署至Atlas 200DK上。在将程序部署至Atlas 200DK后,即可直接利用安全外壳协议(Secure Shell,SSH)登录至Atlas 200DK开发板运行编译后的可执行文件,执行本项目。

实时摄像头数据传输

本项目的输入数据为RealSense相机捕获的图像画面,由于Atlas 200DK的Type-C接口只可作为从设备做输出,因此需要一台可以驱动RealSense的计算机将实时的图像画面传输至Atlas 200DK。(注意:若您无realsense传感器,也可以使用任意一个USB摄像头连接至本地的PC,通过OpenCV读取视频流,并分解出图像帧实时传输至Atlas端)本案例提供了一个基于Python2.7的示例代码,位于gesturedetection/send_image/send_image.py

注意事项

  • 请确保传输的图像中至少包含一个完整的人体,若OpenPose无法在该图像中识别出完整的一个人体的骨架,将输出“invalid image!”
  • 本项目默认输入的图像数据是编号从0-99不断滚动刷新的,例如:第一帧图像为0.jpg,第二帧为1.jpg …… 直到第100张图像为99.jpg,第101张图像为0.jpg …… 不断循环下去
  • 由于Atlas 200DK推理速度较快,当推理速度大于传输速度时,Atlas 200DK会将之前已经识别过的图像再处理一次。为了避免此类现象,本项目在读取某一张照片的时候,会将其对应的照片删除,例如:读取0.jpg时,删除50.jpg;读取80.jpg时删除30.jpg;读取27.jpg时删除77.jpg等。
  • 本项目输出规则为:若本次识别的动作与上次识别的动作相同,则不进行输出,只有当动作发生变换且可信度在阈值范围内才进行输出。
  • 本项目的gesturedetection/src/gesture_detect.cpp的 Result GestureDetect::Postprocess 函数最后会将识别到的结果发送至四足机器人的底层控制器,该部分代码对动作识别部分并无影响,您可以自行注释、删除或者保持原样。具体代码如下图所示:

相关链接

动作识别功能效果演示视频

链接:https://pan.baidu.com/s/1le0NzULkSUQA5i9QgeEN4Q 提取码:2xj7

SLAM效果演示视频

链接:https://pan.baidu.com/s/1afbznTKAbVKo_oE8aIcS9w 提取码:86at

教学视频与PPT

链接:https://pan.baidu.com/s/15BGqyTlYL53oGev_MtFY3A 提取码:jjye

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jiashiOrz/atlas_200dk_action_recognition.git
git@gitee.com:jiashiOrz/atlas_200dk_action_recognition.git
jiashiOrz
atlas_200dk_action_recognition
Atlas200DK动作识别
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891