Detección de Rostros y Cambio de Cámara en Android Studio
Clase 24 de 31 • Curso de Desarrollo de Aplicaciones con Huawei
Resumen
¿Cómo configurar el índice de sonrisas en la aplicación?
En el desarrollo de aplicaciones que utilizan inteligencia artificial para el reconocimiento facial y de sonrisas, uno de los aspectos más importantes es configurar adecuadamente el índice de sonrisas. Este valor es fundamental para determinar qué porcentaje de sonrisas debe detectar la cámara para considerarla en una foto grupal. En este proceso, creamos una variable llamada smilingRate
y la configuramos en 0.8f —un equivalente del 80%. Este número se selecciona basado en la documentación de Huawei, que sugiere un rango efectivo entre el 70% y el 90%.
¿Cómo alternar entre las cámaras delantera y trasera?
Es común en las aplicaciones de fotografía implementar la opción de cambiar entre la cámara delantera y trasera. Para ello, creamos una variable llamada isFront
que nos ayudará a controlar el estado de la cámara. Luego, necesitamos que nuestra actividad herede de View.OnClickListener
para habilitar el botón que permite este cambio.
// Configurar la escucha de clics para el botón de cambio de cámara
Button switchButton = findViewById(R.id.switch_camera_button);
switchButton.setOnClickListener(this);
En el método onClick
, validamos si la cámara actual es la delantera o la trasera, y actuamos en consecuencia, asegurándonos de que el lensEngine
se cierre y vuelva a inicializar según sea necesario.
¿Cómo implementar la detección de rostro y sonrisa grupal?
Desarrollar la funcionalidad de detección de rostro grupal y sonrisa grupal requiere definir un objeto MLTransactor
y trabajar a partir de un MLFace
. Usamos un analizador, por ejemplo, mAnalyzer
, para procesar las imágenes y detectar rostros.
// Implementación del analizador de sonrisas
MLTransactor<MLFace> faceTransactor = new MLTransactor<MLFace>() {
@Override
public void transactResult(Analyser.Result<MLFace> result) {
SparseArray<MLFace> faceArray = result.getAnalyseList();
int smilingFaces = 0;
for (int i = 0; i < faceArray.size(); i++) {
MLFace face = faceArray.valueAt(i);
if (face.getPossibilityOfSmiling() > smilingRate) {
smilingFaces++;
}
}
if (smilingFaces >= faceArray.size() * smilingRate) {
// Guardar la imagen
}
}
@Override
public void destroy() {
// Recursos de liberación.
}
};
Este fragmento de código muestra cómo analizar una lista de rostros, verificando que la emoción detectada supere el índice de sonrisas configurado, con el objetivo de determinar cuando es factible tomar una fotografía grupal.
¿Cómo solucionar problemas de visualización de la cámara?
Durante las pruebas de nuestra aplicación, podemos encontrar algunos errores de visualización. Es crucial revisar que cada variable y función esté definida y usada correctamente. Un ejemplo es asegurarse de que usamos mOverlay
y no un nombre incorrecto en el LensEnginePreview
.
// Asegurar que las variables están correctamente definidas
LensEnginePreview lensEnginePreview = findViewById(R.id.preview);
lensEnginePreview.setOverlay(mOverlay);
Estos pasos son esenciales no solo para hacer que la aplicación funcione correctamente, sino también para asegurar una experiencia de usuario fluida. Una vez resueltas las configuraciones y problemas, es fundamental realizar pruebas periódicas para validar tanto la detección de rostro individual como grupal y el cambio de cámara.