体感Kinect手势识别开发基本原理
下述代碼摘自Kinect SDK 自帶例子;KinectImageView;
先安裝Kinect傳感器,開發包,搭建環境;網上有;
新建WPF或C#項目;一般使用WPF;用Winform有時候會有些問題;
引用Kinect命名空間;
using Microsoft.Kinect;
private KinectSensor kinectDevice;
定義一個變量,KinectSensor代表傳感器對象;
初始化;
if (this.kinectDevice.Status == KinectStatus.Connected)
{
this.kinectDevice.SkeletonStream.Enable();
this.kinectDevice.ColorStream.Enable();
…
this.kinectDevice.Start();
this.KinectDevice.SkeletonFrameReady += KinectDevice_SkeletonFrameReady;
}
KinectStatus,傳感器狀態枚舉;
this.kinectDevice.SkeletonStream.Enable(),使能骨骼跟蹤;
this.kinectDevice.Start();啟動傳感器;
this.KinectDevice.SkeletonFrameReady += KinectDevice_SkeletonFrameReady; 骨骼幀準備好事件;
Kinect的幀率為30幀/秒;Kinect傳感器的識別范圍為傳感器前方大體數米范圍的一個立體空間;此空間有X、Y、Z坐標;
站在Kinect傳感器前,Kinect識別出人體后,如果開發環境都已配置好;
在程序中引入SkeletonFrameReady事件,將會在此事件中收到骨骼幀;每個骨骼幀包含人體各個關節的坐標;
每秒鐘會收到30個骨骼幀,SkeletonFrameReady事件每秒自動觸發30次;
基本的手勢或人體姿態識別代碼大體如下;可以識別手的動作,也可以識別身體其他部位的動作;
做開發的時候經常需要站起來做動作,看上去你和辦公室其他人很不一樣;
Skeleton skeleton = GetPrimarySkeleton(this.frameSkeletons);
執行完此句將獲取到一個骨骼幀數據;里面包含人體各個關節,關節的坐標;
Joint head = skeleton.Joints[JointType.Head];
獲取頭關節;
Joint leftHand = skeleton.Joints[JointType.HandLeft];
獲取左手關節;
Joint leftWrist = skeleton.Joints[JointType.WristLeft];
獲取左腕關節;
Joint代表一個關節;
獲取關節中的點坐標;
Point leftHandPos = GetPosition(leftHand);
Point leftWristPos = GetPosition(leftWrist);
Point rightHandPos = GetPosition(rightHand);
Point rightWristPos = GetPosition(rightWrist);
private Point GetPosition(Joint hand)
{
Point p = new Point();
DepthImagePoint point = kinectDevice.MapSkeletonPointToDepth(hand.Position, this.kinectDevice.DepthStream.Format);
p.X = (int)((point.X * LayoutRoot.ActualWidth / kinectDevice.DepthStream.FrameWidth));
p.Y = (int)((point.Y * LayoutRoot.ActualHeight / kinectDevice.DepthStream.FrameHeight));
return p;
}
if (rightHandPos.Y < rightWristPos.Y && leftHandPos.Y < leftWristPos.Y)
通過比較關節點坐標來判斷;比如右手的X坐標持續增大,則可判為右手進行了右揮或右移;
最基本的原理就是它傳關節坐標給你,你根據關節坐標增大減小判斷左移右移等;
如果要識別多一些,更進一步可根據關節坐標計算一些三角函數等;
開發還是有一定難度;因為并不是判斷一次x坐標增大或減小,就判斷人體關節進行了左移或右移;
要在每秒30幀中持續判斷,才能判出姿態;
可能有的用詞不太準確;憑記憶寫的;
手勢識別可以翻閱PPT等;有的場合可能不方便用鼠標或鍵盤操作電腦,離開屏幕遠一些,此時一些簡單操作可用手勢進行;一般大屏比較適用;
體感有多種用途;見此;
https://blog.csdn.net/bcbobo21cn/article/details/105592485
總結
以上是生活随笔為你收集整理的体感Kinect手势识别开发基本原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SuperMap iClient for
- 下一篇: VC++ CryptoAPI最基本编程