1. Introduzione
ML Kit è un SDK per dispositivi mobili che porta l'esperienza di machine learning di Google nelle app Android e iOS in un pacchetto potente ma facile da usare. Che tu sia un principiante o un esperto di machine learning, puoi implementare facilmente la funzionalità di cui hai bisogno con poche righe di codice. Per iniziare, non è necessario avere una conoscenza approfondita delle reti neurali o dell'ottimizzazione dei modelli.
Come funziona?
ML Kit semplifica l'applicazione delle tecniche di ML nelle tue app riunendo le tecnologie di ML di Google, come Mobile Vision e TensorFlow Lite, in un unico SDK. Che tu abbia bisogno della potenza delle funzionalità in tempo reale dei modelli on-device di Mobile Vision o della flessibilità dei modelli personalizzati di classificazione delle immagini TensorFlow Lite, ML Kit lo rende possibile con poche righe di codice.
Questo codelab ti guiderà nella creazione della tua app per iOS in grado di rilevare automaticamente il testo e i tratti del viso in un'immagine.
Cosa creerai
In questo codelab, creerai un'app per iOS con ML Kit. La tua app sarà in grado di:
|
|
Cosa imparerai a fare
- Come utilizzare l'SDK ML Kit per aggiungere facilmente funzionalità avanzate di machine learning come il riconoscimento del testo e il rilevamento delle caratteristiche del volto a qualsiasi app per iOS
Che cosa ti serve
- Una versione recente di Xcode (v12.4+)
- Simulatore iOS o un dispositivo iOS fisico con iOS 10.0 o versioni successive
- ML Kit supporta solo queste due architetture a 64 bit:
x86_64earm64 - Il codice campione
- Conoscenza di base dello sviluppo per iOS in Swift
- Conoscenza di base dei modelli di machine learning
Questo codelab è incentrato su ML Kit. Concetti e blocchi di codice non pertinenti sono trattati solo superficialmente e sono forniti solo per operazioni di copia e incolla.
2. Preparazione
Scarica il codice
Fai clic sul seguente link per scaricare tutto il codice per questo codelab:
Decomprimi il file ZIP scaricato. Verrà creata una cartella principale (mlkit-ios-codelab) con tutte le risorse necessarie. Per questo codelab, ti serviranno solo le risorse nella sottodirectory vision.
La sottodirectory vision nel repository mlkit-ios-codelab contiene due directory:
starter: codice iniziale su cui si basa questo codelab.
final: codice completato per l'app di esempio finita.
Aggiungere le dipendenze per ML Kit con CocoaPods
CocoaPods viene utilizzato per aggiungere le dipendenze di ML Kit alla tua app. Se non hai installato CocoaPods sul tuo computer, consulta le istruzioni di installazione qui. Una volta installato, apri Podfile nel tuo editor preferito e aggiungi ML Kit come dipendenze:
Podfile
platform :ios, '10.0'
use_frameworks!
pod 'GoogleMLKit/FaceDetection'
pod 'GoogleMLKit/TextRecognition'
target 'MLKit-codelab' do
end
Installa i pod Cocoa di ML Kit
Per assicurarti che tutte le dipendenze siano disponibili per la tua app, devi utilizzare la riga di comando per installare i pod Cocoa di ML Kit.
Riga di comando
# Make sure you are in the root of your app
pod install
xed .
3. Esegui l'app di base
Ora puoi eseguire l'app per la prima volta. Fai clic su
Esegui in Xcode per compilare l'app ed eseguirla sul simulatore iOS.
L'app dovrebbe avviarsi sul simulatore. A questo punto, dovresti vedere un layout di base con un selettore che ti consente di scegliere tra due immagini. Nella sezione successiva, aggiungi il riconoscimento del testo alla tua app per identificare il testo nelle immagini.
4. Aggiungere il riconoscimento del testo sul dispositivo
In questo passaggio, aggiungeremo alla tua app la funzionalità di riconoscimento del testo nelle immagini.
Importare il modulo MLVision
Verifica che esistano i seguenti importazioni nel tuo corso ViewController.
ViewController.swift
import MLKit
Crea un VisionTextRecognizer
Aggiungi le seguenti proprietà lazy alla classe ViewController.
ViewController.swift
private lazy var textRecognizer = TextRecognizer.textRecognizer()
Configurare ed eseguire il riconoscimento del testo on-device su un'immagine
Aggiungi quanto segue al metodo runTextRecognition della classe ViewController:
ViewController.swift
func runTextRecognition(with image: UIImage) {
let visionImage = VisionImage(image: image)
textRecognizer.process(visionImage) { features, error in
self.processResult(from: features, error: error)
}
}
Il codice precedente configura il rilevatore di riconoscimento del testo e chiama la funzione processResult(from:, error:) con la risposta.
Elaborare la risposta del riconoscimento del testo
Aggiungi il seguente codice a processResult nella classe ViewController per analizzare i risultati e visualizzarli nella tua app.
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)
}
}
}
}
Esegui l'app sul simulatore
Ora fai clic su
Esegui in Xcode. Una volta caricata l'app, assicurati che Image 1 sia selezionato nel selettore e fai clic sul pulsante Find Text.
La tua app ora dovrebbe essere simile all'immagine qui sotto, che mostra i risultati del riconoscimento del testo e i rettangoli di selezione sovrapposti all'immagine originale.

