Primer vistazo a Xamarin Essentials

Originalmente llamado Caboodle, Xamarin.Essentials es una libreria simple para acceder a funciones nativas tanto para iOS, Android y UWP

xamarin-essentials

Para hacerlo más fácil, ahora existe Xamarin.Essentials, un paquete único que puede instalar en cualquier aplicación Xamarin para obtener acceso multiplataforma a una amplia gama de API, como acelerómetro, brújula, conectividad de red, mantener la pantalla encendida y más . Puede ver la lista completa de características compatibles en la página de Xamarin Essentials GitHub. Este paquete actualmente tiene 24 conjuntos de API diferentes, con más planeado. Essentials es para todas las aplicaciones de Xamarin, tanto tradicionales como de formularios.

Empezando

Aquí, usaré Xamarin.Forms como punto de partida, simplemente agregue el paquete Xamarin.Essentials NuGet a todos los proyectos (iOS, Android y .NET estándar). Dado que actualmente se encuentra en vista previa, asegúrese de marcar la casilla incluir version preliminar en la ventana Agregar paquetes de Nuget.

2018-06-20_17-37-13

A continuación la lista confirmada de los APIs para su primer release:

Aprende más

Lea más sobre este lanzamiento en las notas de la versión completa y asegúrese de examinar nuestra documentación completa, que ofrece una descripción completa de cómo comenzar y cómo usar cada característica de Xamarin.Essentials.

Para mas información

 

Enjoy 🙂

UPDATE “Novedades liberadas desde Octubre 2012 SDK”

Entre las nuevas cosas que nos viene ahora en esta actualizacion mencionare las mas destacadas y muy utiles para nosotros los desarrolladores.

1) El stream de infrarrojos está ahora expuesto en el API

El sensor Kinect está ahora expuesto como un formato de color de la imagen nueva. Usted puede utilizar el flujo de infrarrojos en muchos escenarios, tales como:

  •      Calibración de otras cámaras de color para el sensor de profundidad de Kinect
  •      La captura de imágenes en escala de grises en situaciones de poca luz
  •      Dos muestras de infrarrojos se han añadido a la caja de herramientas, y también se puede probar de infrarrojos en KinectExplorer. Esto proporciona a los desarrolladores un amplio espectro de escenarios de pruebas.
  •      Tenga en cuenta que el sensor no es capaz de capturar flujos de infrarrojos y corrientes de color al mismo tiempo. Puede, sin embargo, capturar flujos de infrarrojos y la profundidad simultáneamente.

2) Datos profundidad ampliados 

  • CopyDepthImagePixelData() ahora proporciona detalles más allá de 4 metros, por favor, tenga en cuenta que la calidad de los datos se degrada con la distancia. Además de los datos de profundidad extendidos, facilidad de uso de la profundidad del API de datos ha sido mejorada (enmascaramiento de bits ya no se requiere).
  • Esto significa que las aplicaciones serán capaces de leer los datos más allá de 4 metros cuando sea necesario.
3) Configuracion de color en la APIs de la Cámara

  • Los ajustes de color de la cámara ahora puede ser optimizado para su entorno.
  •      Ahora se puede ajustar el balance de blancos, contraste, tono, saturación y otros parámetros, dando una mejor imagen de color para cada usuario individual.
  •      Para ver la lista completa de los ajustes que se pueden optimizar, inicie el Explorador de Kinect desde el navegador Developer Toolkit y revisar la exposición y controles de color.

4) API de datos Acelerómetro

  • Los datos de los acelerómetros del sensor se expone ahora en la API. Esto permite la detección de la orientación del sensor.

5) Nueva API de conversión de coordenadas espacio

  • Existen varias APIs nuevo para convertir datos entre espacios de coordenadas: el color, la profundidad y el esqueleto.
  • Hay dos conjuntos de API: uno para la conversión de los píxeles individuales y la otra para la conversión de un cuadro de imagen completa.
  • Más allá de mejorar la facilidad de uso, este soporta la funcionalidad adicional mapeo de coordenadas previamente no disponibles para los desarrolladores.

