So richten Sie mit dem HUAWEI ML Kit die automatische Erfassung von Lächeln in einer halben Stunde ein

Einer der Dienste, die bei der Präsentation von Huawei HMS Core 4.0 am meisten Beachtung fanden, ist der maschinelle Lerndienst ML Kit.



Wofür ist der ML Kit Service? Welche Probleme kann es während der Entwicklung lösen?



Heute stelle ich Ihnen eine der wichtigsten Funktionen des ML Kit vor - die Gesichtserkennung.



Gesichtserkennungsübersicht





Diese Funktion kann Gesichtsorientierung, Gesichtsausdrücke (Freude, Ekel, Überraschung, Traurigkeit und Wut), Zeichen (Geschlecht, Alter, Kleidung und Accessoires) erkennen und feststellen, ob die Augen offen oder geschlossen sind. Es kann auch die Koordinaten von Nase, Augen, Lippen und Augenbrauen bestimmen und gleichzeitig sogar Gruppen von Gesichtern identifizieren.



Und vor allem ist die Gesichtserkennungsfunktion absolut kostenlos und funktioniert auf jedem Android-Handy.



Entwicklung einer automatischen Funktion zum Schießen von Lächeln für eine Gruppe von Personen



Ich werde Ihnen zeigen, wie Sie die oben genannten Funktionen verwenden können, um eine Demo der automatischen Funktion zur Erfassung von Lächeln zu erstellen. Sie können den Demo-Quellcode unter github.com/HMS-Core/hms-ml-demo herunterladen .



1. Vorbereitung



Bei der Integration von HMS Core-Entwicklungstools ist der Vorbereitungsprozess nahezu identisch. Sie müssen nur das Maven-Repository hinzufügen und das SDK importieren.



1.1 Fügen Sie das von Huawei bereitgestellte Maven-Repository zu Ihrer build.gradle-Datei auf Projektebene hinzu



Fügen Sie die Maven-Repository-Adresse hinzu:



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


1.2 Fügen Sie der Datei build.gradle auf Anwendungsebene SDK-Abhängigkeiten hinzu



Importieren Sie das Gesichtserkennungs-SDK und das Kern-SDK:



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 Fügen Sie der Datei AndroidManifest.xml eine automatische Modellladefunktion hinzu



Diese Funktion wird hauptsächlich zum Aktualisieren des Modells verwendet. Modelle können automatisch heruntergeladen und basierend auf einem optimierten Algorithmus auf Mobilgeräten aktualisiert werden.



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


1.4 Senden Sie eine Anfrage für den Zugriff auf die Kamera und den Speicher in der Datei AndroidManifest.xml



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


2. Codeentwicklung



2.1 Erstellen Sie einen Gesichtsanalysator, um ein Foto aufzunehmen, wenn ein Lächeln erkannt wird



Gehen Sie zunächst wie folgt vor, um die Fotoaufnahme für die Lächelnerkennung zu konfigurieren:



(1) Konfigurieren Sie die Einstellungen des Analysators.

(2) Übertragen Sie die Parameter an den Analysator.

(3) Überschreiben Sie transactResult in analyzer.setTransacto , um den durch die Gesichtserkennung zurückgegebenen Inhalt zu verarbeiten. Insbesondere wird der Vertrauenswert (dass ein Lächeln im Gesicht ist) zurückgegeben. Wenn das Konfidenzniveau den festgelegten Schwellenwert erreicht, nimmt die Kamera automatisch ein Foto auf.



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);
            }
        }
    });}


Zweitens möchten wir dieses Foto speichern:



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 Erstellen Sie eine LensEngine-Instanz, um dynamische Kamerastreams zu erfassen und Streams an den Analysator zu übergeben



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 Senden Sie einen Antrag auf das Recht, auf dynamische Streams zuzugreifen, und fügen Sie den Code zum Erstellen des Analysators und der LensEngine hinzu



@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;
    }}


Weitere Maßnahmen



Ziemlich einfach, nicht wahr? Auch wenn Sie mit dem Entwicklungsprozess nicht vertraut sind, können Sie in nur einer halben Stunde eine nützliche neue Funktion erstellen! Nun wollen wir sehen, was diese Funktion kann.



Machen Sie ein Foto von einer Person, während Sie lächeln:







Machen Sie ein Foto von mehreren Personen, während Sie lächeln:







Wie sonst können Sie die Gesichtserkennung verwenden? Hier einige Optionen:

1. Verschönern Sie die Gesichtszüge.

2. Erstellen Sie interessante Effekte, indem Sie die Konturen und Merkmale des Gesichts übertreiben oder ändern.

3. Erstellen Sie eine Altersbestimmungsfunktion, die verhindert, dass Kinder auf unangemessene Inhalte zugreifen.

4. Entwerfen Sie eine Augenschutzfunktion, indem Sie festlegen, wie lange der Benutzer auf den Bildschirm schaut.

5. Stellen Sie mithilfe zufälliger Befehle fest, ob eine Person vor der Kamera lebt (z. B. Kopf schütteln, blinzeln, Mund öffnen).

6. Empfehlen Sie den Benutzern Produkte entsprechend ihrem Alter und Geschlecht.



Weitere Informationen finden Sie auf unserer Website:developer.huawei.com/consumer/en/doc/development/HMS-Guides/ml-introduction-4



Wir werden andere Möglichkeiten zur Verwendung des HUAWEI ML-Kits vorstellen. Bleib dran!



All Articles