1. Hinweis
Im ersten Codelab dieser Reihe haben Sie eine sehr einfache App erstellt, die die Bildkennzeichnung verwendet, um den Inhalt eines Bildes zu analysieren. Sie haben ein Bild einer Gänseblümchenblüte übergeben und die KI hat Ihnen zurückgegeben, dass sie Dinge wie ein Blütenblatt oder den Himmel gesehen hat. Im zweiten Codelab haben Sie dann mit Python ein neues benutzerdefiniertes Modell trainiert, das fünf verschiedene Arten von Blumen erkennt.
In diesem Codelab aktualisieren Sie die App aus dem ersten Lab mit dem Modell aus dem zweiten.
Sie können den vollständigen Quellcode für dieses Codelab abrufen, indem Sie dieses Repository klonen. Sie sehen Unterverzeichnisse für Android und iOS. Der Code des vorherigen Codelabs ist als ImageClassifierStep1 verfügbar, falls Sie ihn verwenden möchten. Der fertige Code für dieses Codelab ist als ImageClassifierStep2 verfügbar.
Vorbereitung
- Sie sollten die ersten beiden Codelabs dieses Lernpfads abgeschlossen haben.
Aufgaben und Lerninhalte
- Ein benutzerdefiniertes Modell, das im vorherigen Lab trainiert wurde, in eine Android- oder iOS-App einbinden
Voraussetzungen
- Android Studio, verfügbar unter developer.android.com/studio für den Android-Teil des Labs
- Xcode, verfügbar im Apple App Store, für den iOS-Teil des Labs
2. Start-App herunterladen
Zuerst benötigen Sie die App aus dem Codelab „Build your first Computer Vision App on Android or iOS“. Wenn Sie das Lab durchlaufen haben, heißt es „ImageClassifierStep1“. Wenn Sie das Lab nicht durchlaufen möchten, können Sie die fertige Version aus dem Repository klonen.
Öffnen Sie sie in Android Studio, nehmen Sie die erforderlichen Änderungen vor und führen Sie die App aus, wenn Sie fertig sind, um sicherzugehen, dass sie funktioniert. Auf dem Bildschirm sollte Folgendes zu sehen sein:

Es ist eine recht einfache App, aber sie zeigt einige sehr leistungsstarke Funktionen mit nur wenig Code. Wenn diese Blume jedoch als Gänseblümchen und nicht nur als Blume erkannt werden soll, müssen Sie die App so aktualisieren, dass sie Ihr benutzerdefiniertes Modell aus dem Codelab „Benutzerdefiniertes Modell für Ihren Bildklassifikator erstellen“ verwendet.
3. build.gradle für die Verwendung benutzerdefinierter ML Kit-Modelle aktualisieren
- Suchen Sie in Android Studio nach der Datei
build.gradleauf App-Ebene. Am einfachsten geht das im Projekt-Explorer. Achten Sie darauf, dass oben Android ausgewählt ist. Unten sehen Sie dann einen Ordner für Gradle-Scripts. - Öffnen Sie die Datei für das Modul, wobei Ihr App-Name gefolgt von „.app“ steht, wie hier gezeigt (Modul: ImageClassifierStep1.app):

- Suchen Sie am Ende der Datei nach der Einstellung dependencies. Dort sollte die folgende Zeile angezeigt werden:
implementation 'com.google.mlkit:image-labeling:17.0.1'
Die Versionsnummer kann abweichen. Die aktuelle Versionsnummer finden Sie immer auf der ML Kit-Website unter https://developers.google.com/ml-kit/vision/image-labeling/android.
- Ersetzen Sie dies durch den Verweis auf die benutzerdefinierte Bibliothek für die Bildkennzeichnung. Die Versionsnummer finden Sie unter https://developers.google.com/ml-kit/vision/image-labeling/custom-models/android.
implementation 'com.google.mlkit:image-labeling-custom:16.3.1'
- Außerdem fügen Sie ein .tflite-Modell hinzu, das Sie im vorherigen Lab erstellt haben. Dieses Modell soll nicht komprimiert werden, wenn Android Studio Ihre App kompiliert. Verwenden Sie daher diese Einstellung im Abschnitt Android derselben
build.gradle-Datei:
aaptOptions{
noCompress "tflite"
}
Achten Sie darauf, dass sie nicht in einer anderen Einstellung enthalten ist. Es sollte direkt unter dem android-Tag verschachtelt sein. Beispiel:

