À quoi sert le service ML Kit? Quels problèmes peut-il résoudre lors du développement?
Aujourd'hui, je présente à votre attention l'une des fonctions les plus importantes de ML Kit - la reconnaissance faciale.
Présentation de la reconnaissance faciale
Cette fonction peut reconnaître l'orientation du visage, les expressions faciales (joie, dégoût, surprise, tristesse et colère), les signes (sexe, âge, vêtements et accessoires) et si les yeux sont ouverts ou fermés. Il peut également déterminer les coordonnées du nez, des yeux, des lèvres et des sourcils, et même identifier des groupes de visages en même temps.
Et surtout, la fonction de reconnaissance faciale est absolument gratuite et fonctionne sur n'importe quel téléphone Android.
Développer une fonction de prise de vue automatique du sourire pour un groupe de personnes
Je vais vous expliquer comment utiliser les fonctionnalités ci-dessus pour créer une démonstration de la fonction de capture automatique de sourire. Vous pouvez télécharger le code source de la démo sur github.com/HMS-Core/hms-ml-demo .
1. Préparation
Lors de l'intégration des outils de développement HMS Core, le processus de préparation est presque le même. Il vous suffit d'ajouter le référentiel Maven et d'importer le SDK.
1.1 Ajoutez le référentiel Maven fourni par Huawei à votre fichier build.gradle au niveau du projet
Ajoutez l'adresse du référentiel Maven:
buildscript {
repositories {
maven {url 'http://developer.huawei.com/repo/'}
} }allprojects {
repositories {
maven { url 'http://developer.huawei.com/repo/'}
}}
1.2 Ajouter des dépendances SDK au fichier build.gradle au niveau de l'application
Importez le SDK de reconnaissance faciale et le 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 Ajouter la fonction de chargement automatique du modèle au fichier AndroidManifest.xml
Cette fonction est principalement utilisée pour mettre à jour le modèle. Les modèles peuvent être téléchargés automatiquement et mis à jour sur mobile en fonction d'un algorithme optimisé.
<manifest
<application
<meta-data
android:name="com.huawei.hms.ml.DEPENDENCY"
android:value= "face"/>
</application></manifest>
1.4 Soumettre une demande d'accès à la caméra et à la mémoire dans le fichier AndroidManifest.xml
<!--Camera permission--><uses-permission android:name="android.permission.CAMERA" /><!--Storage permission--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. Développement de code
2.1 Créer un analyseur de visage pour prendre une photo lorsqu'un sourire est détecté
Tout d'abord, pour configurer la capture de photo de détection de sourire, procédez comme suit:
(1) Configurez les paramètres de l'analyseur.
(2) Transférez les paramètres vers l'analyseur.
(3) Remplacez transactResult dans analyzer.setTransacto pour gérer le contenu renvoyé par la reconnaissance faciale. Plus précisément, le niveau de confiance (qu'il y a un sourire sur le visage) est renvoyé. Lorsque le niveau de confiance atteint le seuil défini, l'appareil photo prend automatiquement une photo.
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);
}
}
});}
Deuxièmement, nous voulons enregistrer cette photo:
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 Créer une instance LensEngine pour capturer les flux de caméra dynamiques et transmettre les flux à l'analyseur
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 Soumettre une demande de droit d'accès aux flux dynamiques et joindre le code de création de l'analyseur et de 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;
}}
Actions supplémentaires
Assez simple, n'est-ce pas? Même si vous n'êtes pas familier avec le processus de développement, vous pouvez toujours créer une nouvelle fonctionnalité utile en seulement une demi-heure! Voyons maintenant ce que cette fonction peut faire.
Prenez une photo d'une personne en souriant:
Prenez une photo de plusieurs personnes en souriant:
Sinon, comment pouvez-vous utiliser la reconnaissance faciale? Voici quelques options:
1. Embellissez les traits du visage.
2. Créez des effets intéressants en exagérant ou en modifiant les contours et les traits du visage.
3. Créez une fonction de détermination de l'âge qui empêchera les enfants d'accéder à un contenu inapproprié.
4. Concevez une fonction de protection des yeux en déterminant la durée pendant laquelle l'utilisateur regarde l'écran.
5. Déterminez si une personne est vivante devant la caméra en utilisant des commandes aléatoires (par exemple, secouer la tête, cligner des yeux, ouvrir la bouche).
6. Recommander des produits aux utilisateurs en fonction de leur âge et de leur sexe.
Pour plus de détails, visitez notre site Web:developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4
Nous partagerons d'autres façons d'utiliser le kit HUAWEI ML. Restez à l'écoute!