热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PaddlePaddle跳舞机(IntelNuc+OpenVino)

项目介绍基于之前本人的项目如果感到快乐你就跳跳舞进行升级迭代开发。项目通过比较在音乐鼓点时姿态的相似度进行计分统计,有较强的互动娱乐性,特别是对于作者

项目介绍

基于之前本人的项目如果感到快乐你就跳跳舞 进行升级迭代开发。项目通过比较在音乐鼓点时姿态的相似度进行计分统计,有较强的互动娱乐性,特别是对于作者这种老肥宅的程序员有很不错的减脂效果。欢迎大家尝试体验!

本次项目主要升级点:

  • 采用了最新的更轻量级的PP-TinyPose升级版, 姿态点相对以前稳定性提升不少
  • 使用了更轻量级的Picodet行人检测模型,推理性能超实时
  • 在Intel Nuc硬件上基于OpenVino加速推理框架,性能非常惊艳
  • 移植了sort跟踪算法,在这种简单场景下已足够支持几个人的跟踪
  • 每次游戏结束还会通过PPLCNet提取行人特征,可简单大致查找选手之前的分数,要做到更精确识别需要进行人脸识别
  • 选手在镜头前举手动作持续5秒可自动开始或结束当前游戏
  • 同时为了提升体验,增加了音效和背景

todo 视频

注意: 所有素材均来自互联网,若有侵权,请联系删除

界面设计

界面布局主要分成3部分,上方中间显示姿态匹配正确的次数:

  • 左侧上方是鼓点时刻参考舞蹈的姿态
  • 左侧下方是参考舞蹈视频源
  • 右侧上方是鼓点时实时视频的姿态
  • 右侧下方是摄像头实时视频源头





图片替换文本

菜单管理

这次升级中暂无明显改动,在参考舞蹈视频源区域右键单击显示菜单, 主要包括

  • 摄像头设置
  • 歌曲管理
  • 开始游戏(游戏未开始时)
  • 停止游始(游戏运行时)
  • 全屏显示
  • 退出

点击歌曲管理后可以添加删除舞蹈视频, 也可以在歌曲列表切换当前选中歌曲。

行人检测模型转换

# 下载openvino
!pip install openvino-dev --user

# 下载框架代码
!git clone https://gitee.com/paddlepaddle/PaddleDetection.git

