Cognitive Services: Utilizando el Face API en una app de Xamarin

Luis Beltran

Microsoft MVP | Xamarin Certified Mobile Developer | Estudiante en Universidad Tomás Bata en Zlín, República Checa | Docente en Instituto Tecnológico de Celaya, México | Soy fan de el Atlético de Madrid, el América, la selección de Italia, la música de Katie Melua y los videojuegos | Me gusta viajar

Podría también gustarte...

7 Respuestas

  1. Camila dice:

    Hola, he seguido todos los pasos, y una vez cargo la app, al dispositivo, intento crear el grupo pero aparece “error al crear el grupo” creo que a consecuencia de esto la app no reconoce los rostros., intente también con el archivo que compartió, pero pasa lo mismo. Ademas me aparecen unas advertencias. Esta es una de ellas.

    Gravedad Código Descripción Proyecto Archivo Línea Estado suprimido
    Advertencia NU1605 Degradación del paquete detectada: System.Runtime.CompilerServices.Unsafe de 4.4.0 a 4.3.0. Haga referencia al paquete directamente desde el proyecto para seleccionar una versión diferente.
    FaceLoginApp.Android -> FaceLoginApp -> System.Runtime.CompilerServices.Unsafe (>= 4.4.0)
    FaceLoginApp.Android -> System.Runtime.CompilerServices.Unsafe (>= 4.3.0)

    Me gustaría que por favor diera respuesta.
    Gracias

    • Luis Beltran dice:

      Hola que tal. Gracias por tu comentario. En efecto, lo primero que debe hacerse es crear el grupo. Hay varias cosas que pueden revisarse; la primera es que el id del grupo (FaceGroupID en la clase Constants.cs) debe estar en minúsculas. También revisa tu clave y tu endpoint que estén correctos. Por otro lado, lo que mencionas de System.Runtime.CompilerServices.Unsafe, ¿si lo bajaste a 4.3.0 en el proyecto de Android? Revisa lo que te sugiero, si los problemas persisten te sugiero subas a GitHub tu proyecto, me pasas el link y lo reviso. Estaré al pendiente. ¡Saludos!

  2. Luis Mazariego dice:

    Saludos Luis!.
    Gracias por compartir sus conocimientos siempre viene bien conocer estos temas.
    He seguido paso a paso las instrucciones incluso lo hice viendo el video en YouTube, me compila bien aparentemente no hay errores, pero al momento de ejecutar el codigo en mi dispositivo me lanza una serie de errores. En general es el mismo solo que apuntando a diferentes locaciones creo yo, por ejemplo me sale estos:

    System.IO.DirectoryNotFoundException: Could not find a part of the path “/data/user/0/com.xamarin.live/files/External/.nuget/packages/microsoft.csharp/4.3.0/ref/netstandard1.0/Microsoft.CSharp.dll”.

    System.IO.DirectoryNotFoundException: Could not find a part of the path “/data/user/0/com.xamarin.live/files/External/.nuget/packages/system.collections/4.3.0/ref/netstandard1.3/System.Collections.dll”.

    Como le repito es el mismo error solo cambia el path.

    Espero me pueda ayudar
    De antemano muchas gracias!

  3. Francisco dice:

    Hola, me gustaría saber dónde se almacenan las listas y las caras de los usuarios cuando los creas. También me gustaría saber si es posible consultar las listas que ya existen y los usuarios que ya están registrados.

    • Luis Beltran dice:

      Hola Francisco, una disculpa por mi tardía respuesta. Las caras de los usuarios y las listas se almacenan en la nube pero para acceder a ellas debes hacer peticiones (requests) primero al servicio PersonGroup Person – List para obtener la lista de personas del grupo que estás administrando. Por cada persona obtendrás un personId y una colección de persistedFaceIds, los cuales puedes usar para pedir al servicio PersonGroup Person – Get Face cada uno de los rostros registrados en esa persona.

      Puede sonar un poco complejo pero en realidad solo requiere comprender cómo funciona el API. Te dejo el enlace de la referencia del API, donde puedes ver a detalle cada uno de los métodos que te comento, esperando aun te sirvan.

      https://westus.dev.cognitive.microsoft.com/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236

      Saludos

  4. Fidel Gonzalez dice:

    Buenas luis, Ecxelente blog.

    Gracias por tu dedicacion y ganas de compartir.

    La aplicacin funciona perfectamente pero tengo unas dudas con respecto al servicio face api.

    1.- Es posible evitar que el usuario tome una foto de una galeria para el registro y autenticacion de usaurio.
    2.- Es posible evitar que algun usuario tome una foto desde la camara a una foto digital ( hice la prueba con una foto impresa donde salgo yo solo y tambien con varias personas y devuelve un resultado exitoso)
    3.-Este tipo de reconocimiento facial de azure es confiable para ser implementado en una app que necesite un nivel extra de seguridad sin que sea facilmente vulnerado.

    Espero tus comentarios al respecto.
    Gracias.

    • Luis Beltran dice:

      Hola Fidel. Ya te había respondido por correo pero coloco aquí la respuesta por si es de utilidad a alguien más.

      Entiendo que la principal preocupación es la seguridad y confiabilidad de la aplicación, es decir, ¿hasta qué punto el sistema garantiza que se está autenticando a una persona real y no una fotografía por ejemplo? En ese sentido hay varias recomendaciones qué hacer y que sería interesante aplicar en un sistema real:

      Primero, si es posible decirle a la aplicación móvil que solo capture imágenes de la cámara en vez de seleccionarlas de la galería; eso lo hacemos en la clase ServicioImagen con el método TakePhotoAsync para indicar que la cámara es el punto de entrada de las imágenes (el método PickPhotoAsync está comentado y ese sirve para seleccionar fotos de la galería).

      Como tal, Face Api no hace distinciones entre una foto en tiempo real y una foto del álbum o impresa. Como bien has verificado, la validación en los 3 casos es positiva y no debería ser así; en ese sentido mi recomendación sería que al sistema de autentificación le añadas una capa extra de seguridad, por ejemplo:
      enviar un código via SMS a su teléfono
      usar autenticación por voz
      incluso en vez de analizar una imagen, capturar varios frames (video) en tiempo real para verificar que no es una imagen fija
      algo original sería combinar la autenticación con el Face Api junto con la parte de emociones (Vision Api) y decirle al usuario “muestra una cara feliz” y validar dos cosas: la identidad de la persona y la emoción reflejada por el usuario (la emoción que se solicita al usuario sería aleatoria).
      Sé que de fondo no se resuelven los problemas de identidad y que los usuarios son muy inteligentes cuando de romper la seguridad se trata, pero si se añade una capa adicional se podrá fortalecer aunque sea un poco más el sistema.

      Otra alternativa sería usar una solución personalizada con Open CV por ejemplo que distinga entre una imagen digital y una imagen en tiempo real; es un poco sutil porque a fin de cuentas la imagen en tiempo real se digitaliza pero puede ser que por ahí se obtenga un sistema seguro también, es cosa de pensarle y combinar ideas.

      Espero que estas ideas te ayuden en tu proyecto, de igual forma si hay mas dudas, con gusto te puedo ayudar.

      ¡Saludos!
      Luis

Responder a Camila Cancelar respuesta

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

Follow on Feedly