Text- und Gesichtsfunktionen erkennen ML Kit: iOS

1. Einführung

ML Kit ist ein mobiles SDK, mit dem das Fachwissen von Google im Bereich maschinelles Lernen in einem leistungsstarken und dennoch nutzerfreundlichen Paket auf Android- und iOS-Apps übertragen wird. Ganz gleich, ob Sie noch keine Erfahrung mit maschinellem Lernen haben – die Funktionalität, die Sie benötigen, lässt sich mit nur wenigen Codezeilen implementieren. Sie brauchen kein tiefes Wissen über neuronale Netzwerke oder Modelloptimierung, um loszulegen.

Wie funktioniert das?

ML Kit erleichtert die Anwendung von ML-Techniken in Ihren Apps, indem es die ML-Technologien von Google wie Mobile Vision und TensorFlow Lite in einem einzigen SDK vereint. Ganz gleich, ob Sie die Echtzeitfunktionen der On-Device-Modelle von Mobile Vision oder die Flexibilität benutzerdefinierter TensorFlow Lite-Bildklassifizierungsmodelle benötigen – ML Kit ermöglicht es Ihnen mit nur wenigen Codezeilen.

In diesem Codelab erfahren Sie, wie Sie Ihre eigene iOS-App erstellen, mit der Text und Gesichtsmerkmale in einem Bild automatisch erkannt werden.

Überblick

In diesem Codelab erstellen Sie eine iOS-App mit ML Kit. Mit der Anwendung können Sie Folgendes tun:

  • Mit der ML Kit Text Recognition API Text in Bildern erkennen
  • Mit der ML Kit Face Detection API Gesichtsmerkmale in Bildern identifizieren

Bild von Grace Hopper, die die ML KIt Face Recognition API demonstriertBild eines Schilds auf einer Grasfläche, die eine Texterkennungs-API zeigt

Aufgaben in diesem Lab

  • Mit dem ML Kit SDK erweiterte Machine-Learning-Funktionen wie Text- und Gesichtserkennung in jede iOS-App einbinden

Voraussetzungen

  • Eine aktuelle Version von Xcode (ab Version 12.4)
  • iOS-Simulator oder ein physisches iOS-Gerät mit iOS 10.0 oder höher
  • ML Kit unterstützt nur diese beiden 64-Bit-Architekturen: x86_64 und arm64.
  • Beispielcode
  • Grundkenntnisse der iOS-Entwicklung in Swift
  • Grundlegendes Verständnis von Modellen für maschinelles Lernen

In diesem Codelab geht es um ML Kit. Auf irrelevante Konzepte wird nicht genauer eingegangen und entsprechende Codeblöcke können Sie einfach kopieren und einfügen.

2. Einrichtung

Code herunterladen

Klicken Sie auf den folgenden Link, um den gesamten Code für dieses Codelab herunterzuladen:

Entpacken Sie die heruntergeladene ZIP-Datei. Dadurch wird ein Stammordner (mlkit-ios-codelab) mit allen benötigten Ressourcen erstellt. Für dieses Codelab benötigen Sie nur die Ressourcen im Unterverzeichnis vision.

Das Unterverzeichnis vision im Repository mlkit-ios-codelab enthält zwei Verzeichnisse:

  • android_studio_folder.pngstarter: Code wird gestartet, auf dem Sie in diesem Codelab aufbauen.
  • android_studio_folder.pngfinal: Der Code für die fertige Beispiel-App wurde fertiggestellt.

Abhängigkeiten für ML Kit with CocoaPods hinzufügen

Mit CocoaPods werden Ihrer App die ML Kit-Abhängigkeiten hinzugefügt. Falls CocoaPods nicht auf Ihrem Computer installiert ist, finden Sie hier die Installationsanleitung. Öffnen Sie nach der Installation Podfile in Ihrem bevorzugten Editor und fügen Sie ML Kit als Abhängigkeiten hinzu:

Podfile

platform :ios, '10.0'
use_frameworks!

pod 'GoogleMLKit/FaceDetection'
pod 'GoogleMLKit/TextRecognition'

target 'MLKit-codelab' do
end

ML Kit Cocoa Pods installieren

Damit alle Abhängigkeiten für Ihre Anwendung verfügbar sind, sollten Sie die ML Kit-Cocoa-Pods über die Befehlszeile installieren.

Befehlszeile

# Make sure you are in the root of your app
pod install
xed .

3. Start-App ausführen

Jetzt können Sie die App zum ersten Mal ausführen. Klicken Sie in Xcode auf 98205811bbed9d74.pngAusführen, um die App zu kompilieren und im iOS-Simulator auszuführen.

