Mejoras en la API de audio

Mejoras:

  • KinectAudioSource ya no tiene un constructor, debe acceder a la propiedad de AudioSource KinectSensor. En múltiples escenarios KinectSensor será ahora quien asegure que usted obtiene la fuente de audio que es del sensor.
  • Cambia el nombre de la API
  • Refactorización API con la simplificación en mente.
  • La eliminación de muchos menos útiles miembros.
  • Propiedades que devuelven ángulos ahora devuelven ángulos en grados en lugar de radianes. Esto es consistente con ElevationAngle.

 

Código antiguo:

KinectAudioSource audioSource
newKinectAudioSource();

audioSource.SystemMode = SystemMode.OptibeamArrayOnly;

audioSource.FeatureMode = true;

audioSource.AutomaticGainControl = false;

audioSource.MicArrayMode = MicArrayMode.MicArrayAdaptiveBeam;

var kinectStream = audioSource.Start();

 

Código nuevo:

KinectAudioSource audioSource = kinectSensor.AudioSource;

audioSource.EchoCancellationMode =EchoCancellationMode.CancellationOnly;

audioSource.AutomaticGainControlEnabled = false;

audioSource.BeamAngleMode = BeamAngleMode.Adaptive;

var audioStream = audioSource.Start();

Cambios en el Skeleton API

  • Renombrado SkeletonEngine -> SkeletonStream
  • Renombrado SkeletonData -> Skeleton
  • Renombrado JointID -> Joint
  • Renombrado JointsCollection -> JointCollection
  • Vector Renombrado -> SkeletonPoint
  • Renombrado SkeletonQuality -> FrameEdges
  • Desarrollador es ahora responsable de propias asignaciones de variables de matriz esqueleto y esqueletos de copiado a ese almacenamiento.
  • La disponibilidad de datos esqueleto durante SkeletonFrameReady oAllFramesReady
    eventos. ( AllFramesReady da color a juego, profundidad
    y / o marcos esqueleto.)
  • Nuevos SkeletonStream.AppChoosesSkeletons   propiedad + ChooseSkeletonsmétodos ().

Código Viejo:

runtime.SkeletonFrameReady += new
EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);

private void nui_SkeletonFrameReady(object

sender, SkeletonFrameReadyEventArgs
e)

{

SkeletonFrame skeletonFrame
= e.SkeletonFrame;

 

}

 

Código Nuevo:

kinectSensor.SkeletonFrameReady += new
EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);

 

Skeleton[] skeletons;

 

private void
nui_SkeletonFrameReady(object
sender, SkeletonFrameReadyEventArgs
e)

{

bool receivedData
= false;

using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())

{

if (skeletonFrame != null)

{

if
(skeletons == null) //allocate
the first time

{

skeletons = newSkeleton[skeletonFrame.SkeletonArrayLength];

}

receivedData
= true;

}

else

{

// Aplicaciones de procesamiento de datos esqueleto tomó demasiado tiempo; que obtuvo más de 2 cuadros detrás.

// La  información ya no es variable.

}

}

if (receivedData)

{

// PANTALLA  O IMAGEN PROCESO DE DATOS EN esqueletos AQUÍ

}

}

 

Cambios en el DepthImage API

Cambios significativos:

  • Reorganización de depthImage data. Ya no es un PlanarImage clase.
  • DepthPixel de datos es ahora un short [ ], en lugar de un byte []. (Imágenes fijas 2 bytes de datos que representan cada píxel.)
  • DepthPixel diseño bits es ahora consistente, sin importar si has optado por Profundidad + jugador o simplemente Profundidad.
  • Ya no hay necesidad de pedir Profundidad + jugador o profundidad. Si el SkeletonStream está habilitado, se obtiene Profundidad + jugador.
  • Desarrollador es ahora responsable de las asignaciones propias de pixeles variables y copia de pixeles para que el almacenamiento.
  • Disponibilidad dedepthImage datos durante DepthFrameReady o AllFramesReady
    (AllFramesReady da color a juego, la profundidad y / o marcos esqueleto.)

Código Antiguo:

runtime.DepthStream.Open(ImageStreamType.Depth, 2,ImageResolution.Resolution320x240,

ImageType.DepthAndPlayerIndex);

 

runtime.DepthFrameReady += new
EventHandler<ImageFrameReadyEventArgs>(DepthImageReady);

 

private void
DepthImageReady(object
sender, ImageFrameReadyEventArgs
e)