Foto: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0
Congratulazioni, hai appena aggiunto il riconoscimento del testo sul dispositivo alla tua app utilizzando ML Kit. Il riconoscimento del testo sul dispositivo è ideale per molti casi d'uso, in quanto funziona anche quando l'app non ha connettività a internet ed è abbastanza veloce da essere utilizzato su immagini statiche e su frame video live.
5. Aggiungere il rilevamento del contorno del viso sul dispositivo
In questo passaggio, aggiungeremo alla tua app la funzionalità per rilevare i contorni dei volti nelle immagini.
Crea un FaceDetector
Aggiungi le seguenti proprietà lazy alla classe ViewController.
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)
Configurare ed eseguire il rilevamento del contorno del viso su un'immagine sul dispositivo
Aggiungi quanto segue al metodo runFaceContourDetection della classe ViewController:
ViewController.swift
func runFaceContourDetection(with image: UIImage) {
let visionImage = VisionImage(image: image)
faceDetector.process(visionImage) { features, error in
self.processResult(from: features, error: error)
}
}
Il codice precedente configura il rilevatore di riconoscimento del testo e chiama la funzione processResult(from:, error:) con la risposta.
Elaborare la risposta del rilevatore di volti
Aggiungi il seguente codice a processResult nella classe ViewController per analizzare i risultati e visualizzarli nella tua app.
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)
}
}
Infine, aggiungi il metodo helper addContours nella classe ViewController per disegnare i punti di contorno.
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)
}
}
}
Esegui l'app sul simulatore
Ora fai clic su
Esegui in Xcode. Una volta caricata l'app, assicurati che Image 2 sia selezionato nel selettore e fai clic sul pulsante Find Face Contour. Ora la tua app dovrebbe avere l'aspetto dell'immagine seguente, che mostra i contorni del volto di Grace Hopper come punti sovrapposti all'immagine originale.

Congratulazioni, hai appena aggiunto il rilevamento del contorno del volto on-device alla tua app utilizzando ML Kit. Il rilevamento del contorno del volto on-device è ideale per molti casi d'uso, in quanto funziona anche quando l'app non ha connettività a internet ed è abbastanza veloce da essere utilizzato su immagini statiche e su frame video live.
6. Complimenti!
Hai utilizzato ML Kit per aggiungere facilmente funzionalità di machine learning avanzate alla tua app.
Argomenti trattati
- Come aggiungere ML Kit alla tua app per iOS
- Come utilizzare il riconoscimento del testo su dispositivo in ML Kit per trovare il testo nelle immagini
- Come utilizzare il riconoscimento facciale on-device in ML Kit per identificare le caratteristiche del volto nelle immagini
Passaggi successivi
- Utilizza ML Kit nella tua app per iOS.
Scopri di più
- https://g.co/mlkit

