Introducción a HMS Core

1

Pasos para el desarrollo de aplicaciones con Huawei

2

Debugging en la nube con Huawei

3

¿Qué es HMS Core?

4

Creación del proyecto en Android Studio

5

Creación de la aplicación en App Gallery Connect

6

Configuración de firma SHA-256

7

Configuración de APIs

8

Configuración de Android Studio y Gradle

9

Probando la sincronización de la aplicación

Autenticación con HMS Account Kit

10

Diseñando nuestra pantalla de login

11

Agregando los métodos de autenticación

12

Verificando la autenticación

13

Agregando el método de logout

Construyendo nuestra cámara de selfies con HMS ML Kit

14

Machine Learning con Huawei

15

Agregando los permisos para acceder a la cámara

16

Diseñando la pantalla personalizada de la cámara

17

Creando la capa de gráficos de la cámara

18

Creando el layout para nuestro rostro

19

Creando el layout del lente de la cámara

20

Creando nuestra actividad de cámara

21

Agregando nuestra cámara personalizada a la actividad

22

Agregando los métodos de verificación de rostro

23

Agregando la detección de rostro y sonrisa individual

24

Agregando la detección de rostro y sonrisa grupal

25

Tomar nuestra imagen y agregar un método de re-toma de foto

26

Guardar la foto en nuestra galeria

Aplicando notificaciones push con HMS Push kit

27

Crear el servicio de push notifications

28

Agregar el servicio de HMS Push kit

29

Verificar la conectividad de las notificaciones en App Gallery Connect

Conclusiones y consejos

30

Tips y solución de inconvenientes frecuentes

31

¿Qué más tiene Huawei?

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Creando el layout para nuestro rostro

18/31
Recursos

Aportes 5

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

**CommonUtils **

package com.sandoval.hselfiecamera.utils

import android.content.Context

object CommonUtils {
    fun dp2px(context: Context, dipValue: Float): Float {
        return dipValue * context.resources.displayMetrics.density + 0.5f
    }
}

LocalFaceGraphic

package com.sandoval.hselfiecamera.overlay

import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import com.huawei.hms.mlsdk.face.MLFace
import com.huawei.hms.mlsdk.face.MLFaceShape
import com.sandoval.hselfiecamera.utils.CommonUtils.dp2px

class LocalFaceGraphic(
    private val overlay: GraphicOverlay,
    @field:Volatile private var face: MLFace?,
    private val mContext: Context
) : BaseGraphic(overlay) {

    private val facePaint: Paint

    init {
        val lineWidth = dp2px(mContext, 1f)
        facePaint = Paint()
        facePaint.color = Color.parseColor("#EF484B")
        facePaint.style = Paint.Style.STROKE
        facePaint.strokeWidth = lineWidth
    }

    override fun draw(canvas: Canvas?) {
        if (face == null) {
            return
        }

        val faceShape = face!!.getFaceShape(MLFaceShape.TYPE_FACE)
        val points = faceShape.points
        var verticalMin = Float.MAX_VALUE
        var verticalMax = 0f
        var horizontalMin = Float.MAX_VALUE
        var horizontalMax = 0f
        for (i in points.indices) {
            val point = points[i] ?: continue
            if (point.x != null && point.y != null) {
                if (point.x > horizontalMax) horizontalMax = point.x
                if (point.x < horizontalMin) horizontalMin = point.x
                if (point.y > verticalMax) verticalMax = point.y
                if (point.y < verticalMin) verticalMin = point.y
            }
        }
        val rect = Rect(
            translateX(horizontalMin).toInt(),
            translateY(verticalMin).toInt(),
            translateY(horizontalMax).toInt(),
            translateY(verticalMax).toInt()
        )
        canvas!!.drawRect(rect, facePaint)
    }

}

Es interesante como MLFace tiene utilidades para detectar rostros o cosas mas detalladas como los ojos

Desconocía que Android Canvas no es compatible con DensityPoints

Revisando el código noté que al declarar la clase Rect() de android.graphics, se pasa 3 veces el método translateY(), por lo que a mi parecer debería de ser de la siguiente manera:

 val rect = Rect(
            translateX(horizontalMin).toInt(),
            translateY(verticalMin).toInt(),
            translateX(horizontalMax).toInt(),
            translateY(verticalMax).toInt()
        )
        canvas!!.drawRect(rect, facePaint)

Ya que esto es lo que solicita el método Rect():

 public Rect(int left, int top, int right, int bottom) {
        throw new RuntimeException("Stub!");
    }

No estoy completamente seguro de si mi teoría es la correcta…
Saludos