Creación del Motor de Lente para Selfie Cam en Android

Clase 19 de 31Curso de Desarrollo de Aplicaciones con Huawei

Resumen

¿Cómo crear el motor de lente para tu cámara de selfies?

Dar el siguiente paso en el desarrollo de tu aplicación de cámara es crear el motor de lente que dará vida a tu cámara de selfies. Este motor es fundamental para integrar funciones avanzadas como visualización en tiempo real y procesamiento de imágenes mediante machine learning con Huawei. Aquí te explicamos, paso a paso, cómo llevar a cabo este proceso dentro de tu proyecto de Android.

¿Cómo crear la clase LentsEnginePreview?

Primero, necesitas comenzar agregando una nueva clase dentro del paquete de la cámara que será denominada LentsEnginePreview. Esta clase será el núcleo del motor de lente:

public class LentsEnginePreview extends ViewGroup {
    private SurfaceView surfaceView;
    private boolean startRequested = false;
    private boolean surfaceAvailable = false;
    private LensEngine lensEngine = null;
    private GraphicOverlay overlay;

    // Constructor
    public LentsEnginePreview(Context context, AttributeSet attrs) {
        super(context, attrs);
        surfaceView = new SurfaceView(context);
        addView(surfaceView);
    }
}
  1. Herencia y Contexto: Hereda de ViewGroup y recibe un context y atributos en su constructor.
  2. Variables: Define variables esenciales como surfaceView, startRequested, surfaceAvailable, lensEngine y overlay.
  3. Inicialización: La superficie es inicializada creando una nueva instancia de SurfaceView.

¿Cómo implementar funciones clave?

Una vez creadas las variables y el constructor, es momento de desarrollar las funciones que activarán y desactivarán la cámara.

Función Start

Esta función inicia el lente de la cámara con un control de excepciones en caso de fallos con el dispositivo:

public synchronized void start(LensEngine lensEngine) throws IOException {
    this.lensEngine = lensEngine;
    startRequested = true;
    startIfReady();
}
  • Excepciones: Controla los posibles errores durante el inicio de la cámara.
  • Inicialización: Comprueba si el LensEngine está disponible e intenta iniciar el proceso de captura.

Función Stop

Detiene el motor del lente si está activo:

public synchronized void stop() {
    if (lensEngine != null) {
        lensEngine.release();
        lensEngine = null;
    }
}

Función Release

Libera los recursos asociados con la cámara:

public synchronized void release() {
    if (lensEngine != null) {
        lensEngine.release();
        lensEngine = null;
    }
}

¿Cómo configurar el Surface Callback?

El Callback de la superficie se utiliza para gestionar los cambios en el estado de la pantalla y detectar cuándo la superficie está lista para usarse:

private class SurfaceCallback implements SurfaceHolder.Callback {
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        // No change management required
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        surfaceAvailable = false;
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        surfaceAvailable = true;
        try {
            startIfReady();
        } catch (IOException e) {
            Log.e(TAG, "Could not start camera source.", e);
        }
    }
}
  • surfaceCreated: Marca la superficie como disponible e invoca startIfReady para intentar iniciar el LensEngine.
  • surfaceDestroyed: Indica que la superficie ya no está disponible.

Consejos prácticos y recomendaciones

  • Manejo de Excepciones: Asegúrate de manejar adecuadamente las excepciones utilizando estructuras try-catch. Esto garantizará un funcionamiento más robusto de la aplicación.
  • Optimización del Código: Mantén el código organizado y comenta donde sea necesario para facilitar la comprensión y el mantenimiento futuro.
  • Experimenta con Overlay: Implementa overlays gráficos para visualizar detecciones en tiempo real y mejorar la interacción del usuario.

Continúa perfeccionando tus habilidades de desarrollo y explorando cómo puedes personalizar y optimizar el motor de lente para que se adapte mejor a tus necesidades. Convertirte en un experto tomará tiempo, pero cada paso en este viaje de aprendizaje te acerca más a dominar esta tecnología. ¡Sigue adelante!