SlideShare una empresa de Scribd logo
1 de 48
Descargar para leer sin conexión
@enriqueaguilar
Apps Móviles con Xamarin
Y algo de Azure Storage y Cognitive Services
Agenda
1.- Contexto Xamarin
2.- Azure Storage
3.- Demo Azure Storage
4.- Servicios Cognitivos
3.- Demo de Servicios Cognitivos
@enriqueaguilar
Xamarin Classic
(Xamarin.iOS – Xamarin.Android)
Xamarin.iOS Xamarin.AndroidNative User InterfacesNative API Access Native Performance
Apps with interactions that require native behavior
Apps that use many platform-specific APIs
Apps where custom UI is more importante than code
sharing
“Xamarin Classic (iOS - Android) is for Quality
Applications in very competitive markets”
Miguel De Icaza
Fuente:
https://www.xamstatic.com/dist/images/pages/vs-
download/android-features@2x-mpXl2sxz.png
@enriqueaguilar
Xamarin.Forms
(iOS – Android - Windows)
Build native UIs for iOS, Android and Windows from a single, shared C# codebase.
Apps where code sharing is more important than
custom UI
Developers comfortable with XAML
Apps that require little platform-specific functionality
@enriqueaguilar
C# Swift
iOS UI
XIB (Storyboard)
Objective C
Xamarin Classic
(iOS – Android)
Java C#
Android UI
AXML
“Anything you can do in Objective-C, Swift and Java can be done in C# with Xamarin”
Almacenamiento Azure
Ideal para la Administración del
Centro de Datos:
• Gama de soluciones para cada
necesidad.
• La escalabilidad que nunca
sobrepasará.
• Flexible a medida que cambian las
necesidades.
• Costos más bajos y pago solo por lo
que necesita.
Xamarin y Azure Storage
Aplicación de iOS que
toma una foto y la envia a
Azure Storage.
Aplicación de Android que
baja la imagen subida al
Azure Storage.
1
2
3
4
iOS Android
Código Xamarin.iOS – Azure Storage Blob
string archivoLocal;
AVCaptureDevice dispositivodeCaptura;
AVCaptureSession sesiondeCaptura;
AVCaptureDeviceInput entradaDispositivo;
AVCaptureStillImageOutput salidaImagen;
AVCaptureVideoPreviewLayer preview;
string ruta;
byte[] arregloJpg;
async Task autorizacionCamara()
{
var estatus = AVCaptureDevice.GetAuthorizationStatus(AVMediaType.Video);
if (estatus != AVAuthorizationStatus.Authorized)
{
await AVCaptureDevice.RequestAccessForMediaTypeAsync(AVMediaType.Video);
}
}
using System;
using UIKit;
using System.Drawing;
using System.Threading.Tasks;
using AVFoundation;
using Foundation;
using System.IO;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
Código Xamarin.iOS – Azure Storage Blob
string archivoLocal;
AVCaptureDevice dispositivodeCaptura;
AVCaptureSession sesiondeCaptura;
AVCaptureDeviceInput entradaDispositivo;
AVCaptureStillImageOutput salidaImagen;
AVCaptureVideoPreviewLayer preview;
string ruta;
byte[] arregloJpg;
async Task autorizacionCamara()
{
var estatus = AVCaptureDevice.GetAuthorizationStatus(AVMediaType.Video);
if (estatus != AVAuthorizationStatus.Authorized)
{
await AVCaptureDevice.RequestAccessForMediaTypeAsync(AVMediaType.Video);
}
}
using System;
using UIKit;
using System.Drawing;
using System.Threading.Tasks;
using AVFoundation;
using Foundation;
using System.IO;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
Código Xamarin.iOS – Azure Storage Blob
string archivoLocal;
AVCaptureDevice dispositivodeCaptura;
AVCaptureSession sesiondeCaptura;
AVCaptureDeviceInput entradaDispositivo;
AVCaptureStillImageOutput salidaImagen;
AVCaptureVideoPreviewLayer preview;
string ruta;
byte[] arregloJpg;
async Task autorizacionCamara()
{
var estatus = AVCaptureDevice.GetAuthorizationStatus(AVMediaType.Video);
if (estatus != AVAuthorizationStatus.Authorized)
{
await AVCaptureDevice.RequestAccessForMediaTypeAsync(AVMediaType.Video);
}
}
using System;
using UIKit;
using System.Drawing;
using System.Threading.Tasks;
using AVFoundation;
using Foundation;
using System.IO;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
public void ConfiguracionCamara()
{
sesiondeCaptura = new AVCaptureSession();
preview = new AVCaptureVideoPreviewLayer(sesiondeCaptura)
{
Frame = new RectangleF(40, 50, 300, 350)
};
View.Layer.AddSublayer(preview);
dispositivodeCaptura = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video);
entradaDispositivo = AVCaptureDeviceInput.FromDevice(dispositivodeCaptura);
sesiondeCaptura.AddInput(entradaDispositivo);
salidaImagen = new AVCaptureStillImageOutput()
{
OutputSettings = new NSDictionary()
};
sesiondeCaptura.AddOutput(salidaImagen);
sesiondeCaptura.StartRunning();
}
Código Xamarin.iOS – Azure Storage Blob
public void ConfiguracionCamara()
{
sesiondeCaptura = new AVCaptureSession();
preview = new AVCaptureVideoPreviewLayer(sesiondeCaptura)
{
Frame = new RectangleF(40, 50, 300, 350)
};
View.Layer.AddSublayer(preview);
dispositivodeCaptura = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video);
entradaDispositivo = AVCaptureDeviceInput.FromDevice(dispositivodeCaptura);
sesiondeCaptura.AddInput(entradaDispositivo);
salidaImagen = new AVCaptureStillImageOutput()
{
OutputSettings = new NSDictionary()
};
sesiondeCaptura.AddOutput(salidaImagen);
sesiondeCaptura.StartRunning();
}
Código Xamarin.iOS – Azure Storage Blob
Código Xamarin.iOS – Azure Storage Blob
btnCapturar.TouchUpInside += async delegate
{
var salidadevideo = salidaImagen.ConnectionFromMediaType(AVMediaType.Video);
var bufferdevideo = await salidaImagen.CaptureStillImageTaskAsync(salidadevideo);
var datosImagen = AVCaptureStillImageOutput.JpegStillToNSData(bufferdevideo);
arregloJpg = datosImagen.ToArray();
string rutacarpeta = Environment.GetFolderPath
(Environment.SpecialFolder.Personal);
string resultado = "Foto";
archivoLocal = resultado + ".jpg";
ruta = Path.Combine(rutacarpeta, archivoLocal);
File.WriteAllBytes(ruta, arregloJpg);
Imagen.Image = UIImage.FromFile(ruta);
};
Código Xamarin.iOS – Azure Storage Blob
btnCapturar.TouchUpInside += async delegate
{
var salidadevideo = salidaImagen.ConnectionFromMediaType(AVMediaType.Video);
var bufferdevideo = await salidaImagen.CaptureStillImageTaskAsync(salidadevideo);
var datosImagen = AVCaptureStillImageOutput.JpegStillToNSData(bufferdevideo);
arregloJpg = datosImagen.ToArray();
string rutacarpeta = Environment.GetFolderPath
(Environment.SpecialFolder.Personal);
string resultado = "Foto";
archivoLocal = resultado + ".jpg";
ruta = Path.Combine(rutacarpeta, archivoLocal);
File.WriteAllBytes(ruta, arregloJpg);
Imagen.Image = UIImage.FromFile(ruta);
};
Código Xamarin.iOS – Azure Storage Blob
btnRespaldar.TouchUpInside += async delegate
{
try
{
CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse
("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+
q1zwfv7lkb2d/cm8r9ycoc5ZgkNEbuypQYgM001p9E9CWChPtIBfW1A==");
CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient();
CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes");
CloudBlockBlob recursoblob = contenedor.GetBlockBlobReference(archivoLocal);
await recursoblob.UploadFromFileAsync(ruta);
MessageBox("Guardado en", "Azure Storage - Blob");
}
catch (StorageException ex)
{
MessageBox("Error: ", ex.Message);
}
};
Código Xamarin.iOS – Azure Storage Blob
btnRespaldar.TouchUpInside += async delegate
{
try
{
CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse
("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+
q1zwfv7lkb2d/cm8r9ycoc5ZgkNEbuypQYgM001p9E9CWChPtIBfW1A==");
CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient();
CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes");
CloudBlockBlob recursoblob = contenedor.GetBlockBlobReference(archivoLocal);
await recursoblob.UploadFromFileAsync(ruta);
MessageBox("Guardado en", "Azure Storage - Blob");
}
catch (StorageException ex)
{
MessageBox("Error: ", ex.Message);
}
};
Código Xamarin.iOS – Azure Storage Blob
btnRespaldar.TouchUpInside += async delegate
{
try
{
CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse
("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+
q1zwfv7lkb2d/cm8r9ycoc5ZgkNEbuypQYgM001p9E9CWChPtIBfW1A==");
CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient();
CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes");
CloudBlockBlob recursoblob = contenedor.GetBlockBlobReference(archivoLocal);
await recursoblob.UploadFromFileAsync(ruta);
MessageBox("Guardado en", "Azure Storage - Blob");
}
catch (StorageException ex)
{
MessageBox("Error: ", ex.Message);
}
};
Código Xamarin.Android – Azure Storage Blob
btnImagen.Click += async delegate{
try {
string carpeta = System.Environment.GetFolderPath
(System.Environment.SpecialFolder.Personal);
string archivoLocal = "Foto.jpg";
string ruta = System.IO.Path.Combine(carpeta, archivoLocal);
CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse
("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+q1z
wfv7lkb2d/cm8riqbo11p9E9CWChPtIBfW1A==");
CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient();
CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes");
CloudBlockBlob recursoBlob = contenedor.GetBlockBlobReference("Foto.jpg");
var stream = File.OpenWrite(ruta);
await recursoBlob.DownloadToStreamAsync(stream);
Android.Net.Uri rutaImagen = Android.Net.Uri.Parse(ruta);
Imagen.SetImageURI(rutaImagen);
}
catch (StorageException ex)
{
Toast.MakeText(this, ex.Message, ToastLength.Short);
}
};
Código Xamarin.Android – Azure Storage Blob
btnImagen.Click += async delegate{
try {
string carpeta = System.Environment.GetFolderPath
(System.Environment.SpecialFolder.Personal);
string archivoLocal = "Foto.jpg";
string ruta = System.IO.Path.Combine(carpeta, archivoLocal);
CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse
("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+q1z
wfv7lkb2d/cm8riq9E9CWChPtIBfW1A==");
CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient();
CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes");
CloudBlockBlob recursoBlob = contenedor.GetBlockBlobReference("Foto.jpg");
var stream = File.OpenWrite(ruta);
await recursoBlob.DownloadToStreamAsync(stream);
Android.Net.Uri rutaImagen = Android.Net.Uri.Parse(ruta);
Imagen.SetImageURI(rutaImagen);
}
catch (StorageException ex)
{
Toast.MakeText(this, ex.Message, ToastLength.Short);
}
};
Código Xamarin.Android – Azure Storage Blob
btnImagen.Click += async delegate{
try {
string carpeta = System.Environment.GetFolderPath
(System.Environment.SpecialFolder.Personal);
string archivoLocal = "Foto.jpg";
string ruta = System.IO.Path.Combine(carpeta, archivoLocal);
CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse
("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+q1z
wfv7lkb2d/cm8riq9E9CWChPtIBfW1A==");
CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient();
CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes");
CloudBlockBlob recursoBlob = contenedor.GetBlockBlobReference("Foto.jpg");
var stream = File.OpenWrite(ruta);
await recursoBlob.DownloadToStreamAsync(stream);
Android.Net.Uri rutaImagen = Android.Net.Uri.Parse(ruta);
Imagen.SetImageURI(rutaImagen);
}
catch (StorageException ex)
{
Toast.MakeText(this, ex.Message, ToastLength.Short);
}
};
Código Xamarin.Android – Azure Storage Blob
btnImagen.Click += async delegate{
try {
string carpeta = System.Environment.GetFolderPath
(System.Environment.SpecialFolder.Personal);
string archivoLocal = "Foto.jpg";
string ruta = System.IO.Path.Combine(carpeta, archivoLocal);
CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse
("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+q1z
wfv7lkb2d/cm8riq9E9CWChPtIBfW1A==");
CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient();
CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes");
CloudBlockBlob recursoBlob = contenedor.GetBlockBlobReference("Foto.jpg");
var stream = File.OpenWrite(ruta);
await recursoBlob.DownloadToStreamAsync(stream);
Android.Net.Uri rutaImagen = Android.Net.Uri.Parse(ruta);
Imagen.SetImageURI(rutaImagen);
}
catch (StorageException ex)
{
Toast.MakeText(this, ex.Message, ToastLength.Short);
}
};
DEMO
Apps Cognitivas
Microsoft Cognitive Services
Son una conjunto de APIs
que permiten que las
aplicaciones interpreten
imágenes y videos
proporcionando respuestas
cognitivas.
microsoft.com/cognitive-services
Microsoft Cognitive Services
Vision Speech Language Knowlegde Search
Computer
Vision
Custom
Recognition
Bing Spell Check Academic
Knowledge
Bing Web Search
Emotion Speaker
Recognition
Linguistic Analysis and
Undestanding
Entity Linking Bing Image Search
Face Speech Text Analytics Knoledge
Exploration
Bing Video and News
Search
Video Translator WebLM Recommendatio
ns
Bing Autosuggest
Ejemplo:
Aplicación Xamarin.iOS
Agregamos los paquetes de conexión al
Servicio Cognitivo
Agregamos las librerías correspondientes
Generamos el método para
descargar una
Imagen
Agregamos las librerías correspondientes
Generamos el método para
descargar una
Imagen
Enviamos un stream al método que analizará
e interpretará el nivel de felicidad
Enviamos un stream al método que analizará
e interpretará el nivel de felicidad
Se envía la información
como stream al método que
describirá la emoción del
Servicio Cognitivo
en el criterio de “Felicidad”
Conectamos con el
Servicio Cognitivo en la
API
descriptiva de emociones,
se envía la trama y se
recibe
la información
Se envía la información
como stream al método que
describirá la emoción del
Servicio Cognitivo
en el criterio de “Felicidad”
Conectamos con el
Servicio Cognitivo en la
API
descriptiva de emociones,
se envía la trama y se
recibe
la información
Validamos la
información descriptiva
de emociones
del Servicio Cognitivo
Recibimos la siguiente
imagen
Validamos la
información descriptiva
de emociones
del Servicio Cognitivo
Recibimos la siguiente
imagen
Nos conectamos al
Servicio Cognitivo en la
API de
Computer Vision
Recibimos la descripción y lo
enviamos a la
clase de narración en el
iPhone
Habilitamos los botones
Nos conectamos al
Servicio Cognitivo en la
API de
Computer Vision
Recibimos la descripción y lo
enviamos a la
clase de narración en el
iPhone
Habilitamos los botones
Nos conectamos al
Servicio Cognitivo en la
API de
Computer Vision
Recibimos la descripción y lo
enviamos a la
clase de narración en el
iPhone
Habilitamos los botones
Por donde empezar?
• microsoft.com/cognitive-services
• xamarin.com/resources
• blog.xamarin.com
• channel9.msdn.com
La Innovación Tecnológica impactará en todas las áreas.
enriqueaguilarvargas.com
https://github.com/enriqueaguilarvargas
@enriqueaguilar

Más contenido relacionado

Similar a Azure Storage, Cognitive Services y Xamarin - Universidad Tecnológica de León

Charla Jquery
Charla JqueryCharla Jquery
Charla Jquery
kaolong
 
Realidad Aumentada más allá de Glass - Droidcon 2014
Realidad Aumentada más allá de Glass - Droidcon 2014Realidad Aumentada más allá de Glass - Droidcon 2014
Realidad Aumentada más allá de Glass - Droidcon 2014
Fernando Gallego
 

Similar a Azure Storage, Cognitive Services y Xamarin - Universidad Tecnológica de León (20)

Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipster
 
Xamarin storage Azure
Xamarin storage AzureXamarin storage Azure
Xamarin storage Azure
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...
Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...
Mejores prácticas y las difíciles lecciones aprendidas con las aplicaciones S...
 
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
.NET UY Meetup 5 - MVC For Human Beings by Leonardo Botta
 
Android Tips & Tricks - Boosting your productivity
Android Tips & Tricks - Boosting your productivityAndroid Tips & Tricks - Boosting your productivity
Android Tips & Tricks - Boosting your productivity
 
Arquitectura
Arquitectura Arquitectura
Arquitectura
 
Xamarin ui test
Xamarin ui testXamarin ui test
Xamarin ui test
 
HTML 5 & WebGL (Spanish Version)
HTML 5 & WebGL (Spanish Version)HTML 5 & WebGL (Spanish Version)
HTML 5 & WebGL (Spanish Version)
 
Django
DjangoDjango
Django
 
HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5
 
Charla Jquery
Charla JqueryCharla Jquery
Charla Jquery
 
Taller desarrollo de apis
Taller desarrollo de apisTaller desarrollo de apis
Taller desarrollo de apis
 
Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de Platzi
 
Securizando por construcción mediante MDE
Securizando por construcción mediante MDESecurizando por construcción mediante MDE
Securizando por construcción mediante MDE
 
DotNetDom: El futuro de Xamarin
DotNetDom: El futuro de XamarinDotNetDom: El futuro de Xamarin
DotNetDom: El futuro de Xamarin
 
ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3
 
Creando Aplicaciones Web en el 2015
 Creando Aplicaciones Web en el 2015 Creando Aplicaciones Web en el 2015
Creando Aplicaciones Web en el 2015
 
Realidad Aumentada más allá de Glass - Droidcon 2014
Realidad Aumentada más allá de Glass - Droidcon 2014Realidad Aumentada más allá de Glass - Droidcon 2014
Realidad Aumentada más allá de Glass - Droidcon 2014
 
IT Camps Apps Office 365 Valencia 2014
IT Camps Apps Office 365 Valencia 2014IT Camps Apps Office 365 Valencia 2014
IT Camps Apps Office 365 Valencia 2014
 

Azure Storage, Cognitive Services y Xamarin - Universidad Tecnológica de León

  • 1. @enriqueaguilar Apps Móviles con Xamarin Y algo de Azure Storage y Cognitive Services
  • 2. Agenda 1.- Contexto Xamarin 2.- Azure Storage 3.- Demo Azure Storage 4.- Servicios Cognitivos 3.- Demo de Servicios Cognitivos
  • 3. @enriqueaguilar Xamarin Classic (Xamarin.iOS – Xamarin.Android) Xamarin.iOS Xamarin.AndroidNative User InterfacesNative API Access Native Performance Apps with interactions that require native behavior Apps that use many platform-specific APIs Apps where custom UI is more importante than code sharing “Xamarin Classic (iOS - Android) is for Quality Applications in very competitive markets” Miguel De Icaza Fuente: https://www.xamstatic.com/dist/images/pages/vs- download/android-features@2x-mpXl2sxz.png
  • 4. @enriqueaguilar Xamarin.Forms (iOS – Android - Windows) Build native UIs for iOS, Android and Windows from a single, shared C# codebase. Apps where code sharing is more important than custom UI Developers comfortable with XAML Apps that require little platform-specific functionality
  • 5. @enriqueaguilar C# Swift iOS UI XIB (Storyboard) Objective C Xamarin Classic (iOS – Android) Java C# Android UI AXML “Anything you can do in Objective-C, Swift and Java can be done in C# with Xamarin”
  • 6.
  • 7. Almacenamiento Azure Ideal para la Administración del Centro de Datos: • Gama de soluciones para cada necesidad. • La escalabilidad que nunca sobrepasará. • Flexible a medida que cambian las necesidades. • Costos más bajos y pago solo por lo que necesita.
  • 8.
  • 9. Xamarin y Azure Storage Aplicación de iOS que toma una foto y la envia a Azure Storage. Aplicación de Android que baja la imagen subida al Azure Storage. 1 2 3 4 iOS Android
  • 10. Código Xamarin.iOS – Azure Storage Blob string archivoLocal; AVCaptureDevice dispositivodeCaptura; AVCaptureSession sesiondeCaptura; AVCaptureDeviceInput entradaDispositivo; AVCaptureStillImageOutput salidaImagen; AVCaptureVideoPreviewLayer preview; string ruta; byte[] arregloJpg; async Task autorizacionCamara() { var estatus = AVCaptureDevice.GetAuthorizationStatus(AVMediaType.Video); if (estatus != AVAuthorizationStatus.Authorized) { await AVCaptureDevice.RequestAccessForMediaTypeAsync(AVMediaType.Video); } } using System; using UIKit; using System.Drawing; using System.Threading.Tasks; using AVFoundation; using Foundation; using System.IO; using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob;
  • 11. Código Xamarin.iOS – Azure Storage Blob string archivoLocal; AVCaptureDevice dispositivodeCaptura; AVCaptureSession sesiondeCaptura; AVCaptureDeviceInput entradaDispositivo; AVCaptureStillImageOutput salidaImagen; AVCaptureVideoPreviewLayer preview; string ruta; byte[] arregloJpg; async Task autorizacionCamara() { var estatus = AVCaptureDevice.GetAuthorizationStatus(AVMediaType.Video); if (estatus != AVAuthorizationStatus.Authorized) { await AVCaptureDevice.RequestAccessForMediaTypeAsync(AVMediaType.Video); } } using System; using UIKit; using System.Drawing; using System.Threading.Tasks; using AVFoundation; using Foundation; using System.IO; using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob;
  • 12. Código Xamarin.iOS – Azure Storage Blob string archivoLocal; AVCaptureDevice dispositivodeCaptura; AVCaptureSession sesiondeCaptura; AVCaptureDeviceInput entradaDispositivo; AVCaptureStillImageOutput salidaImagen; AVCaptureVideoPreviewLayer preview; string ruta; byte[] arregloJpg; async Task autorizacionCamara() { var estatus = AVCaptureDevice.GetAuthorizationStatus(AVMediaType.Video); if (estatus != AVAuthorizationStatus.Authorized) { await AVCaptureDevice.RequestAccessForMediaTypeAsync(AVMediaType.Video); } } using System; using UIKit; using System.Drawing; using System.Threading.Tasks; using AVFoundation; using Foundation; using System.IO; using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob;
  • 13. public void ConfiguracionCamara() { sesiondeCaptura = new AVCaptureSession(); preview = new AVCaptureVideoPreviewLayer(sesiondeCaptura) { Frame = new RectangleF(40, 50, 300, 350) }; View.Layer.AddSublayer(preview); dispositivodeCaptura = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video); entradaDispositivo = AVCaptureDeviceInput.FromDevice(dispositivodeCaptura); sesiondeCaptura.AddInput(entradaDispositivo); salidaImagen = new AVCaptureStillImageOutput() { OutputSettings = new NSDictionary() }; sesiondeCaptura.AddOutput(salidaImagen); sesiondeCaptura.StartRunning(); } Código Xamarin.iOS – Azure Storage Blob
  • 14. public void ConfiguracionCamara() { sesiondeCaptura = new AVCaptureSession(); preview = new AVCaptureVideoPreviewLayer(sesiondeCaptura) { Frame = new RectangleF(40, 50, 300, 350) }; View.Layer.AddSublayer(preview); dispositivodeCaptura = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video); entradaDispositivo = AVCaptureDeviceInput.FromDevice(dispositivodeCaptura); sesiondeCaptura.AddInput(entradaDispositivo); salidaImagen = new AVCaptureStillImageOutput() { OutputSettings = new NSDictionary() }; sesiondeCaptura.AddOutput(salidaImagen); sesiondeCaptura.StartRunning(); } Código Xamarin.iOS – Azure Storage Blob
  • 15. Código Xamarin.iOS – Azure Storage Blob btnCapturar.TouchUpInside += async delegate { var salidadevideo = salidaImagen.ConnectionFromMediaType(AVMediaType.Video); var bufferdevideo = await salidaImagen.CaptureStillImageTaskAsync(salidadevideo); var datosImagen = AVCaptureStillImageOutput.JpegStillToNSData(bufferdevideo); arregloJpg = datosImagen.ToArray(); string rutacarpeta = Environment.GetFolderPath (Environment.SpecialFolder.Personal); string resultado = "Foto"; archivoLocal = resultado + ".jpg"; ruta = Path.Combine(rutacarpeta, archivoLocal); File.WriteAllBytes(ruta, arregloJpg); Imagen.Image = UIImage.FromFile(ruta); };
  • 16. Código Xamarin.iOS – Azure Storage Blob btnCapturar.TouchUpInside += async delegate { var salidadevideo = salidaImagen.ConnectionFromMediaType(AVMediaType.Video); var bufferdevideo = await salidaImagen.CaptureStillImageTaskAsync(salidadevideo); var datosImagen = AVCaptureStillImageOutput.JpegStillToNSData(bufferdevideo); arregloJpg = datosImagen.ToArray(); string rutacarpeta = Environment.GetFolderPath (Environment.SpecialFolder.Personal); string resultado = "Foto"; archivoLocal = resultado + ".jpg"; ruta = Path.Combine(rutacarpeta, archivoLocal); File.WriteAllBytes(ruta, arregloJpg); Imagen.Image = UIImage.FromFile(ruta); };
  • 17. Código Xamarin.iOS – Azure Storage Blob btnRespaldar.TouchUpInside += async delegate { try { CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse ("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+ q1zwfv7lkb2d/cm8r9ycoc5ZgkNEbuypQYgM001p9E9CWChPtIBfW1A=="); CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient(); CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes"); CloudBlockBlob recursoblob = contenedor.GetBlockBlobReference(archivoLocal); await recursoblob.UploadFromFileAsync(ruta); MessageBox("Guardado en", "Azure Storage - Blob"); } catch (StorageException ex) { MessageBox("Error: ", ex.Message); } };
  • 18. Código Xamarin.iOS – Azure Storage Blob btnRespaldar.TouchUpInside += async delegate { try { CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse ("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+ q1zwfv7lkb2d/cm8r9ycoc5ZgkNEbuypQYgM001p9E9CWChPtIBfW1A=="); CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient(); CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes"); CloudBlockBlob recursoblob = contenedor.GetBlockBlobReference(archivoLocal); await recursoblob.UploadFromFileAsync(ruta); MessageBox("Guardado en", "Azure Storage - Blob"); } catch (StorageException ex) { MessageBox("Error: ", ex.Message); } };
  • 19. Código Xamarin.iOS – Azure Storage Blob btnRespaldar.TouchUpInside += async delegate { try { CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse ("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+ q1zwfv7lkb2d/cm8r9ycoc5ZgkNEbuypQYgM001p9E9CWChPtIBfW1A=="); CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient(); CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes"); CloudBlockBlob recursoblob = contenedor.GetBlockBlobReference(archivoLocal); await recursoblob.UploadFromFileAsync(ruta); MessageBox("Guardado en", "Azure Storage - Blob"); } catch (StorageException ex) { MessageBox("Error: ", ex.Message); } };
  • 20. Código Xamarin.Android – Azure Storage Blob btnImagen.Click += async delegate{ try { string carpeta = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal); string archivoLocal = "Foto.jpg"; string ruta = System.IO.Path.Combine(carpeta, archivoLocal); CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse ("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+q1z wfv7lkb2d/cm8riqbo11p9E9CWChPtIBfW1A=="); CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient(); CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes"); CloudBlockBlob recursoBlob = contenedor.GetBlockBlobReference("Foto.jpg"); var stream = File.OpenWrite(ruta); await recursoBlob.DownloadToStreamAsync(stream); Android.Net.Uri rutaImagen = Android.Net.Uri.Parse(ruta); Imagen.SetImageURI(rutaImagen); } catch (StorageException ex) { Toast.MakeText(this, ex.Message, ToastLength.Short); } };
  • 21. Código Xamarin.Android – Azure Storage Blob btnImagen.Click += async delegate{ try { string carpeta = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal); string archivoLocal = "Foto.jpg"; string ruta = System.IO.Path.Combine(carpeta, archivoLocal); CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse ("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+q1z wfv7lkb2d/cm8riq9E9CWChPtIBfW1A=="); CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient(); CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes"); CloudBlockBlob recursoBlob = contenedor.GetBlockBlobReference("Foto.jpg"); var stream = File.OpenWrite(ruta); await recursoBlob.DownloadToStreamAsync(stream); Android.Net.Uri rutaImagen = Android.Net.Uri.Parse(ruta); Imagen.SetImageURI(rutaImagen); } catch (StorageException ex) { Toast.MakeText(this, ex.Message, ToastLength.Short); } };
  • 22. Código Xamarin.Android – Azure Storage Blob btnImagen.Click += async delegate{ try { string carpeta = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal); string archivoLocal = "Foto.jpg"; string ruta = System.IO.Path.Combine(carpeta, archivoLocal); CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse ("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+q1z wfv7lkb2d/cm8riq9E9CWChPtIBfW1A=="); CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient(); CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes"); CloudBlockBlob recursoBlob = contenedor.GetBlockBlobReference("Foto.jpg"); var stream = File.OpenWrite(ruta); await recursoBlob.DownloadToStreamAsync(stream); Android.Net.Uri rutaImagen = Android.Net.Uri.Parse(ruta); Imagen.SetImageURI(rutaImagen); } catch (StorageException ex) { Toast.MakeText(this, ex.Message, ToastLength.Short); } };
  • 23. Código Xamarin.Android – Azure Storage Blob btnImagen.Click += async delegate{ try { string carpeta = System.Environment.GetFolderPath (System.Environment.SpecialFolder.Personal); string archivoLocal = "Foto.jpg"; string ruta = System.IO.Path.Combine(carpeta, archivoLocal); CloudStorageAccount cuentaAlmacenamiento = CloudStorageAccount.Parse ("DefaultEndpointsProtocol=https;AccountName=enriqueaguilar;AccountKey=UJ+q1z wfv7lkb2d/cm8riq9E9CWChPtIBfW1A=="); CloudBlobClient clienteBlob = cuentaAlmacenamiento.CreateCloudBlobClient(); CloudBlobContainer contenedor = clienteBlob.GetContainerReference("imagenes"); CloudBlockBlob recursoBlob = contenedor.GetBlockBlobReference("Foto.jpg"); var stream = File.OpenWrite(ruta); await recursoBlob.DownloadToStreamAsync(stream); Android.Net.Uri rutaImagen = Android.Net.Uri.Parse(ruta); Imagen.SetImageURI(rutaImagen); } catch (StorageException ex) { Toast.MakeText(this, ex.Message, ToastLength.Short); } };
  • 24. DEMO
  • 25.
  • 27. Microsoft Cognitive Services Son una conjunto de APIs que permiten que las aplicaciones interpreten imágenes y videos proporcionando respuestas cognitivas. microsoft.com/cognitive-services
  • 28.
  • 29. Microsoft Cognitive Services Vision Speech Language Knowlegde Search Computer Vision Custom Recognition Bing Spell Check Academic Knowledge Bing Web Search Emotion Speaker Recognition Linguistic Analysis and Undestanding Entity Linking Bing Image Search Face Speech Text Analytics Knoledge Exploration Bing Video and News Search Video Translator WebLM Recommendatio ns Bing Autosuggest
  • 30. Ejemplo: Aplicación Xamarin.iOS Agregamos los paquetes de conexión al Servicio Cognitivo
  • 31. Agregamos las librerías correspondientes Generamos el método para descargar una Imagen
  • 32. Agregamos las librerías correspondientes Generamos el método para descargar una Imagen
  • 33. Enviamos un stream al método que analizará e interpretará el nivel de felicidad
  • 34. Enviamos un stream al método que analizará e interpretará el nivel de felicidad
  • 35. Se envía la información como stream al método que describirá la emoción del Servicio Cognitivo en el criterio de “Felicidad” Conectamos con el Servicio Cognitivo en la API descriptiva de emociones, se envía la trama y se recibe la información
  • 36. Se envía la información como stream al método que describirá la emoción del Servicio Cognitivo en el criterio de “Felicidad” Conectamos con el Servicio Cognitivo en la API descriptiva de emociones, se envía la trama y se recibe la información
  • 37. Validamos la información descriptiva de emociones del Servicio Cognitivo Recibimos la siguiente imagen
  • 38. Validamos la información descriptiva de emociones del Servicio Cognitivo Recibimos la siguiente imagen
  • 39. Nos conectamos al Servicio Cognitivo en la API de Computer Vision Recibimos la descripción y lo enviamos a la clase de narración en el iPhone Habilitamos los botones
  • 40. Nos conectamos al Servicio Cognitivo en la API de Computer Vision Recibimos la descripción y lo enviamos a la clase de narración en el iPhone Habilitamos los botones
  • 41. Nos conectamos al Servicio Cognitivo en la API de Computer Vision Recibimos la descripción y lo enviamos a la clase de narración en el iPhone Habilitamos los botones
  • 42.
  • 43.
  • 44.
  • 45. Por donde empezar? • microsoft.com/cognitive-services • xamarin.com/resources • blog.xamarin.com • channel9.msdn.com
  • 46. La Innovación Tecnológica impactará en todas las áreas.
  • 47.