本项目将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模型首先要下载其对应的model文件以及weight文件,下载链接分别为: pose_iter_440000.caffemodel以及 pose_deploy.prototxt
在MindStudio软件中,选择“Tools”->“Model Converter”打开模型转换器;分别加载model文件和weight文件,并设置输出模型的名称等。
本项目中使用的动作识别模型已上传至gitee的工程中,此处仅对模型转换做示例说明。动作识别模型是基于TensorFlow框架训练的模型,因此是pb类型。且模型输入为骨骼关键点的位置序列,因此无需进行图像预处理操作。图7.2展示了将动作识别模型转换为Davinci模型的参数配置。
本小节将案例系统部署分为三个部分,分别为配置开发板环境、部署动作识别项目以及实时传输摄像头数据。
项目部署前,首先需要配置Atlas 200DK的运行环境,分别安装编译工具以及OpenCV,本安装过程主要分为两个步骤
su root
vim /etc/netplan/01-netcfg.yaml
填写如图所示配置
填写后执行以下命令使配置生效,并将开发板网口接上可正常联网的网线
netplan apply
安装编译工具以及OpenCV
sudo apt-get install -y g++-aarch64-linux-gnu g++-5-aarch64-linux-gnu
git clone https://gitlab.com/libeigen/eigen.git
cd eigen
mkdir build
cd build
cmake ..
sudo make install
具体步骤请参考安装步骤
在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
链接:https://pan.baidu.com/s/1le0NzULkSUQA5i9QgeEN4Q 提取码:2xj7
链接:https://pan.baidu.com/s/1afbznTKAbVKo_oE8aIcS9w 提取码:86at
链接:https://pan.baidu.com/s/15BGqyTlYL53oGev_MtFY3A 提取码:jjye
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。