{

PlanarImage planarImage
= e.ImageFrame.Image;

 

// DISPLAY OR
PROCESS IMAGE DATA IN pixelData HERE

}

 

Código Nuevo:

kinectSensor.DepthStream.Enable(DepthImageFormat.Resolution320x240Fps30);

kinectSensor.DepthFrameReady += new

EventHandler<DepthImageFrameReadyEventArgs>(DepthImageReady);

short[] pixelData;

 

private void
DepthImageReady(object
sender, DepthImageFrameReadyEventArgs
e)

{

bool receivedData
= false;

using (DepthImageFrame depthImageFrame = e.OpenDepthImageFrame())

{

if (depthImageFrame != null)

{

if (pixelData == null) //allocate the first time

{

pixelData
= new short[depthImageFrame.PixelDataLength];

}

depthImageFrame.CopyPixelDataTo(pixelData);

receivedData
= true;

}

else

{

// apps processing of image data took too long; it got more than 2 frames behind.

// the data is no longer avabilable.

}

}

if (receivedData)

{

// DISPLAY OR PROCESS IMAGE DATA IN pixelData HERE

}

}

 

Cambios en ColorImage API

Cambios significativos:

  • Reorganización de los datos en colorimage.
  • Desarrolladorahora es responsable de las asignaciones propias de las variables pixelData y copia pixelData al almacenamiento. (Color pixelData todavía es una matriz de bytes con la misma disposición ).
  • KinectRuntime permite reutilizar recursos si se cae detrás deprocesamiento de datos de una aplicación.
  • Disponibilidad de colorimage datos durante ColorFrameReady o AllFramesReady eventos. ( AllFramesReady da color a juego, profundidad y / o marcos esqueleto.)

 

Código viejo:

runtime.VideoStream.Open(ImageStreamType.Video, 2,ImageResolution.Resolution640x480, ImageType.Color);

runtime.VideoFrameReady += new

EventHandler<ImageFrameReadyEventArgs>(ColorImageReady);

void ColorImageReady(object sender, ImageFrameReadyEventArgs e)

{

PlanarImage planarImage
= e.ImageFrame.Image;

 

// DISPLAY OR PROCESS IMAGE DATA IN planarImage HERE

}

 

Código nuevo:

kinectSensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);

 

kinectSensor.ColorFrameReady += new
EventHandler<ColorImageFrameReadyEventArgs>(ColorImageReady);

byte[] pixelData;

 

void ColorImageReady(object sender, ColorImageFrameReadyEventArgs e)

{

bool receivedData
= false;

using (ColorImageFrame colorImageFrame = e.OpenColorImageFrame())

{

if (colorImageFrame != null)

{

if
(pixelData == null)
//allocate the first time

{

pixelData
= new byte[colorImageFrame.PixelDataLength];

}

colorImageFrame.CopyPixelDataTo(pixelData);

receivedData
= true;

}

else

{

procesamiento de datos de imágenes está tomando demasiado tiempo,se puso más de 2 cuadros detrás.

}

}

if (receivedData)

{

IMAGEN DE DATOS EN PROCESO de pixeles AQUÍ

}

}

Inicializar el sensor

Mejoras:

  • Permite habilitar una sola vez al desarrollador, no una vez por característica.
  • Los valores válidos son determinables a través de Instellisense/compilación y los errores no son solo en tiempo de ejecución.
  • Buen comportamiento predeterminado.

 

Código Antiguo:

runtime.Initialize (RuntimeOptions.UseDepthAndPlayerIndex |RuntimeOptions.UseSkeletalTracking |RuntimeOptions.UseColor );

runtime.VideoStream.Open (ImageStreamType.Video , 2,

ImageResolution.Resolution640x480,ImageType.Color );

runtime.DepthStream.Open (ImageStreamType.Depth , 2,

ImageResolution.Resolution320x240,ImageType.DepthAndPlayerIndex );

 

Código nuevo:

kinectSensor.ColorStream.Enable ();

kinectSensor.DepthStream.Enable ();

kinectSensor.SkeletonStream.Enable ();

kinectSensor.Start ();

Kinect para windows sdk v1.0 vs 2.0 Inicios

Hola y bienvenidos a este nuevo tutorial, en esta ocasión vamos a ver poco a poco las diferencias entre el sdk v1.0 y la última versión para que, sí desarrollabas para Kinect desde los antiguos SDK no te pierdas y puedas continuar desarrollando con este nuevo sensor.

KinectSensor Desinicializar/apagar el sensor

Código anterior:

Runtime.Unitialize();

Código nuevo:

KinectSensor.Stop();