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!