Git Product home page Git Product logo

openpose_3d-pose-baseline_unity3d's Introduction

OpenPose + 3dPoseBaseline + Unity3d

Display

source video

image

online display video

image

offline display video

image

online 3d display video

image

offline 3d display video

image

Introduction

在Ubuntu 16.04下(使用笔记本电脑的单个摄像头)基于OpenPose和3dPoseBaseline来实时捕获人体关节点并将其转化为三维空间坐标,最后通过Unity3d来控制模型的动作。我的Baseline基于n1ckfg-OpenPoseRig,使用的机器是GTX 1060的笔记本电脑,实时检测的速度可以达到每秒10帧左右。这只是一个简易版本,原因在于我的程序存在下面两个问题

  • 当OpenPose检测的人体关节点不全时,将输入反馈到3dPoseBaseline中会导致三维关节点的转化出错
  • Unity三维人体模型的关节点移动依旧存在一些问题(关于这个问题,我会考虑请教U3D方向的大佬)

如果时间和精力充足,我会修复这两个问题,并考虑进一步优化整个过程。这里先把自己参考和学习的链接都放上来(剩下的都是自己走的弯路,没有太多参考价值)。

Experiment

joint point

OpenPose虽然具备检测三维关节点的功能,但是它需要多个摄像头才可以实现(而且维护人员好像对这个功能并不重视)。当然也有使用OpenPose二维关节点来控制Unity的开源程序,然而遗憾的是,在阅读源码之后,我发觉这个程序对我的帮助微乎其微。因此需要重新考虑使用其他方式来进行三维关节点坐标的获取,比如3dPoseBaseline。虽然ArashHosseini已经对3dPoseBaseline进行改进来转化OpenPose的关节点,但程序是基于COCO模型的,这个模型的检测速度很慢且OpenPose官方说后期会移除该模型。此外ArashHosseini的程序存在两个主要的不足

  • 没有很好的处理某一帧检测出错,即该帧没有检测到任何关节点的情况
  • 离线处理所有帧的效果确实非常好,但在线处理没有使用平滑且实时读取关节点JSON存在一些问题

unity3d

在与Unity模型进行交互的过程中,我认识到将真实世界坐标应用到Unity空间确实有难度。本以为只是简单的矩阵变换,但是我低估了这个过程的难度(也高估了自己在一年前对Unity的熟悉度)。阅读Kinect源码、查找相关博文......经过将近一星期的摸索,我也没有实现很理想的变换及应用方式(这也与自己的时间分配有关)。在一个很偶然的机会下,我发现了三位日本老哥的博文:博客1博客2博客3。感谢他们的博文,让我初步实现了这一功能(虽然展示效果依旧不是很理想)。这里我使用的核心Unity项目基于OpenPose-Rig

data transmission

可以考虑使用计算机网络的知识来完成该过程,具体参考网络传输,不过该方法不太稳定。这里建议使用本地数据传输。需要注意的是:文件的读和写不可以同时进行,这里需要做一些特殊处理。

result

最后我使用BODY_25模型来代替ArashHosseini程序中的COCO模型并修复该程序中的两个问题,最后对整个流程进行简化和整合。只需要运行一个简单的shell脚本,就可以完成实时检测关节点控制Unity的模型的功能,既可以自主选择交互的时间,也可以通过按下"Enter"键来退出程序并kill后台进程。基于OpenPose官方源程序,我禁用了UI和Render,这也在一定程度上提升了实时检测的速度。

Reference

https://github.com/CMU-Perceptual-Computing-Lab/openpose

https://github.com/n1ckfg/OpenPoseRig

https://github.com/keel-210/OpenPose-Rig

https://github.com/miu200521358/3d-pose-baseline-vmd

https://github.com/ArashHosseini/3d-pose-baseline

https://github.com/una-dinosauria/3d-pose-baseline

https://github.com/unity3d-jp/unitychan-crs

http://unity-chan.com/contents/guideline/

https://qiita.com/keel

https://qiita.com/romaroma

https://qiita.com/fuloru169

http://www.manew.com/thread-22128-1-1.html

https://pterneas.com/2014/05/06/understanding-kinect-coordinate-mapping/

openpose_3d-pose-baseline_unity3d's People

Contributors

zhenyuczy avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.