C贸mo configurar la captura autom谩tica de sonrisas en media hora con el kit ML de HUAWEI

Uno de los servicios que m谩s atenci贸n llam贸 la atenci贸n en la presentaci贸n de Huawei HMS Core 4.0 es el servicio de aprendizaje autom谩tico ML Kit.



驴Para qu茅 sirve el servicio ML Kit? 驴Qu茅 problemas puede resolver durante el desarrollo?



Hoy les presento una de las funciones m谩s importantes del ML Kit: el reconocimiento facial.



Descripci贸n general del reconocimiento facial





Esta funci贸n puede reconocer la orientaci贸n facial, las expresiones faciales (alegr铆a, disgusto, sorpresa, tristeza e ira), signos (g茅nero, edad, ropa y accesorios) y si los ojos est谩n abiertos o cerrados. Tambi茅n puede determinar las coordenadas de la nariz, ojos, labios y cejas, e incluso identificar grupos de caras al mismo tiempo.



Y lo m谩s importante, la funci贸n de reconocimiento facial es absolutamente gratuita y funciona en cualquier tel茅fono Android.



Desarrollo de una funci贸n de disparo autom谩tico de sonrisas para un grupo de personas



Le explicar茅 c贸mo puede usar las funciones anteriores para crear una demostraci贸n de la funci贸n de captura autom谩tica de sonrisas. Puede descargar el c贸digo fuente de la demostraci贸n en github.com/HMS-Core/hms-ml-demo .



1. Preparaci贸n



Al integrar cualquier herramienta de desarrollo de HMS Core, el proceso de preparaci贸n es casi el mismo. Solo necesita agregar el repositorio de Maven e importar el SDK.



1.1 Agregue el repositorio Maven proporcionado por Huawei a su archivo build.gradle a nivel de proyecto



Agregue la direcci贸n del repositorio de Maven:



buildscript {
    repositories {        
        maven {url 'http://developer.huawei.com/repo/'}
    }    }allprojects {
    repositories {       
        maven { url 'http://developer.huawei.com/repo/'}
    }}


1.2 Agregar dependencias de SDK al archivo build.gradle a nivel de aplicaci贸n



Importe el SDK de reconocimiento facial y el SDK principal:



dependencies{ 
  // import the basic SDK 
  implementation 'com.huawei.hms:ml-computer-vision:1.0.2.300' 
  // Import the face detection SDK
  implementation 'com.huawei.hms:ml-computer-vision-face-recognition-model:1.0.2.300'   
 }


1.3 Agregar la funci贸n de carga autom谩tica del modelo al archivo AndroidManifest.xml



Esta funci贸n se utiliza principalmente para actualizar el modelo. Los modelos se pueden descargar autom谩ticamente y actualizar en dispositivos m贸viles en base a un algoritmo optimizado.



<manifest    
   <application  
       <meta-data                     
           android:name="com.huawei.hms.ml.DEPENDENCY"          
           android:value= "face"/>                 
   </application></manifest> 


1.4 Env铆e una solicitud de acceso a la c谩mara y la memoria en el archivo AndroidManifest.xml



<!--Camera permission--><uses-permission android:name="android.permission.CAMERA" /><!--Storage permission--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


2. Desarrollo de c贸digo



2.1 Crea un analizador de rostros para tomar una foto cuando se detecta una sonrisa



Primero, para configurar la captura de fotograf铆as de detecci贸n de sonrisas, siga estos pasos:



(1) Configure los ajustes del analizador.

(2) Transfiera los par谩metros al analizador.

(3) Anule transactResult en analyzer.setTransacto para manejar el contenido devuelto por reconocimiento facial. En concreto, se devuelve el nivel de confianza (que hay una sonrisa en el rostro). Cuando el nivel de confianza alcanza el umbral establecido, la c谩mara toma una foto autom谩ticamente.



