¿Cómo detectar rostros y sonrisas individuales en una aplicación?
En el mundo del desarrollo de aplicaciones, integrar características de detección de rostros y sonrisas puede añadir una capa significativa de interacción y utilidad. En esta sección, aprenderás a implementar estas funciones, explorando cómo configurar y verificar la detección de emociones para tomar una foto cuando un sujeto sonríe.
¿Qué son las variables smiling posibility y save to take picture?
Para lograr la detección de sonrisas, primero necesitamos definir ciertas variables clave:
smiling posibility: Es una variable que determina el umbral de reconocimiento de sonrisa, configurada en un 0.95, que representa un porcentaje del 95%. Según la documentación, este umbral es el más efectivo para determinar si se debe tomar una foto basado en la sonrisa.
save to take picture: Esta variable se utiliza para verificar si es seguro tomar una foto, dependiendo de la evaluación del nivel de sonrisa detectado.
¿Cómo crear un analizador de rostros?
El siguiente paso implica retirar el analizador actual del motor y crear una función para el análisis de los rostros:
Código para crear un analizador de rostros
funcreateFaceAnalyzer(){val faceAnalyzerSetting = FaceAnalyzerSetting.Builder().setFeatureType(TypeFeatures.KEYPOINTS).setMinFaceProportion(0.1f).setTracingAllowed(true).build()val analyzer = FaceAnalyzerFactory.getInstance(context).getFaceAnalyzer(faceAnalyzerSetting)if(detectionMode ==1003){// Modo fotografía individualval faceTransactor =MLFaceTransactor(analyzer,object: MLResult.Callback<MLFace>{overridefunonSuccess(result: List<MLFace>?){if(result !=null&& result.isNotEmpty()){val face = result[0]if(face.emotions.smilingProbability > smilingPossibility){ saveToTakePicture =true}}}// Otros métodos override para manejo de errores, etc.})}}
¿Cómo configurar el módulo de callbacks?
Los callbacks juegan un rol crucial en el manejo de eventos dentro de la app. Aquí configuras las acciones a realizar una vez que el reconocimiento facial detecta una sonrisa:
Ejemplo de callback
overridefunonFaceDetected(itemId: String?, face: MLFace?){ overlay.clear()if(face ==null)return// Pintar el quadro en la cara detectadaval faceGraphic =LocalFaceGraphic(overlay, context, face) overlay.add(faceGraphic)if(face.emotions.smilingProbability > smilingPossibility){ saveToTakePicture =true}}
¿Cómo corregir errores comunes en la detección de rostros?
Durante el desarrollo y pruebas de la aplicación, es común encontrarse con errores que afectan la visualización o la precisión de la detección:
Verifica y corrige cualquier fallo tipográfico en los ejes utilizados para pintar el cuadro sobre el rostro.
Asegúrate de que los callbacks y las funciones estén correctamente configurados para responder a los eventos esperados.
Este enfoque modular y detallado no solo facilita la implementación, sino que también optimiza la detección de rostros y sonrisas, mejorando así la experiencia de usuario. Con el conocimiento adquirido, estás más preparado para aplicar estas técnicas y explorar nuevas funcionalidades en tus proyectos. ¡Sigue aprendiendo y explorando más posibilidades en el mundo del desarrollo de interfaces de usuario!
En ocaciones el circulo de su cara no deja ver bien lo que está escribiendo.
De acuerdo con la documentacion oficial
objectCreateCallback se llama cuando se detecta un nuevo objeto (rostro)
objectUpdateCallback se llama cuando el objeto (rostro) del FRAME actual es el mismo del FRAME anterior
lostCallback se llama cuando se ha perdido el rastreo de un objeto (rostro) y aun no ha superado la cantidad de FRAMES de perdido
completeCallback se llama cuando se ha perdido el rastreo de un objeto (rostro) y se superó la cantidad de FRAMES de perdido
Excelente hasta que se ven resultados visuales :)
¿Hasta acá, a todos les ha funcionado el código?
Hola Luis, tuviste algún inconveniente con el código o algún error, de ser así compártelo para poder ayudarte
yo no he podido ver mi rostro , la camara no se abre
¿La validacion del segundo callback es necesaria? no le veo utilidad