Umfang
In dieser Anleitung werden Sie ein exportiertes benutzerdefiniertes Core ML-Modell herunterladen (.mlmodel
). Anschließend führen Sie eine vorab entwickelte iOS-App aus, die anhand des Modells Bilder von Blumen identifiziert.
Ziele
In dieser umfassenden Schritt-für-Schritt-Anleitung für den Einstieg verwenden Sie Code für die folgende Aufgabe:
- Vortrainiertes Core ML-Modell in einer iOS-App ausführen.
Übersicht
Mit dem Framework Core ML können Sie ein trainiertes Modell für maschinelles Lernen verwenden, um Eingabedaten zu klassifizieren. Das Vision-Framework arbeitet mit Core ML, um Klassifikationsmodelle auf Bilder anzuwenden und diese Bilder vorzuverarbeiten. Das Ziel ist dabei, dass das ML seine Aufgaben einfacher und zuverlässiger ausführen kann.
Hinweis
Allgemeines Edge-Modell herunterladen
Laden Sie einen Ordner herunter, der ein vortrainiertes Core ML-Modell enthält. Sie werden dieses Modell in dieser Anleitung verwenden.
Entpacken Sie die heruntergeladene ZIP-Datei.
Bevor Sie mit der Anleitung beginnen, wechseln Sie zum Stammverzeichnis des Projekts:
cd ClassifyingImagesWithVisionAndCoreML
Aus diesem Verzeichnis führen Sie alle folgenden Codebeispiele aus.
Benutzerdefiniertes Edge-Modell trainieren und exportieren
Bevor Sie fortfahren, schließen Sie die Kurzanleitung für Edge-Gerätemodelle mit den folgenden Änderungen ab:
- Verwenden Sie das bereitgestellte Blumen-Dataset oder Ihr eigenes Dataset.
- Wählen Sie im Schritt Modell trainieren die Option Edge-Modellradiooption aus.
- Folgen Sie im Schritt Modell exportieren der Anleitung zum Exportieren eines Core ML-Modells.
Sie verwenden die resultierende Core ML-Blumendatei model.mlmodel
, um eine angepasste Version der bestehenden iOS-App auszuführen.
iOS-App einrichten
Für die Demo-iOS-App sind mehrere zusätzliche Tools erforderlich:
- Xcode
- Xcode-Befehlszeilentools
Xcode herunterladen
Verwenden Sie diesen Link, um Xcode auf Ihrem Computer herunterzuladen.
Xcode-Befehlszeilentools installieren
Installieren Sie die Xcode-Befehlszeilentools mit dem folgenden Befehl in der Befehlszeile:
xcode-select --install
Projekt öffnen
Öffnen Sie das Projekt mit Xcode. Sie können das Projekt über die Befehlszeile oder die Google Cloud Platform Console öffnen. Führen Sie den folgenden Befehl aus, um das Projekt über die Befehlszeile zu öffnen:
open ./Vision+ML\ Example.xcodeproj
Ursprüngliche App ausführen
Führen Sie die folgenden Schritte aus, um die App im Simulator zu starten und Bildanmerkungen zu erhalten:
- Klicken Sie in der linken oberen Ecke des Xcode-Fensters auf die Schaltfläche Play , um die App zu starten.
- Stellen Sie der App ein Vorhersagebild bereit. Hierfür haben Sie zwei Möglichkeiten:
- Machen Sie ein Bild mit der Kamera des Geräts oder
- fügen Sie Fotos zur Fotogalerie des Geräts hinzu. Dazu ziehen Sie die Fotos per Drag-and-drop in das Simulator-Fenster.
In der App werden die beiden wichtigsten Klassifizierungskategorien in der Reihenfolge des Konfidenzwerts angezeigt, der vom Modell jeweils zugewiesen wird.
Das Ergebnis sollte Anmerkungen wie auf den folgenden Bildern enthalten:
Angepasste App ausführen
Die ursprüngliche App verwendet ein Core ML-Modell, mit dem Bilder in eine der 1.000 generischen ImageNet-Klassen eingeteilt werden (Tier, Obst, Möbel, Pflanze usw.).
Ändern Sie die App so, dass sie das neu trainierte Modell mit den folgenden benutzerdefinierten Bildkategorien für Blumen verwendet:
- Gänseblümchen
- Löwenzahn
- Rosen
- Sonnenblumen
- Tulpen
Modelldateien zum Projekt hinzufügen
Laden Sie Ihr benutzerdefiniertes Blumenmodell herunter (exportierte Core ML-Datei
model.mlmodel
), das Sie nach Abschluss der Kurzanleitung für Edge-Gerätemodelle erhalten. Die Dateienmodel.mlmodel
unddict.txt
aus dem Core ML-Modellexport befinden sich an dem von Ihnen angegebenen Google Cloud Storage-Speicherort.Benennen Sie Ihr benutzerdefiniertes Modell in
AutoML.mlmodel
um.Löschen Sie das vorhandene Modell aus dem Projekt (
MobileNet.mlmodel
).Fügen Sie das benutzerdefinierte Modell dem Projekt im Ordner
Vision+ML Example
hinzu.Ändern Sie Zeile 30 in
ImageClassificationViewController
. Entfernen Sie folgende Zeile:let model = try VNCoreMLModel(for: MobileNet().model)
Ersetzen Sie diese Zeile durch:
let model = try VNCoreMLModel(for: AutoML().model)
Benutzerdefinierte Modell-App ausführen
Wählen Sie für einen Neustart der App im Simulator links oben im Xcode-Fenster die Schaltfläche Play aus.
Fügen Sie zum Testen der Änderungen die Bilddateien aus dem Verzeichnis flower_photos/
hinzu und rufen Sie Vorhersagen ab.
Die Ergebnisse sollten in etwa so aussehen:
Fügen Sie zum Testen des Modells die zuvor heruntergeladenen Trainingsdatenbilder hinzu oder laden Sie Bilder aus einer Google-Suche herunter, um Vorhersagen zu treffen.
Funktionsweise
Nachdem Sie die App ausgeführt haben, können Sie sich den spezifischen Code von Core ML und Vision Framework ansehen.
Vision mit einem Core ML-Modell einrichten
Core ML generiert automatisch eine Swift-Klasse, die einfachen Zugriff auf Ihr ML-Modell ermöglicht.
In diesem Beispiel generiert Core ML automatisch die MobileNet-Klasse aus dem MobileNetmodel
.
Rufen Sie die Modellinstanz mit dem folgenden Code ab:
let model = try VNCoreMLModel(for: MobileNet().model)
Erstellen Sie die Vision-Anfrage mit dem obigen Modell und dem Abschluss-Handler. Der Abschluss-Handler verarbeitet die Vorhersageantwort des Modells.
Die Google Cloud Platform Console sollte im Hauptthread aktualisiert werden:
let request = VNCoreMLRequest(model: model, completionHandler: { [weak self] request, error in DispatchQueue.main.async { guard let results = request.results else { self.classificationLabel.text = "Unable to classify image.\n\(error!.localizedDescription)" return }
results
ist immer in VNClassificationObservation
, wie durch das Core ML-Modell in diesem Projekt festgelegt.
let classifications = results as! [VNClassificationObservation] })
Der Abschluss-Handler der Vision-Anfrage gibt an, ob die Anfrage erfolgreich war oder zu einem Fehler geführt hat. Wenn sie erfolgreich war, enthält das results-Attribut VNClassificationObservation
-Objekte, die mögliche durch das ML-Modell identifizierte Klassifizierungen beschreiben.
Ein ML-Modell verarbeitet Eingabebilder in einem festen Seitenverhältnis. Eingabebilder können jedoch ein beliebiges Seitenverhältnis haben, weshalb das Bild von Vision skaliert oder zugeschnitten werden muss. Die besten Ergebnisse erzielen Sie, wenn Sie das Attribut
imageCropAndScaleOption
der Anfrage an das Bildlayout anpassen, mit dem das Modell trainiert wurde.request.imageCropAndScaleOption = .centerCrop
Erstellen Sie mithilfe des folgenden Codes den
VisionRequestHandler
mit dem Eingabebild:let handler = VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
Rufen Sie die perform-Funktion des Handlers auf, indem Sie das Anfrageobjekt übergeben.
do { try handler.perform([self.classificationRequest]) } catch {
Mit diesem Handler werden allgemeine Bildverarbeitungsfehler abgefangen. Mit dem Abschluss-Handler
classificationRequest
derprocessClassifications(_:error:)
werden Fehler abgefangen, die für die Verarbeitung dieser Anfrage spezifisch sind.print("Failed to perform classification.\n\(error.localizedDescription)") }
Weitere Informationen
Sie haben nun die Anleitung für eine iOS-App zur Klassifizierung von Blumen mit einem aus AutoML Vision Edge exportierten Core ML-Modell durchgearbeitet. Sie haben mithilfe eines trainiertes Core ML-Modells eine allgemeine App zur Bildklassifizierung getestet, bevor Sie daran Änderungen vorgenommen und benutzerdefinierte Beispielannotationen von Blumen erhalten haben. Anschließend haben Sie Core ML-spezifischen Code untersucht, um die zugrunde liegenden Funktionen zu verstehen.
Die folgenden Ressourcen helfen Ihnen, sich weiter mit Core ML-Modellen und AutoML Vision Edge vertraut zu machen:
- Weitere Informationen zu Core ML erhalten Sie in der offiziellen Dokumentation und im Code-Repository.
- Testen Sie die Kameraversion dieser Demo-App, die eine quantisierte Version des Modells verwendet. Dies bietet die gleiche Leistung in einem kleineren, effizienteren Paket.
- Testen Sie andere TFLite-fähige Modelle, einschließlich einer Hot-Word-Erkennung für die Sprachausgabe und einer Version für intelligente Antworten auf dem Gerät.