ML Kit agrega contornos de rostros para crear apps visuales más inteligentes
jueves, 22 de noviembre de 2018

Christiaan Prins
Gerente de producto
Si estás compilando o quieres compilar una app visual, te encantará la nueva detección de contorno de rostros de ML Kit. Con esta herramienta, puedes aprovechar muchos casos prácticos comunes del aprendizaje automático (AA), como la detección de rostros mediante visión artificial. ¿Tienes una foto y necesitas saber dónde colocar un sombrero en la cabeza de una persona? ¿Quieres colocar anteojos sobre los ojos de alguien? ¿O, quizás, solo un monóculo en el ojo izquierdo? Todo esto es posible con la detección de rostro de ML Kit. En esta entrada, hablaremos sobre la nueva función de contorno de rostros que permite compilar mejores apps visuales, tanto en Android como en iOS.
Detecta contornos faciales
Con solo unas pocas opciones de configuración, ahora puedes detectar el contorno detallado de un rostro. Un contorno es un conjunto de más de 100 puntos que perfilan el rostro y rasgos comunes como los ojos, la nariz y la boca. Puedes verlos en la siguiente imagen. Observa cómo, cuando la persona levanta las cejas, los puntos del contorno se mueven para acompañarlas. Estos puntos muestran cómo hacen las apps de cámara avanzadas para configurar filtros creativos y gafas artísticas en el rostro de un usuario.
A fin de configurar el detector de rostros para que detecte estos puntos, solo se necesitan unas pocas líneas de código.
lazy var vision = Vision.vision() let options = VisionFaceDetectorOptions() options.contourMode = .all let faceDetector = vision.faceDetector(options: options)Los puntos de contorno también se pueden actualizar en tiempo real. Con el objetivo de lograr un índice de fotogramas ideal, el detector de rostros está configurado en modo
fast
de manera predeterminada.
Cuando estés listo para detectar puntos en un rostro, envía una imagen o un búfer a ML Kit para su procesamiento.
faceDetector.process(visionImage) { faces, error in guard error == nil, let faces = faces, !faces.isEmpty else { return } for face in faces { if let faceContour = face.contour(ofType: .face) { for point in faceContour.points { print(point.x) // the x coordinate print(point.y) // the y coordinate } } }ML Kit te especificará una matriz de puntos, que son las coordinadas X e Y de los contornos ubicados en la misma escala que la imagen.

Detecta la ubicación de rasgos faciales
El detector también puede detectar puntos de referencia en rostros. Un "punto de referencia" es un término amplio que se usa para definir rasgos faciales, como la nariz, los ojos, las orejas y la boca. Hemos mejorado drásticamente su rendimiento desde que lanzamos ML Kit en I/O.Para detectar puntos de referencia, configura el detector de rostros con la opción
landmarkMode
:
lazy var vision = Vision.vision() let options = VisionFaceDetectorOptions() options.landmarkMode = .all let faceDetector = vision.faceDetector(options: options)Luego, pasa una imagen por el detector para recibir y procesar las coordenadas de los puntos de referencia detectados.
faceDetector.process(visionImage) { faces, error in guard error == nil, let faces = faces, !faces.isEmpty else { return } for face in faces { // check for the presence of a left eye if let leftEye = face.landmark(ofType: .leftEye) { // TODO: put a monocle over the eye [monocle emoji] print(leftEye.position.x) // the x coordinate print(leftEye.position.y) // the y coordinate } } }