4. TFLite-Modell hinzufügen
Im vorherigen Codelab haben Sie Ihr benutzerdefiniertes Modell erstellt und als „model.tflite“ heruntergeladen.
Suchen Sie in Ihrem Projekt nach dem Ordner assets, der derzeit flower1.jpg enthält. Kopieren Sie das Modell so in diesen Ordner:
- Klicken Sie in Android Studio mit der rechten Maustaste auf den Ordner Assets. Wählen Sie im Menü, das sich öffnet, Im Finder anzeigen aus. („Im Explorer anzeigen“ unter Windows und „In Dateien anzeigen“ unter Linux)

- Sie werden zum Verzeichnis im Dateisystem weitergeleitet. Kopieren Sie die Datei
model.tflitein dieses Verzeichnis, nebenflower1.jpg..

In Android Studio werden nun beide Dateien in Ihrem Assets-Ordner angezeigt:

Jetzt können Sie Ihren Code aktualisieren.
5. Code für das benutzerdefinierte Modell aktualisieren
Als Erstes müssen Sie Code hinzufügen, um das benutzerdefinierte Modell zu laden.
- Fügen Sie in der Datei
MainActivityder DateionCreateFolgendes hinzu, direkt unter der ZeilesetContentView(R.layout.activity_main).
Dabei wird ein LocalModel verwendet, um das Modell aus dem Asset „model.tflite“ zu erstellen. Wenn Android Studio eine Fehlermeldung ausgibt und „LocalModel“ rot markiert, drücken Sie ALT + Eingabetaste, um die Bibliothek zu importieren. Dadurch sollte ein Import für com.google.mlkit.common.model.LocalModel hinzugefügt werden.
val localModel = LocalModel.Builder()
.setAssetFilePath("model.tflite")
.build()
Bisher haben Sie in Ihrem btn.setOnClickListener-Handler das Standardmodell verwendet. Sie wurde mit diesem Code eingerichtet:
val labeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
Sie ersetzen diesen Code, um das benutzerdefinierte Modell zu verwenden.
- Benutzerdefiniertes Optionenobjekt einrichten:
val options = CustomImageLabelerOptions.Builder(localModel)
.setConfidenceThreshold(0.7f)
.setMaxResultCount(5)
.build()
Dadurch werden die Standardoptionen durch einen benutzerdefinierten Satz ersetzt. Mit dem Konfidenzgrenzwert wird eine Mindestanforderung für die Qualität der zurückzugebenden Vorhersagen festgelegt. Wenn Sie sich das Beispiel oben in diesem Codelab ansehen, in dem das Bild ein Gänseblümchen war, sehen Sie vier Vorhersagen mit jeweils einem Wert daneben, z. B. „Himmel“ mit dem Wert 0, 7632.
Mit einem hohen Konfidenzgrenzwert können Sie Ergebnisse von geringerer Qualität herausfiltern. Wenn Sie diesen Wert beispielsweise auf 0,9 festlegen, werden keine Labels mit einer niedrigeren Priorität zurückgegeben. setMaxResultCount() ist in Modellen mit vielen Klassen nützlich. Da dieses Modell jedoch nur fünf Klassen hat, lassen Sie es einfach bei fünf.
Nachdem Sie nun Optionen für den Labeler haben, können Sie die Instanziierung des Labelers ändern:
val labeler = ImageLabeling.getClient(options)
Der Rest Ihres Codes wird ohne Änderungen ausgeführt. Probieren Sie es aus!

Hier sehen Sie, dass diese Blume jetzt mit einer Wahrscheinlichkeit von 0,959 als Gänseblümchen identifiziert wurde.
Angenommen, Sie haben ein zweites Blumenbild hinzugefügt und den Vorgang wiederholt:

