En este post explicaré cómo analizar las características visuales que puede tener el contenido de una imagen.

0.5.Crear el servicio en Azure (Dar clicks)

Comenzaremos creándonos un proyecto en .NET Core, una Web Application. Seleccionamos que sea de tipo API, esta es la parte de la aplicación que contendrá las llamadas al servicio que nos creamos en Azure, con sus claves las cuales no nos interesa que otros desarrolladores sepan cuales son.

Nos dirigimos a https://portal.azure.com, buscamos en la barra de búsqueda y escribimos «CognitiveServices» y buscamos en la pantalla un servicio denominado «ComputerVision», podemos seleccionar otro servicio cognitivo como «TextAnalyzer», pero esta vez usare ComputerVision. Seleccionamos un plan Free (F0).

Ahora comenzamos a programar.

1.Agregamos el Nuget para el API

El nuget que vamos a utilizar va a ser el siguiente:

Microsoft.Azure.CognitiveServices.Vision.ComputerVision

2.Añadir el modelo de donde sacaremos la imagen

ModeloApi2

Le asignamos una propiedad byte[] que posteriormente utilizaremos para analizar la imagen.

3.Especificamos el Endpoint y las claves del servicio

Estas claves y el endpoint se encuentran en el portal de azure, dentro del servicio ComputerVision que nos hemos creado. Las copiamos y nos dirigimos a appsettings.json, y lo editamos de esta manera:

appsetingsjson

Estos valores los recogeremos en el Repository que nos creamos a continuacion

4.Crear carpeta Repositories y añadir el repositorio:

Lo dicho, el código seria el siguiente:

usingRepositoryAPI
RepositoryApi1
RepositoryApi2

Como se puede apreciar en las imágenes utilizo un método Authenticate que se encarga de devolver un ComputerVisionClient pasándole a este un ApiKeyServiceClientCredentials, donde le especificaremos la clave del servicio como parámetro y el Endpoint como propiedad del objeto ApiKeyServiceClientCredentials. En el constructor del repository se recuperan la clave y el endpoint con configuration[«<nombre_especificado_en_appsettings>»] y se los pasamos al citado Authenticate para instanciar el cliente de tipo ComputerVisionClient.

En el método AnalizarImagen nos encontramos con una lista de VisualFeatureTypes, este objeto es una enumeracion en la que podemos elegir que tipos de análisis queremos añadir al proceso de análisis.

Por ultimo utilizamos el objeto ImageAnalysis para capturar los resultados del análisis, y añadimos los resultados como un String y los añadimos a una lista con un bucle que luego retornamos.

5.Hora de irse a Controllers y crear CognitiveController

Aquí expondremos los métodos desde los que accederemos desde el cliente

ControllerApi

Y ya tendríamos el api montado, para utilizar el método de arriba deberíamos usar la siguiente ruta (en mi caso):

api/Cognitive/GetFeatures

Este proyecto se puede subir a azure perfectamente.

6.Crear una Aplicacion .NET Core WebApplication MVC (Cliente)

Con esta aplicación consumiremos los servicios que hemos creado.

7.Sobre Models nos creamos el modelo

Este modelo es el que enviaremos al API creado anteriormente, lo puedes copiar y pegar del anterior proyecto, pero le añadimos «[JsonProperty(«<nombre_propiedad>»)]» en la propiedad byte del modelo, para ello hay que añadir el nuget Newtonsoft.json y hacer el using en el modelo:

ModeloCliente

8. Crear carpeta Repositories y añadimos la clase RepositoryVision

usingrepocliente
Reposotorycliente1.2
Reposcliente2
Repocliente3

Añadimos la url del api que nos hemos creado, el mio como esta alojado en azure tiene esa url, se puede ejecutar el api en local y usar esa url local para consumir el servicio.

Con el método GetFeatures() recogemos las características obtenidas de la imagen, pasándole esta como byte[] y dentro creando el model que enviaremos al servicio.

9.Editar el Index de HomeController

O nos creamos otra vista u otro controller, yo uso el mismo por rapidez.

controllerCliente1

Añadimos el RepositoryVision como propiedad del controller y lo inyectamos en el constructor.

ControllerCliente2

Nos creamos el método Post de la vista Index de donde recuperamos el IFormFile y lo convertimos a byte[].

10.Crear la Vista Index

Mi código es el siguiente:

IndexCliente

Por ultimo ñadimos el Repository a ConfigureServices() del startup.cs:

ServicesCliente

Y con todo esto ya tendriamos nuestra aplicacion perfectamente funcional.

Muchas gracias por atender la informacion que contiene este post y otros del TechClub Tajamar.

Autor/a: Iván Encinas Rodríguez

Curso: Microsoft MCSA Web Applications + Microsoft MCSD App Builder + Xamarin

Centro: Tajamar

Año académico: 2019-2020

Código / recursos utilizados / Otros datos de interés: https://github.com/SuperBash/CognitiveComptVision

LinkedIn: http://www.linkedin.com/in/ivan-encinas

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.