6) Kinect Studio 1.6.0

  • Kinect Studio ha sido actualizado para soportar los rayos infrarrojos, raw bayer, datos extendidos de profundidad, y cuenta con acelerómetro.

7) Raw Bayer

  • El nuevo formato de color de imagen raw Bayer que permite hacer tu propia Bayer RGB conversiones de unidades de procesamiento central (CPU) o unidades de procesamiento gráfico (GPU). Esto permite a los desarrolladores elegir una calidad de conversión superior a RGB de Bayer que nuestro SDK proporciona de forma predeterminada.

Si no tienes la minima idea de que es un Bayer, para los que saben de fotografia tambien pueden refrescar su memoria con estos breves conceptos http://es.wikipedia.org/wiki/Mosaico_de_Bayer

Ademas de las amplias funciones destacadas en la nueva actualizacion tambien estan incluidos nuevos soportes de herramientas y compatibilidad en el sistema operativo Windows 8

Soporte para máquinas virtuales
El sensor Kinect para Windows ahora funciona en Windows que se ejecutan en una máquina virtual (VM) y ha sido probado con los siguientes entornos de VM:

  •      Microsoft HyperV
  •      VMWare
  •      paralelas

Esto amplía enormemente la utilidad de la Kinect para Windows SDK, ya que ahora se puede utilizar en cualquier máquina cuyo sistema operativo nativo admite que ejecuta Windows en uno de los paquetes VM mencionadas anteriormente. Además, esto permite varios escenarios de desarrollo, tales como ciertos enfoques de prueba automatizados.

Actualización Kinect Studio
La actualización simplifica la depuracion y comprobación de las aplicaciones mediante el uso de Kinect Studio para grabar, reproducir y depurar los datos de Kinect. Esta versión se ha actualizado para admitir los nuevos infrarrojo, crudo Bayer, datos extendidos de profundidad, y cuenta con acelerómetro.

Soporte para Windows 8
Al utilizar el Kinect para Windows SDK, puede desarrollar una aplicación Kinect para Windows para una aplicación de escritorio en Windows 8.

Soporte para Visual Studio 2012
El SDK es compatible el desarrollo con Visual Studio 2012, además con el soporte de Visual Studio 2010, y el nuevo Microsoft. NET Framework 4.5, además de los ya soportados. NET Framework 4.0. y el ya mencionado soporte para Windows 8

Tutorial KINECT camaras RGB y de profundidad (DEPTH)

Hola
Empezaremos por lo básico, en Visual Studio 2010 creamos un nuevo proyecto WPF y en mi caso le llamare KinectPruebaCamaras.

Ahora bien una vez creado el proyecto con sus archivos iniciales nos vamos a agregar la referencia para trabajar con nuestra KINECT

Ok hasta este punto ahora vamos a nuestro código XAML de nuestra aplicación e insertamos dos controles de imagen dentro del Grid inicial donde la primera le llamaremos VideoImage y a la otra DepthImage

Bien ahora vamos a lo que en realidad tenemos que hacer, nos vamos al code behind de nuestro archivo MainPage.xaml y empezamos por lo siguiente agregando la Referencia con el siguiente código.

using Microsoft.Kinect;

ahora declaramos una variable de tipo KinectSensor que yo llamare sensor y dos variables una de tipo byte que llamare pixeldata y otra de tipo short que llamare pixel.

KinectSensor sensor = KinectSensor.KinectSensors[0];
byte[] pixelData;
short[] pixel;

Ahora debemos de habilitar las camaras con estas dos rutinas, uno para la cámara de RGB y la otra para la cámara de profundidad (DEPTH),  debemos de indicar al Kinect que vamos a utilizar en este caso las dos camaras antes mencionadas.

public partial class MainWindow : Window
{
      KinectSensor sensor = KinectSensor.KinectSensors[0];
      byte[] pixelData;
      short[] pixel;

