Unity AzureKinect 初识(二) 姿势识别
2021/02/04 插眼更新: 每次需要多识别一个姿势,需要加好多代码,公开bool值给外部调用,这是很不方便的,直接用委托的方式即可,委托绑定的时候最好放在Start()里,不要放在Awake(),完整代码放最后
效果: (右手过肩1秒之后,识别并打印信息)
1. 添加KinectManager.cs 和 KinectGestureManager.cs
2. 添加 Kinect4AzureInterface.cs
3.添加两个自定义的脚本TintGestureListener.cs ,TintGestureDemo.cs
这个是你需要识别的姿势,例如我只要识别右手举过肩,就写1,再在下面选择Raise Right Hand
如果需要识别多个:
在 TintGestureListener.cs 里面照着这个写法 多公开几个方法,让外部调用
/// <summary>
/// 右手举起过肩并保持至少一秒
/// </summary>
private bool RaiseRightHand;
/// <summary>
/// Determines whether swipe left is detected.
/// </summary>
/// <returns><c>true</c> if swipe left is detected; otherwise, <c>false</c>.</returns>
public bool IsRaiseRightHand()
{
if (RaiseRightHand)
{
RaiseRightHand = false;
return true;
}
return false;
}
再在下面,将对应的bool值设置为true
TintGestureDemo.cs
using UnityEngine;public class TintGestureDemo : MonoBehaviour
{void Update(){if (TintGestureListener.Instance.IsRaiseRightHand()){Debug.Log("右手举起过肩并保持至少一秒");}}
}
TintGestureListener.cs
using com.rfilkov.kinect;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TintGestureListener : MonoBehaviour, GestureListenerInterface
{[Tooltip("Index of the player, tracked by this component. 0 means the 1st player, 1 - the 2nd one, 2 - the 3rd one, etc.")]public int playerIndex = 0;[Tooltip("List of the gestures to detect.")]public List<GestureType> detectGestures = new List<GestureType>();// 单例public static TintGestureListener Instance;private void Awake(){Instance = this;}/// <summary>/// 右手举起过肩并保持至少一秒/// </summary>private bool RaiseRightHand;/// <summary>/// Determines whether swipe left is detected./// </summary>/// <returns><c>true</c> if swipe left is detected; otherwise, <c>false</c>.</returns>public bool IsRaiseRightHand(){if (RaiseRightHand){RaiseRightHand = false;return true;}return false;}public bool GestureCancelled(ulong userId, int userIndex, GestureType gesture, KinectInterop.JointType joint){return true;}public bool GestureCompleted(ulong userId, int userIndex, GestureType gesture, KinectInterop.JointType joint, Vector3 screenPos){if (userIndex != playerIndex)return false;switch (gesture){case GestureType.None:break;case GestureType.RaiseRightHand:// 识别举起右手RaiseRightHand = true;break;case GestureType.RaiseLeftHand:break;case GestureType.Psi:break;case GestureType.Tpose:break;case GestureType.Stop:break;case GestureType.Wave:break;case GestureType.SwipeLeft:break;case GestureType.SwipeRight:break;case GestureType.SwipeUp:break;case GestureType.SwipeDown:break;case GestureType.ZoomIn:break;case GestureType.ZoomOut:break;case GestureType.Wheel:break;case GestureType.Jump:break;case GestureType.Squat:break;case GestureType.Push:break;case GestureType.Pull:break;case GestureType.ShoulderLeftFront:break;case GestureType.ShoulderRightFront:break;case GestureType.LeanLeft:break;case GestureType.LeanRight:break;case GestureType.LeanForward:break;case GestureType.LeanBack:break;case GestureType.KickLeft:break;case GestureType.KickRight:break;case GestureType.Run:break;case GestureType.RaisedRightHorizontalLeftHand:break;case GestureType.RaisedLeftHorizontalRightHand:break;case GestureType.TouchRightElbow:break;case GestureType.TouchLeftElbow:break;case GestureType.MoveLeft:break;case GestureType.MoveRight:break;case GestureType.Apose:break;case GestureType.UserGesture1:break;case GestureType.UserGesture2:break;case GestureType.UserGesture3:break;case GestureType.UserGesture4:break;case GestureType.UserGesture5:break;case GestureType.UserGesture6:break;case GestureType.UserGesture7:break;case GestureType.UserGesture8:break;case GestureType.UserGesture9:break;case GestureType.UserGesture10:break;default:break;}return true;}public void GestureInProgress(ulong userId, int userIndex, GestureType gesture, float progress, KinectInterop.JointType joint, Vector3 screenPos){}public void UserDetected(ulong userId, int userIndex){if (userIndex == playerIndex){// as an example - detect these user specific gesturesKinectGestureManager gestureManager = KinectManager.Instance.gestureManager;// 识别所有姿势foreach (GestureType gesture in detectGestures){gestureManager.DetectGesture(userId, gesture);}}}public void UserLost(ulong userId, int userIndex){if (userIndex != playerIndex)return;}}
2020/02/04 代码更新:
调用示例:
using com.rfilkov.kinect;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class TintGestureListener : MonoBehaviour, GestureListenerInterface
{[Tooltip("Index of the player, tracked by this component. 0 means the 1st player, 1 - the 2nd one, 2 - the 3rd one, etc.")]public int playerIndex = 0;[Tooltip("List of the gestures to detect.")]public List<GestureType> detectGestures = new List<GestureType>();// 单例public static TintGestureListener Instance;private void Awake(){Instance = this;}public bool GestureCancelled(ulong userId, int userIndex, GestureType gesture, KinectInterop.JointType joint){return true;}public Action RaiseRightHandAction;public Action RaiseLeftHandAction;public Action SwipeLeftAction;public bool GestureCompleted(ulong userId, int userIndex, GestureType gesture, KinectInterop.JointType joint, Vector3 screenPos){if (userIndex != playerIndex)return false;switch (gesture){case GestureType.None:break;case GestureType.RaiseRightHand:// 识别举起右手RaiseRightHandAction?.Invoke();break;case GestureType.RaiseLeftHand:// 识别举起左手RaiseLeftHandAction?.Invoke();break;case GestureType.Psi:break;case GestureType.Tpose:break;case GestureType.Stop:break;case GestureType.Wave:break;case GestureType.SwipeLeft:SwipeLeftAction?.Invoke();break;case GestureType.SwipeRight:break;case GestureType.SwipeUp:break;case GestureType.SwipeDown:break;case GestureType.ZoomIn:break;case GestureType.ZoomOut:break;case GestureType.Wheel:break;case GestureType.Jump:break;case GestureType.Squat:break;case GestureType.Push:break;case GestureType.Pull:break;case GestureType.ShoulderLeftFront:break;case GestureType.ShoulderRightFront:break;case GestureType.LeanLeft:break;case GestureType.LeanRight:break;case GestureType.LeanForward:break;case GestureType.LeanBack:break;case GestureType.KickLeft:break;case GestureType.KickRight:break;case GestureType.Run:break;case GestureType.RaisedRightHorizontalLeftHand:break;case GestureType.RaisedLeftHorizontalRightHand:break;case GestureType.TouchRightElbow:break;case GestureType.TouchLeftElbow:break;case GestureType.MoveLeft:break;case GestureType.MoveRight:break;case GestureType.Apose:break;case GestureType.UserGesture1:break;case GestureType.UserGesture2:break;case GestureType.UserGesture3:break;case GestureType.UserGesture4:break;case GestureType.UserGesture5:break;case GestureType.UserGesture6:break;case GestureType.UserGesture7:break;case GestureType.UserGesture8:break;case GestureType.UserGesture9:break;case GestureType.UserGesture10:break;default:break;}return true;}public void GestureInProgress(ulong userId, int userIndex, GestureType gesture, float progress, KinectInterop.JointType joint, Vector3 screenPos){}public void UserDetected(ulong userId, int userIndex){if (userIndex == playerIndex){// as an example - detect these user specific gesturesKinectGestureManager gestureManager = KinectManager.Instance.gestureManager;// 识别所有姿势foreach (GestureType gesture in detectGestures){gestureManager.DetectGesture(userId, gesture);}}}public void UserLost(ulong userId, int userIndex){if (userIndex != playerIndex)return;}}
Unity AzureKinect 初识(二) 姿势识别相关推荐
- Unity AzureKinect 初识(四) 试衣镜
找带骨骼绑定的衣服绑定上这两个脚本组件便可以实现,官方示例一堆其他的,其实我觉得只要告诉大家最基本的,剩下的就由大家天马行空便可 注意点 如果需要叠加到画面例如下面那样 1. 你需要得到Color ...
- 初识二维码 第二讲 二维码的结构
初识二维码 第二讲二维码的结构 它分为功能部分与编码部分.功能部分用于定位,与二维码的版本与格式等元数据的存储. 二维码的大小到21*21的格子到177*177的格子.边长数为除4余1.边长数减去17 ...
- unity学习笔记-text文本识别html富文本(待改进)
unity学习笔记 text文本识别html富文本(待改进) 需求 逻辑 实现 xlua的安装 配置到unity 使用 改进优化(待改进) text文本识别html富文本(待改进) 需求 项目里需要将 ...
- 基于openpose的用户姿势识别
基于openpose数据的用户姿势识别 继续上一篇的github项目,继续将他修改成基于openpose数据集的网络结构. 1. 神经网络复习 为了方便读懂神经网络的框架代码和后续的网络按需修改,在这 ...
- 在成人影片里做17种姿势识别?大佬在线求助:训练集不够用!
点击上方"迈微AI研习社",选择"星标★"公众号 重磅干货,第一时间送达 转载自:新智元 后台回复"加群"进入-> CV 微信技术交流 ...
- 【计算机视觉40例】案例26:姿势识别
[导读]本文是专栏<计算机视觉40例简介>的第26个案例<姿势识别>.该专栏简要介绍李立宗主编<计算机视觉40例--从入门到深度学习(OpenCV-Python)> ...
- 蓝鸥Unity开发基础二——课时20 接口
蓝鸥Unity开发基础二--课时20 接口 一.接口 使用interface关键字定义接口 接口定义一组成员单不直接实现它们 二.实现接口 实现接口的任何类都必须实现其所有的成员方法 接口不能直接实例 ...
- 初识二维码 第二十讲 二维码解码程序的组件之一 摄像头拍照功能
初识二维码 第二十讲 二维码解码程序的组件之一 摄像头拍照功能 解码程序的第一个环节是通过摄像头这个硬件,得到二维码的图片. 对摄像头的工作原理来说,简单的描述如下:1是从摄像头得到模拟信号, ...
- 初识二维码 第三讲 二维码的编码流程
初识二维码 第三讲二维码的编码流程 第一步:数据分析 1.1 确定要编码的字符类型 1.2 选择所需要的纠错等级 1.3 选择版本 第二步:数据编码 2.1 字符数据转为位流 2.2 位流分为每8位一 ...
最新文章
- 《软件过程改进》练习题
- app 名字 android,SiRi App For Android名字特殊符号_九游手机游戏
- zookeeper基本原理及适用场景 转:http://blog.chinaunix.net/uid-26748613-id-4536290.html
- 【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识
- kbmmw 5.06.00 beta 发布
- 机器学习(三十一)——Linear Discriminant Analysis
- 一场高质量的技术盛会怎样炼成?「2019中国大数据技术大会」即将来临,邀您共赴!...
- gin context和官方context_[系列文章] Gin框架 - 安装和路由配置
- matplotlib.pyplot.savefig(*args, **kwargs)保存图片$close()关闭图片
- 虚拟化技术、云计算服务模式、Docker安装
- HTML页面多个平行四边形,平行四边形奥数题
- isql连接sybase_使用isql连接Sybase ASE数据库的常见错误及处理方式
- “美国人工智能倡议”解读
- android开发点击部分文字颜色,墨迹天气推Android版 单城数据流量不足0.5k
- [JLOI2008]将军
- css情景动画,CSS3 白天/黑夜场景轮回动画
- [SOA介绍]什么是SOA?
- 揭秘 zCloud 3.0丨企业需要怎么样的DBA?
- 音视频笔记-视锥细胞和视杆细胞的区别
- JAVA 利用FFmpegFrame 获取rstp监控视频流截图