Sie wird als Rose identifiziert.
Sie fragen sich vielleicht, warum dort Rosen statt nur „Rose“ steht. Das liegt daran, dass die Labels im Datensatz durch die Ordnernamen angegeben werden und diese Ordnernamen leider etwas inkonsistent sind. Manchmal wird der Singular (z. B. „daisy“) und manchmal der Plural (z. B. „roses“) verwendet. Das Modell versucht nicht, die Elemente im Bild zu zählen. Es ist viel einfacher und kann nur die Blumentypen identifizieren.
6. iOS-Start-App herunterladen
- Zuerst benötigen Sie die App aus dem ersten Codelab. Wenn Sie das Lab durchlaufen haben, heißt es „ImageClassifierStep1“. Wenn Sie das Lab nicht durchlaufen möchten, können Sie die fertige Version aus dem Repository klonen. Die Pods und die Datei „.xcworkspace“ sind nicht im Repository vorhanden. Führen Sie daher vor dem nächsten Schritt „pod install“ im selben Verzeichnis wie die Datei „.xcproject“ aus.
- Öffnen Sie
ImageClassifierStep1.xcworkspacein Xcode. Verwenden Sie die Datei „.xcworkspace“ und nicht „.xcproject“, da Sie ML Kit mit Pods gebündelt haben und der Arbeitsbereich diese lädt.
Für den Rest dieses Labs führe ich die App im iPhone-Simulator aus, der die Build-Ziele aus dem Codelab unterstützen sollte. Wenn Sie Ihr eigenes Gerät verwenden möchten, müssen Sie möglicherweise das Build-Ziel in Ihren Projekteinstellungen an Ihre iOS-Version anpassen.
Wenn Sie das Skript ausführen, sehen Sie etwa Folgendes:

Beachten Sie die sehr allgemeinen Klassifizierungen: Blütenblatt, Blume, Himmel. Das Modell, das Sie im vorherigen Codelab erstellt haben, wurde darauf trainiert, fünf verschiedene Blumensorten zu erkennen, darunter auch dieses Gänseblümchen.
Im weiteren Verlauf dieses Codelabs sehen Sie, was für die Aktualisierung Ihrer App mit dem benutzerdefinierten Modell erforderlich ist.
7. Benutzerdefinierte ML Kit Image Labeler-Pods verwenden
In der ersten App wurde eine Pod-Datei verwendet, um die ML Kit Image Labeler-Basisbibliotheken und das Modell abzurufen. Sie müssen das aktualisieren, um die Bibliotheken für benutzerdefinierte Bildlabeling zu verwenden.
- Suchen Sie in Ihrem Projektverzeichnis nach der Datei mit dem Namen
podfile. Öffnen Sie die Datei. Sie sollte etwa so aussehen:
platform :ios, '10.0'
target 'ImageClassifierStep1' do
pod 'GoogleMLKit/ImageLabeling'
end
- Ändern Sie die Pod-Deklaration von
ImageLabelinginImageLabelingCustom:
platform :ios, '10.0'
target 'ImageClassifierStep1' do
pod 'GoogleMLKit/ImageLabelingCustom'
end
- Wenn Sie fertig sind, wechseln Sie im Terminal zum Verzeichnis mit der Podfile-Datei (und der .xcworkspace-Datei) und führen Sie
pod installaus.

Nach einigen Augenblicken werden die MLKitImageLabeling-Bibliotheken entfernt und die benutzerdefinierten Bibliotheken hinzugefügt. Sie können jetzt Ihre .xcworkspace-Datei öffnen, um den Code zu bearbeiten.
8. TFLite-Modell zu Xcode hinzufügen
Im vorherigen Codelab haben Sie ein benutzerdefiniertes Modell erstellt und als „model.tflite“ heruntergeladen. Wenn Sie diese nicht zur Hand haben, kehren Sie zurück und führen Sie das Codelab aus oder sehen Sie sich den Colab-Code hier an. Wenn Sie keinen Zugriff auf Google Colab haben, ist das Notebook über diesen Link verfügbar.
- Ziehen Sie bei geöffnetem Arbeitsbereich in Xcode die Datei „model.tflite“ in Ihr Projekt. Sie sollte sich im selben Ordner wie die anderen Dateien befinden, z. B.
ViewController.swiftoderMain.storyboard. - Ein Dialogfeld mit Optionen zum Hinzufügen der Datei wird eingeblendet. Achten Sie darauf, dass Zu Zielen hinzufügen ausgewählt ist. Andernfalls wird das Modell nicht mit der App gebündelt, wenn es auf einem Gerät bereitgestellt wird.
Der Eintrag „Zu Zielen hinzufügen“ enthält „ImageClassifierStep1“, wenn Sie damit begonnen haben und dieses Lab Schritt für Schritt durchlaufen, oder „ImageClassifierStep2“ (wie gezeigt), wenn Sie direkt zum fertigen Code gesprungen sind.