      public MainWindow()
      {
             InitializeComponent();
             sensor.ColorStream.Enable();
             sensor.DepthStream.Enable();
          
      }
}

“Vamos bien ahí”… bueno ahora necesitamos indicar tanto iniciar el KINECT al correr la aplicación y cuando cerremos la aplicación con estas dos sencillas rutinas Start() y Stop()… (“sencillo no!?”) y en la sección del método Window_Loaded vamos a crear dos eventos ruteados dentro de la variable sensor que yo llame que contiene toda la información del dispositivo que son ColorFrameReady y DepthFrameReady.

private void Window_Loaded(object sender, RoutedEventArgs e)
{
   sensor.ColorFrameReady += new EventHandler<ColorImageFrameReadyEventArgs>(sensor_ColorFrameReady);
   sensor.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(sensor_DepthFrameReady);

   sensor.Start();
}

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   sensor.Stop();
}

Bien ya creamos los objetos, tenemos las librerías de Kinect, inicializamos y cerramos nuestro dispositivo ahora bien falta capturar lo que nos llega de las dos camaras y guardarlas en una variable y mostrarlas en nuestra aplicación para poder empezar a trabajar en nuestro KINECT ahora vamos al método sensor_ColorFrameReady y colocamos el siguiente código.

void sensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
  bool receivedData = false;

  using (ColorImageFrame CFrame = e.OpenColorImageFrame())
  {
     if (CFrame == null)
     {
     }
     else
     {
     pixelData = new byte[CFrame.PixelDataLength];
     CFrame.CopyPixelDataTo(pixelData);
     receivedData = true;
     }
   }

   if (receivedData)
   {
     BitmapSource source = BitmapSource.Create(640, 480, 96, 96,
     PixelFormats.Bgr32, null, pixelData, 640 * 4);

     VideoImage.Source = source;
   }
      
 }

En el código que acabo de colocar creamos una variable de tipo boleana para detectar mediante una condición para capturar lo que nos arroja la cámara copiando los datos de lo que nos contiene CFrame y después volvemos a preguntar por nuestra variable boleana y de ser verdadero procede a crear un BitmapSource en el cual abrimos dándole los parámetros que demuestro en el código, detenerme a explicar los parámetros no son necesarios por ahora para este tutorial rapido pero en mi primer tutorial son los mismos parámetros que describi y explique, la novedad en esa función es que se pueden jugar ahora con valores superiores o inferiores en escalas proporcionales a la que colocamos por default que es 640 x 480.

Entonces bien ahora vamos a la siguiente cámara que es la de profundidad dando este codigo

void sensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
        {
            bool receivedData = false;

            using (DepthImageFrame CFrame = e.OpenDepthImageFrame())
            {
                if (CFrame == null)
                {
                }
                else
                {
                    pixel = new short[CFrame.PixelDataLength];
                    CFrame.CopyPixelDataTo(pixel);
                    receivedData = true;
                }
            }

            if (receivedData)
            {
                BitmapSource source = BitmapSource.Create(320, 240, 96, 96,
                        PixelFormats.Gray16, null, pixel, 320 * 4);

                DepthImage.Source = source;
            }
        }

Es el mismo tratamiento que explique en el método anterior pero lo que cambia es el formato de Pixeles y le colocamos Gray16 (PixelFormats.Gray16) y cambiamos la resolución a 320 x 240 claro también podemos colocarle la resolución de la otra cámara 640 x 480

Ahora corremos nuestra aplicación y tenemos las 2 camaras, tanto la de profundidad  como la RGB funcionando y habilitadas para trabajar con nuestra KINECT, es importante destacar que estos son los métodos básicos para tener  en funcionamiento estas 2 camaras, ya el resto queda de parte de nuestra creatividad

Estoy trabajando actualmente en el siguiente Tutorial para reconocimiento del personaje y de las librerías Skeleton para hacer infinidades de cosas con nuestro KINECT.

Salu2