Cloning into 'PaddleDetection'...
remote: Enumerating objects: 254557, done.[K
remote: Counting objects: 100% (235027/235027), done.[K
remote: Compressing objects: 100% (42643/42643), done.[K
remote: Total 254557 (delta 193625), reused 232717 (delta 191595), pack-reused 19530[K
Receiving objects: 100% (254557/254557), 411.82 MiB | 24.67 MiB/s, done.
Resolving deltas: 100% (208174/208174), done.
Checking connectivity... done.

# 导出行人检测静态图模型
%cd /home/aistudio/PaddleDetection
!python tools/export_model.py -c configs/picodet/application/pedestrian_detection/picodet_s_320_lcnet_pedestrian.yml \-o weights=https://bj.bcebos.com/v1/paddledet/models/keypoint/tinypose_enhance/picodet_s_320_lcnet_pedestrian.pdparams \export.benchmark=False export.nms=False \--output_dir=output_pedestrain_onnx

/home/aistudio/PaddleDetection
Warning: import ppdet from source directory without installing, run 'python setup.py install' to install ppdet firstly
[11/22 00:28:41] ppdet.utils.checkpoint INFO: Finish loading model weights: /home/aistudio/.cache/paddle/weights/picodet_s_320_lcnet_pedestrian.pdparams
[11/22 00:28:41] ppdet.data.source.category WARNING: anno_file 'dataset/coco/annotations/instances_val2017.json' is None or not set or not exist, please recheck TrainDataset/EvalDataset/TestDataset.anno_path, otherwise the default categories will be used by metric_type.
[11/22 00:28:41] ppdet.data.source.category WARNING: metric_type: COCO, load default categories of COCO.
[11/22 00:28:41] ppdet.engine INFO: Export inference config file to output_pedestrain_onnx/picodet_s_320_lcnet_pedestrian/infer_cfg.yml
[11/22 00:28:46] ppdet.engine INFO: Export model and saved in output_pedestrain_onnx/picodet_s_320_lcnet_pedestrian

# 导出onnx
# !pip install paddle2onnx
%cd /home/aistudio/PaddleDetection
!paddle2onnx --model_dir output_pedestrain_onnx/picodet_s_320_lcnet_pedestrian/ \--model_filename model.pdmodel \--params_filename model.pdiparams \--opset_version 11 \--input_shape_dict "{'image':[1, 3, 320, 320]}" \--save_file pedestrain.onnx

/home/aistudio/PaddleDetection
[1;31;40m2022-11-22 00:29:45 [WARNING] [Deprecated] The flag `--input_shape_dict` is deprecated, if you need to modify the input shape of PaddlePaddle model, please refer to this tool https://github.com/jiangjiajun/PaddleUtils/tree/main/paddle [0m
[Paddle2ONNX] Start to parse PaddlePaddle model...
[Paddle2ONNX] Model file path: output_pedestrain_onnx/picodet_s_320_lcnet_pedestrian/model.pdmodel
[Paddle2ONNX] Paramters file path: output_pedestrain_onnx/picodet_s_320_lcnet_pedestrian/model.pdiparams
[Paddle2ONNX] Start to parsing Paddle model...
[Paddle2ONNX] Use opset_version = 11 for ONNX export.
[Paddle2ONNX] PaddlePaddle model is exported as ONNX format now.
2022-11-22 00:29:46 [INFO] ===============Make PaddlePaddle Better!================
2022-11-22 00:29:46 [INFO] A little survey: https://iwenjuan.baidu.com/?code=r8hu2s

# 安装onnx和onnxsim
!pip install -U onnx onnxsim onnxruntime

# 优化onnx模型
%cd /home/aistudio/PaddleDetection
!onnxsim pedestrain.onnx pedestrain_sim.onnx

/home/aistudio/PaddleDetection
Simplifying[33m...[0m
Finish! Here is the difference:
┏━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓
┃[1m [0m[1m [0m[1m [0m┃[1m [0m[1mOriginal Model[0m[1m [0m┃[1m [0m[1mSimplified Model[0m[1m [0m┃
┡━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩
│ Add │ 81 │ 81 │
│ BatchNormalization │ 82 │ [1;32m0 [0m │
│ Clip │ 78 │ 78 │
│ Concat │ 7 │ 7 │
│ Constant │ 774 │ [1;32m0 [0m │
│ Conv │ 98 │ 98 │
│ Div │ 78 │ 78 │
│ GlobalAveragePool │ 6 │ 6 │
│ HardSigmoid │ 2 │ 2 │
│ MatMul │ 4 │ 4 │
│ Mul │ 90 │ 90 │
│ Relu │ 2 │ 2 │
│ Reshape │ 12 │ 12 │
│ Resize │ 2 │ 2 │
│ Sigmoid │ 12 │ 12 │
│ Softmax │ 4 │ 4 │
│ Split │ 1 │ 1 │
│ Sqrt │ 4 │ 4 │
│ Transpose │ 4 │ 4 │
│ Model Size │ 4.6MiB │ [1;32m4.5MiB [0m │
└────────────────────┴────────────────┴──────────────────┘

姿态模型转换

# 导出姿态模型静态图
%cd /home/aistudio/PaddleDetection
!python tools/export_model.py -c configs/keypoint/tiny_pose/tinypose_256x192.yml \-o weights=https://bj.bcebos.com/v1/paddledet/models/keypoint/tinypose_enhance/tinypose_256x192.pdparams \--output_dir=output_pose

/home/aistudio/PaddleDetection
Warning: import ppdet from source directory without installing, run 'python setup.py install' to install ppdet firstly
[11/21 23:24:52] ppdet.utils.download INFO: Downloading tinypose_256x192.pdparams from https://bj.bcebos.com/v1/paddledet/models/keypoint/tinypose_enhance/tinypose_256x192.pdparams
100%|█████████████████████████████████████| 5439/5439 [00:01<00:00, 3179.96KB/s]
[11/21 23:24:55] ppdet.utils.checkpoint INFO: Finish loading model weights: /home/aistudio/.cache/paddle/weights/tinypose_256x192.pdparams
[11/21 23:24:55] ppdet.engine INFO: Export inference config file to output_pose/tinypose_256x192/infer_cfg.yml
[11/21 23:25:10] ppdet.engine INFO: Export model and saved in output_pose/tinypose_256x192

# 导出onnx模型
%cd /home/aistudio/PaddleDetection
!paddle2onnx --model_dir output_pose/tinypose_256x192/ \--model_filename model.pdmodel \--params_filename model.pdiparams \--opset_version 11 \--save_file tinypose.onnx

/home/aistudio/PaddleDetection
[Paddle2ONNX] Start to parse PaddlePaddle model...
[Paddle2ONNX] Model file path: output_pose/tinypose_256x192/model.pdmodel
[Paddle2ONNX] Paramters file path: output_pose/tinypose_256x192/model.pdiparams
[Paddle2ONNX] Start to parsing Paddle model...
[Paddle2ONNX] Use opset_version &#61; 11 for ONNX export.
[Paddle2ONNX] PaddlePaddle model is exported as ONNX format now.
2022-11-21 23:25:45 [INFO] &#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;Make PaddlePaddle Better!&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;
2022-11-21 23:25:45 [INFO] A little survey: https://iwenjuan.baidu.com/?code&#61;r8hu2s

# 将模型转为openvino的&#xff29;&#xff32;格式
%cd /home/aistudio/PaddleDetection
!mo --framework onnx --input_model tinypose.onnx --output_dir ./ --input_shape [1,3,256,192]

行人检测和姿态识别联合推理

结合使用sort跟踪算法&#xff0c;推理第100帧图片, 目前在aistudio中无法直接运行openvino, 会报错 ModuleNotFoundError: No module named ‘openvino.runtime’

%cd /home/aistudio/track/
!python detector.py

运行推理结果示例如下&#xff1a;

图片替换文本

REID模型转换

本项目使用REID模型仅仅用于特征保存&#xff0c;方便快速查找某个舞者的历史分数&#xff0c;若要进一步更准确的查找&#xff0c;也可以用人脸识别模型替换。

参考转换姿态模型的步骤&#xff0c;简单几步即可完成:

CUDA_VISIBLE_DEVICES&#61;0 python tools/export_model.py -c configs/mot/deepsort/reid/deepsort_pplcnet.yml -o reid_weights&#61;https://paddledet.bj.bcebos.com/models/mot/deepsort/deepsort_pplcnet.pdparamspaddle2onnx --model_dir output_inference/deepsort_pplcnet \--model_filename model.pdmodel \--params_filename model.pdiparams \--opset_version 11 \--save_file reid.onnxmo reid.onnx --output_dir . --input_shape [1,3,64,192]

写在最后

本项目需要本地运行&#xff0c;基本可以运行&#xff0c;程序运行稳定性和匹配效果还需要进一步优化。

后期将做更多的功能升级&#xff0c;例如尝试3D姿态&#xff0c;多人模式&#xff0c;Unity等等。

关于作者


  • 成都飞桨领航团团长
  • PPDE
  • PFCC
  • AICA三期学员

我在AI Studio上获得青铜等级&#xff0c;点亮0个徽章&#xff0c;来互关呀~ https://aistudio.baidu.com/aistudio/personalcenter/thirdview/89442

请点击此处查看本环境基本用法.

Please click here for more detailed instructions.

此文章为搬运
原项目链接


推荐阅读
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • modulepaddle.fluidhasnoattributedata解决:pipinstallpaddlepaddle-gpu1.7.0.post107-ih ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 1.直接在cmd窗口运行pipinstalljieba2.使用conda自带的安装工具condainstalljieba3.有一些模块是无法使用以上两种方式安装上ÿ ... [详细]
author-avatar
橙橙_贲1999
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有