So können Sie das Modell laden. Wie das geht, erfahren Sie im nächsten Schritt.
9. Code für das benutzerdefinierte Modell aktualisieren
- Öffnen Sie Ihre
ViewController.swift-Datei. Möglicherweise wird oben in der Datei ein Fehler bei „import MLKitImageLabeling“ angezeigt. Das liegt daran, dass Sie beim Aktualisieren Ihrer Pod-Datei die Bibliotheken für die allgemeine Bildkennzeichnung entfernt haben. Sie können diese Zeile löschen und durch Folgendes ersetzen:
import MLKitVision
import MLKit
import MLKitImageLabelingCommon
import MLKitImageLabelingCustom
Es kann leicht passieren, dass Sie diese schnell durchlesen und denken, dass sie denselben Code wiederholen. Aber es heißt „Common“ und „Custom“ am Ende!
- Als Nächstes laden Sie das benutzerdefinierte Modell, das Sie im vorherigen Schritt hinzugefügt haben. Suchen Sie die Funktion
getLabels(). Fügen Sie unter der ZeilevisionImage.orientation = image.imageOrientationdie folgenden Zeilen hinzu:
// Add this code to use a custom model
let localModelFilePath = Bundle.main.path(forResource: "model", ofType: "tflite")
let localModel = LocalModel(path: localModelFilePath!)
- Hier finden Sie den Code zum Festlegen der Optionen für den generischen ImageLabeler. Wahrscheinlich wird ein Fehler angezeigt, da diese Bibliotheken entfernt wurden:
let options = ImageLabelerOptions()
Ersetzen Sie sie durch diesen Code, um ein CustomImageLabelerOptions zu verwenden, das das lokale Modell angibt:
let options = CustomImageLabelerOptions(localModel: localModel)
Das war's auch schon. Führen Sie Ihre App jetzt aus. Wenn Sie versuchen, das Bild zu klassifizieren, sollte das Ergebnis genauer sein und Ihnen mit hoher Wahrscheinlichkeit sagen, dass es sich um ein Gänseblümchen handelt.

Angenommen, Sie haben ein zweites Blumenbild hinzugefügt und den Vorgang wiederholt:

Die App hat erfolgreich erkannt, dass dieses Bild dem Label „Rosen“ entspricht.
10. Glückwunsch!
Sie haben jetzt eine App, die ein generisches Modell zur Erkennung des Inhalts eines Bildes verwendet, in ein eigenes ML-Modell zur Erkennung bestimmter Dinge wie Blumen umgewandelt und Ihre App dann so aktualisiert, dass sie Ihr benutzerdefiniertes Modell verwendet.
Die resultierende App ist natürlich sehr eingeschränkt, da sie auf gebündelten Bild-Assets basiert. Der ML-Teil funktioniert jedoch gut. Sie könnten beispielsweise AndroidX Camera verwenden, um Bilder aus einem Livestream aufzunehmen und zu klassifizieren, um zu sehen, welche Blumen Ihr Smartphone erkennt.
Von hier aus sind die Möglichkeiten endlos. Wenn Sie eigene Daten für etwas anderes als Blumen haben, haben Sie die Grundlagen für die Entwicklung einer App, die diese mithilfe von Computer Vision erkennt. Das sind nur die ersten Schritte in einer viel größeren Welt. Wir hoffen, dass Sie Spaß daran hatten, sie durchzuarbeiten.