Die App sollte in Ihrem Simulator gestartet werden. Sie sollten nun ein einfaches Layout mit einer Auswahl sehen, mit der Sie zwischen zwei Bildern auswählen können. Im nächsten Abschnitt fügen Sie Ihrer App Texterkennung hinzu, um Text in den Bildern zu erkennen.

4. Texterkennung auf dem Gerät hinzufügen

In diesem Schritt fügen wir Ihrer App Funktionen zur Erkennung von Text in Bildern hinzu.

MLVision-Modul importieren

Prüfen Sie, ob die folgenden Importe in Ihre ViewController-Klasse vorhanden sind.

ViewController.swift

import MLKit

VisionTextRecognitionr erstellen

Fügen Sie Ihrer ViewController-Klasse die folgenden verzögerten Attribute hinzu.

ViewController.swift

private lazy var textRecognizer = TextRecognizer.textRecognizer()

Texterkennung auf dem Gerät für ein Bild einrichten und ausführen

Fügen Sie der Methode runTextRecognition der Klasse ViewController Folgendes hinzu:

ViewController.swift

func runTextRecognition(with image: UIImage) {
  let visionImage = VisionImage(image: image)
  textRecognizer.process(visionImage) { features, error in
    self.processResult(from: features, error: error)
  }
}

Mit dem obigen Code wird der Texterkennungsdetektor konfiguriert und die Funktion processResult(from:, error:) mit der Antwort aufgerufen.

Texterkennungsantwort verarbeiten

Fügen Sie processResult in der Klasse ViewController den folgenden Code hinzu, um die Ergebnisse zu parsen und sie in Ihrer App anzuzeigen.

ViewController.swift

 func processResult(from text: Text?, error: Error?) {
    removeDetectionAnnotations()
    guard error == nil, let text = text else {
      let errorString = error?.localizedDescription ?? Constants.detectionNoResultsMessage
      print("Text recognizer failed with error: \(errorString)")
      return
    }

    let transform = self.transformMatrix()

    // Blocks.
    for block in text.blocks {
      drawFrame(block.frame, in: .purple, transform: transform)

      // Lines.
      for line in block.lines {
        drawFrame(line.frame, in: .orange, transform: transform)

        // Elements.
        for element in line.elements {
          drawFrame(element.frame, in: .green, transform: transform)

          let transformedRect = element.frame.applying(transform)
          let label = UILabel(frame: transformedRect)
          label.text = element.text
          label.adjustsFontSizeToFitWidth = true
          self.annotationOverlayView.addSubview(label)
        }
      }
    }
  }

App im Simulator ausführen

Klicken Sie jetzt in Xcode auf 98205811bbed9d74.pngAusführen. Wenn die App geladen wird, achten Sie darauf, dass Image 1 in der Auswahl ausgewählt ist, und klicken Sie auf die Schaltfläche Find Text.

Ihre App sollte jetzt wie auf dem Bild unten aussehen und die Ergebnisse der Texterkennung sowie Begrenzungsrahmen über dem Originalbild einblenden.

7269fd8fcb4dc793.png

Foto: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0

Herzlichen Glückwunsch, Sie haben Ihrer App gerade mit ML Kit die Texterkennung auf dem Gerät hinzugefügt. Die Texterkennung auf dem Gerät eignet sich für viele Anwendungsfälle hervorragend, da sie selbst dann funktioniert, wenn Ihre App keine Internetverbindung hat. Sie ist schnell genug, um Standbilder und Live-Videoframes zu verwenden.

5. Gesichtskonturerkennung auf dem Gerät hinzufügen

In diesem Schritt fügen wir Ihrer App Funktionen hinzu, mit denen Sie die Konturen von Gesichtern in Bildern erkennen können.

Gesichtserkennung erstellen

Fügen Sie Ihrer ViewController-Klasse die folgenden verzögerten Attribute hinzu.

ViewController.swift

private lazy var faceDetectorOption: FaceDetectorOptions = {
  let option = FaceDetectorOptions()
  option.contourMode = .all
  option.performanceMode = .fast
  return option
}()
private lazy var faceDetector = FaceDetector.faceDetector(options: faceDetectorOption)

Gesichtskonturerkennung auf dem Gerät für ein Bild einrichten und ausführen

Fügen Sie der Methode runFaceContourDetection der Klasse ViewController Folgendes hinzu:

ViewController.swift

  func runFaceContourDetection(with image: UIImage) {
    let visionImage = VisionImage(image: image)
    faceDetector.process(visionImage) { features, error in
      self.processResult(from: features, error: error)
    }
  }

Mit dem obigen Code wird der Texterkennungsdetektor konfiguriert und die Funktion processResult(from:, error:) mit der Antwort aufgerufen.

Gesichtserkennung verarbeiten

Fügen Sie processResult in der Klasse ViewController den folgenden Code hinzu, um die Ergebnisse zu parsen und in Ihrer App anzuzeigen.

