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

Adquiere por un a帽o todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

2D
1H
26M
30S

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?

o inicia sesi贸n.

**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