驴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!