ViewController.swift

  func processResult(from faces: [Face]?, error: Error?) {
    removeDetectionAnnotations()
    guard let faces = faces else {
      return
    }

    for feature in faces {
      let transform = self.transformMatrix()
      let transformedRect = feature.frame.applying(transform)
      UIUtilities.addRectangle(
        transformedRect,
        to: self.annotationOverlayView,
        color: UIColor.green
      )
      self.addContours(forFace: feature, transform: transform)
    }
  }

Fügen Sie abschließend die Hilfsmethode addContours in die Klasse ViewController ein, um die Konturpunkte zu zeichnen.

ViewController.swift

 private func addContours(forFace face: Face, transform: CGAffineTransform) {
    // Face
    if let faceContour = face.contour(ofType: .face) {
      for point in faceContour.points {
        drawPoint(point, in: .blue, transform: transform)
      }
    }

    // Eyebrows
    if let topLeftEyebrowContour = face.contour(ofType: .leftEyebrowTop) {
      for point in topLeftEyebrowContour.points {
        drawPoint(point, in: .orange, transform: transform)
      }
    }
    if let bottomLeftEyebrowContour = face.contour(ofType: .leftEyebrowBottom) {
      for point in bottomLeftEyebrowContour.points {
        drawPoint(point, in: .orange, transform: transform)
      }
    }
    if let topRightEyebrowContour = face.contour(ofType: .rightEyebrowTop) {
      for point in topRightEyebrowContour.points {
        drawPoint(point, in: .orange, transform: transform)
      }
    }
    if let bottomRightEyebrowContour = face.contour(ofType: .rightEyebrowBottom) {
      for point in bottomRightEyebrowContour.points {
        drawPoint(point, in: .orange, transform: transform)
      }
    }

    // Eyes
    if let leftEyeContour = face.contour(ofType: .leftEye) {
      for point in leftEyeContour.points {
        drawPoint(point, in: .cyan, transform: transform)
      }
    }
    if let rightEyeContour = face.contour(ofType: .rightEye) {
      for point in rightEyeContour.points {
        drawPoint(point, in: .cyan, transform: transform)
      }
    }

    // Lips
    if let topUpperLipContour = face.contour(ofType: .upperLipTop) {
      for point in topUpperLipContour.points {
        drawPoint(point, in: .red, transform: transform)
      }
    }
    if let bottomUpperLipContour = face.contour(ofType: .upperLipBottom) {
      for point in bottomUpperLipContour.points {
        drawPoint(point, in: .red, transform: transform)
      }
    }
    if let topLowerLipContour = face.contour(ofType: .lowerLipTop) {
      for point in topLowerLipContour.points {
        drawPoint(point, in: .red, transform: transform)
      }
    }
    if let bottomLowerLipContour = face.contour(ofType: .lowerLipBottom) {
      for point in bottomLowerLipContour.points {
        drawPoint(point, in: .red, transform: transform)
      }
    }

    // Nose
    if let noseBridgeContour = face.contour(ofType: .noseBridge) {
      for point in noseBridgeContour.points {
        drawPoint(point, in: .yellow, transform: transform)
      }
    }
    if let noseBottomContour = face.contour(ofType: .noseBottom) {
      for point in noseBottomContour.points {
        drawPoint(point, in: .yellow, transform: transform)
      }
    }
  }

App im Simulator ausführen

Klicken Sie jetzt in Xcode auf 98205811bbed9d74.pngAusführen. Wenn die App geladen wird, achten Sie darauf, dass Image 2 in der Auswahl ausgewählt ist, und klicken Sie auf die Schaltfläche Find Face Contour. Ihre App sollte jetzt wie im Bild unten aussehen und die Konturen des Gesichts von Grace Hopper als Punkte über dem Originalbild einblenden.

a5169b50dafbcb2f.png

Glückwunsch! Sie haben die Gesichtskonturerkennung auf dem Gerät mit dem On-Device-ML Kit zur Gesichtskonturerkennung auf dem Gerät hinzugefügt. Sie funktioniert auch dann, wenn Ihre App keine Internetverbindung hat, und ist schnell genug, um sie für Standbilder und Live-Videoframes zu verwenden.

6. Glückwunsch!

Sie haben ML Kit verwendet, um Ihrer App ganz einfach erweiterte ML-Funktionen hinzuzufügen.

Behandelte Themen

  • So fügen Sie Ihrer iOS-App ML Kit hinzu
  • Mit der Texterkennung auf dem Gerät in ML Kit Text in Bildern finden
  • In ML Kit die Gesichtserkennung auf dem Gerät verwenden, um Gesichtsmerkmale in Bildern zu erkennen

Nächste Schritte

  • Verwenden Sie ML Kit in Ihrer eigenen iOS-App.

Weitere Informationen

  • https://g.co/mlkit