private MLFaceAnalyzer analyzer;private void createFaceAnalyzer() {
    MLFaceAnalyzerSetting setting =
            new MLFaceAnalyzerSetting.Factory()
                    .setFeatureType(MLFaceAnalyzerSetting.TYPE_FEATURES)
                    .setKeyPointType(MLFaceAnalyzerSetting.TYPE_UNSUPPORT_KEYPOINTS)
                    .setMinFaceProportion(0.1f)
                    .setTracingAllowed(true)
                    .create();                 
    this.analyzer = MLAnalyzerFactory.getInstance().getFaceAnalyzer(setting);
    this.analyzer.setTransactor(new MLAnalyzer.MLTransactor<MLFace>() {
        @Override        public void destroy() {
        }

        @Override        public void transactResult(MLAnalyzer.Result<MLFace> result) {
            SparseArray<MLFace> faceSparseArray = result.getAnalyseList();
            int flag = 0;
            for (int i = 0; i < faceSparseArray.size(); i++) {
                MLFaceEmotion emotion = faceSparseArray.valueAt(i).getEmotions();
                if (emotion.getSmilingProbability() > smilingPossibility) {
                    flag++;
                }
            }
            if (flag > faceSparseArray.size() * smilingRate && safeToTakePicture) {
                safeToTakePicture = false;
                mHandler.sendEmptyMessage(TAKE_PHOTO);
            }
        }
    });}


En segundo lugar, queremos guardar esta foto:



private void takePhoto() {
    this.mLensEngine.photograph(null,
            new LensEngine.PhotographListener() {
                @Override                public void takenPhotograph(byte[] bytes) {
                    mHandler.sendEmptyMessage(STOP_PREVIEW);
                    Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                    saveBitmapToDisk(bitmap);
                }
            });}


2.2 Cree una instancia de LensEngine para capturar transmisiones de c谩mara din谩micas y pasar transmisiones al analizador



private void createLensEngine() {
    Context context = this.getApplicationContext();
    // Create LensEngine
    this.mLensEngine = new LensEngine.Creator(context, this.analyzer).setLensType(this.lensType)
            .applyDisplayDimension(640, 480)
            .applyFps(25.0f)
            .enableAutomaticFocus(true)
            .create();}


2.3 Env铆e una solicitud para obtener el derecho de acceso a flujos din谩micos y adjunte el c贸digo para crear el analizador y LensEngine



@Overridepublic void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setContentView(R.layout.activity_live_face_analyse);
    if (savedInstanceState != null) {
        this.lensType = savedInstanceState.getInt("lensType");
    }
    this.mPreview = this.findViewById(R.id.preview);
    this.createFaceAnalyzer();
    this.findViewById(R.id.facingSwitch).setOnClickListener(this);
    // Checking Camera Permissions
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
        this.createLensEngine();
    } else {
        this.requestCameraPermission();
    }}
    private void requestCameraPermission() {
    final String[] permissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};

    if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
        ActivityCompat.requestPermissions(this, permissions, LiveFaceAnalyseActivity.CAMERA_PERMISSION_CODE);
        return;
    }}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    if (requestCode != LiveFaceAnalyseActivity.CAMERA_PERMISSION_CODE) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        return;
    }
    if (grantResults.length != 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        this.createLensEngine();
        return;
    }}


Otras acciones



Bastante simple, 驴no? Incluso si no est谩 familiarizado con el proceso de desarrollo, puede crear una nueva funci贸n 煤til en solo media hora. Ahora veamos qu茅 puede hacer esta funci贸n.



Tome una foto de una persona mientras sonr铆e:







Tome una foto de varias personas mientras sonr铆e:







驴De qu茅 otra manera se puede utilizar el reconocimiento facial? Aqu铆 hay algunas opciones:

1. Embellece los rasgos faciales.

2. Crea efectos interesantes exagerando o cambiando los contornos y rasgos del rostro.

3. Cree una funci贸n de determinaci贸n de la edad que evite que los ni帽os accedan a contenido inapropiado.

4. Dise帽e una funci贸n de protecci贸n para los ojos determinando la cantidad de tiempo que el usuario mira la pantalla.

5. Determine si una persona est谩 viva frente a la c谩mara mediante comandos aleatorios (por ejemplo, sacuda la cabeza, parpadee, abra la boca).

6. Recomendar productos a los usuarios seg煤n su edad y sexo.



Para m谩s detalles visita nuestro sitio web:developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4



Compartiremos otras formas de usar el kit HUAWEI ML. 隆Mant茅nganse al tanto!



All Articles