无限想象空间,用Python玩转3D人体姿态估计
前言
姿态估计,一直是近几年的研究热点。
它就是根据画面,捕捉人体的运动姿态,比如 2D 姿态估计:
再比如 3D 姿态估计:
看着好玩,那这玩应有啥用呢?
自动驾驶,大家应该都不陌生,很多公司研究这个方向。
自动驾驶里,就用到了人体行为识别。
通过摄像头捕捉追踪人体的动作变化,根据肢体动作或变化角度判断人体动作行为,可用于无人车、机器人、视频监控等行为分析需求场景。
而这些的基础,就是人体的姿态估计。
再比如,虚拟形象。
通过真人驱动,让虚拟形象具备类比真人的肢体动作,并支持与3D人脸特效、手势识别等功能结合应用,让虚拟形象更加灵活生动,可用于虚拟IP驱动、肢体驱动类游戏、远程授课或播报等场景。
姿态估计,无疑有着巨大的应用价值。
但今天,咱们说的这个算法,比上文提到的,还要酷炫一些!
它就是 FrankMocap。
FrankMocap
FrankMocap 是港中文联合 Facebook AI 研究院提出的3D 人体姿态和形状估计算法。
不仅仅是估计人体的运动姿态,甚至连身体的形状,手部的动作都可以一起计算出来。
算法很强大,能够从单目视频同时估计出 3D 人体和手部运动,在一块 GeForce RTX 2080 GPU 上能够达到 9.5 FPS。
缺点就是,速度有点慢,计算量较大,达到实时性有一定难度。
不过随着硬件的快速发展,这都不是问题,「老黄刀法」很给力。
FrankMocap 算法就在这几天,刚刚开源,有 Python 和深度学习基础的朋友,不容错过。
项目地址:
https://github.com/facebookresearch/frankmocap
算法使用 SMPL-X 人体模型。
给定一张彩色图片,通过两个网络模块分别预测手部姿态和人体姿态。
然后再通过整合模块将手和身体组合在一起,得到最终的3D全身模型,整个流程如下图所示:
在具体的各个模块的实现,那就涉及具体的数学公式了。
本文就不多做扩展了,感兴趣的小伙伴,可以直接看论文。
论文地址:
https://arxiv.org/pdf/2008.08324.pdf
论文对每个模块的公式,记录的很详细。
FrankMocap 算法怎么玩?
这里有详细的安装教程:
https://github.com/facebookresearch/frankmocap/blob/master/docs/INSTALL.md
除了常规的第三方库,还需要 Detectron2 用于手部动作捕捉,以及 Pytorch3D 做姿态渲染。
推荐使用 Anaconda 配置,环境配置完毕,就可以开始体验了。
使用方法很简单:
如果只做身体姿态捕捉,可以运行如下命令:
# using a machine with a monitor to show output on screen
python -m demo.demo_bodymocap --input_path ./sample_data/han_short.mp4 --out_dir ./mocap_output
# screenless mode (e.g., a remote server)
xvfb-run -a python -m demo.demo_bodymocap --input_path ./sample_data/han_short.mp4 --out_dir ./mocap_output
运行效果:
如果只做手部姿态捕捉,可以运行如下命令:
# using a machine with a monitor to show outputs on screen
python -m demo.demo_handmocap --input_path ./sample_data/han_hand_short.mp4 --out_dir ./mocap_output
# screenless mode (e.g., a remote server)
xvfb-run -a python -m demo.demo_handmocap --input_path ./sample_data/han_hand_short.mp4 --out_dir ./mocap_output
运行效果:
全身的姿态估计,使用如下指令:
# using a machine with a monitor to show outputs on screen
python -m demo.demo_frankmocap --input_path ./sample_data/han_short.mp4 --out_dir ./mocap_output
# screenless mode (e.g., a remote server)
python -m demo.demo_frankmocap --input_path ./sample_data/han_short.mp4 --out_dir ./mocap_output
运行效果:
总结
3D 人体全身运动姿态捕捉,可以做很多有意思的事情。
看到这项技术,你最先想到的,是能做个什么好玩的应用呢?
更多精彩推荐打通语言理论和统计NLP,Transformers/GNNs架构能做到吗?
自拍卡通化,拯救动画师,StyleGAN再次玩出新花样
干货!高频手撕算法合集来了
放弃 Windows 后 ,开源操作系统能成为主流桌面系统吗?
起底 ARM:留给中国队的时间不多了
- 通过shell绑定系统进程调优 (r4笔记第34天)
- Mybatis【入门】
- 数据结构04 链表的面试题
- 数据结构05 栈
- Mybatis【配置文件】
- Java 非线程安全的HashMap如何在多线程中使用
- Java基础-12(02)总结Scanner,String
- MySQL和Oracle对比学习之数据字典元数据(r4笔记第33天)
- Java中ArrayList与LinkedList的区别
- Mybatis【关联映射】
- Java中String、StringBuffer、StringBuilder的区别
- 一条全表扫描sql语句的分析 (r4笔记第32天)
- Mybatis【缓存、代理、逆向工程】
- 关于db_files和maxdatafiles的问题(r4笔记第31天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 细数 TS 中那些奇怪的符号
- 安装RabbitMQ无法访问localhost:15672的管理界面解决
- koa中http服务与websocket服务共享端口
- 第23天:NLP实战(七)——中文新闻主题分类
- Swoole v4.5.3 版本发布
- .NET5.0 单文件发布打包操作深度剖析
- 使用ng-container标签在SAP Spartacus里插入UI
- 自定义SAP Spartacus Cart界面
- 还是只使用console.log()进行调试?好吧,其实还有更多。
- SNMP++: Transport is not supported
- Codeforces Round #666 (Div. 2) A-D
- 深度剖析前端JavaScript中的原型(JS的对象原型)
- dotnet OpenXML 颜色变换
- n维空间的多面体的有向测度和重心
- 只会Vue怎么开发小程序?Vue和微信小程序的到底有哪些区别?