Требование состоит в том, чтобы определить прямоугольник вокруг каждого глаза в трехмерном пространстве. Должен быть способ отслеживания глаз с помощью Microsoft Kinect SDK. Согласно thisКак отслеживать глаза с помощью Kinect SDK?
The Face Tracking SDK использует Kinect систему координат для вывода своих результатов 3D трекинга. Происхождение расположено на оптическом объекте камеры (датчик), ось Z направлена к пользователю, ось Y указывает вверх. Единицы измерения - это метры для перевода и градусы для углов поворота .
Добавление
...
Debug3DShape("OuterCornerOfRightEye", faceTrackFrame.Get3DShape()
[FeaturePoint.OuterCornerOfRightEye]);
Debug3DShape("InnerCornerRightEye", faceTrackFrame.Get3DShape()
[FeaturePoint.InnerCornerRightEye]);
Debug3DShape("InnerCornerLeftEye", faceTrackFrame.Get3DShape()
[FeaturePoint.InnerCornerLeftEye]);
Debug3DShape("OuterCornerOfLeftEye", faceTrackFrame.Get3DShape()
[FeaturePoint.OuterCornerOfLeftEye]);
...
private void Debug3DShape(string s, Vector3DF v)
{
Debug.WriteLine(s + " X " + v.X + " Y " + v.Y + " Z " + v.Z);
}
к CreateResult() в Microsoft.Kinect.Toolkit.FaceTracking печатает
OuterCornerOfRightEye X -0.05728126 Y 0.04850625 Z -0.1144406
InnerCornerRightEye X -0.01584376 Y 0.04850625 Z -0.1279687
InnerCornerLeftEye X 0.01584374 Y 0.04850625 Z -0.1279687
OuterCornerOfLeftEye X 0.05728124 Y 0.04850625 Z -0.1144406
, когда SDK начинает отслеживать лицо. Я мог бы использовать эти координаты, чтобы нарисовать коробку вокруг каждого глаза, но координата Z, вероятно, должна быть ближе к 1.0, а не -0.1 .. или -0.2 .. (на основе моей настройки), поэтому я не доверяю цифры. Предполагается, что XYZ является местом расположения FeaturePoint в 3D-пространстве относительно датчика? Не понимаю ли я систему координат Kinect? Я неправильно использую Kinect SDK? Имеет ли значение, что я использую датчик Xbox 360 Kinect? (Microsoft не гарантирует полную совместимость для Kinect для Windows-приложений и Xbox 360 Kinect Sensor)
Edit: Добавление этого
if (trackSucceeded) {
...
if (headPointsObj != null)
for (int i = 0; i < 2; i++)
DebugHeadPoint(i, headPointsObj.Points);
}
private void DebugHeadPoint(int i, Vector3DF[] points) {
if (points == null) throw new ArgumentNullException("points");
Debug.WriteLine("HeadPoint[" + i + "] X " + points[i].X +
" Y " + points[i].Y +
" Z " + points[i].Z);
}
в FaceTracker.cs :: Трек() печатает этот
HeadPoint[0] X 0.01227657 Y -0.2290326 Z 1.319978
HeadPoint[1] X 0.00613283 Y -0.02143053 Z 1.280334
HeadPoint[0] X 0.003939687 Y -0.2297621 Z 1.319813
HeadPoint[1] X -0.003732742 Y -0.02388078 Z 1.277723
...
Эти цифры выглядят правильно, основываясь на настройке. FeaturePoints печатаются только один раз, но HeadPoints печатаются непрерывно, а trackSucceeded. Значения FeaturePoint относительно HeadPoint?
Вне отслеживания лица, XYZ измеряется в миллиметрах от Kinect происхождения. Я бы предположил, что значения одинаковы, хотя они могут быть отличием от лицевой точки. Перед тем, как быть уверенным, я не общаюсь напрямую с трекером. –
@EvilClosetMonkey: согласно [this] (http://msdn.microsoft.com/en-us/library/jj130970.aspx#ID4EWF) _ Единицы измерения - метры_. – jacknad
Действительно, кажется, что он находится в метрах для лица. Регулярная система глубины [система координат] (http://msdn.microsoft.com/en-us/library/hh973078.aspx) сообщает в миллиметрах, и я не обнаружил ссылку, которую вы указали выше. Как далеко от Киндекта вы сидите? Возьмите правителя! :) –