1. Wprowadzenie
ML Kit to mobilny pakiet SDK, który udostępnia w prosty sposób zaawansowane funkcje uczenia maszynowego Google w aplikacjach na Androida i iOS. Niezależnie od tego, czy dopiero zaczynasz, czy masz już doświadczenie w uczeniu maszynowym, możesz łatwo wdrożyć potrzebne funkcje za pomocą kilku linii kodu. Aby zacząć, nie musisz mieć zaawansowanej wiedzy o sieciach neuronowych ani optymalizacji modeli.
Jak to działa?
ML Kit ułatwia stosowanie w aplikacjach technik uczenia maszynowego, ponieważ łączy w jednym pakiecie SDK technologie uczenia maszynowego Google, takie jak Mobile Vision i TensorFlow Lite. Niezależnie od tego, czy potrzebujesz mocy obliczeniowej modeli na urządzeniu Mobile Vision w czasie rzeczywistym, czy elastyczności niestandardowych modeli klasyfikacji obrazów TensorFlow Lite, ML Kit umożliwia to za pomocą zaledwie kilku wierszy kodu.
Te ćwiczenia z programowania przeprowadzą Cię przez proces tworzenia własnej aplikacji na iOS, która może automatycznie wykrywać tekst i cechy twarzy na obrazie.
Co utworzysz
W tym ćwiczeniu utworzysz aplikację na iOS z ML Kit. Twoja aplikacja będzie:
|
|
Czego się nauczysz
- Jak używać pakietu SDK ML Kit, aby łatwo dodawać zaawansowane funkcje uczenia maszynowego, takie jak rozpoznawanie tekstu czy wykrywanie cech twarzy, do dowolnej aplikacji na iOS
Czego potrzebujesz
- najnowsza wersja Xcode (12.4 lub nowsza),
- Symulator iOS lub fizyczne urządzenie z systemem iOS 10.0 lub nowszym
- ML Kit obsługuje tylko te 2 architektury 64-bitowe:
x86_64iarm64. - Przykładowy kod
- Podstawowa wiedza na temat tworzenia aplikacji na iOS w języku Swift
- Podstawowa wiedza o modelach uczenia maszynowego
Ten moduł Codelab dotyczy ML Kit. Nieistotne koncepcje i bloki kodu zostały pominięte. Można je po prostu skopiować i wkleić.
2. Przygotowania
Pobieranie kodu
Kliknij ten link, aby pobrać cały kod do tych ćwiczeń:
Rozpakuj pobrany plik ZIP. Spowoduje to utworzenie folderu głównego (mlkit-ios-codelab) ze wszystkimi potrzebnymi zasobami. W tym ćwiczeniu potrzebne będą tylko zasoby z podkatalogu vision.
Podkatalog vision w repozytorium mlkit-ios-codelab zawiera 2 katalogi:
starter – kod początkowy, na którym będziesz pracować w tym ćwiczeniu z programowania.
final – ukończony kod gotowej aplikacji przykładowej.
Dodaj zależności ML Kit za pomocą CocoaPods
CocoaPods służy do dodawania zależności ML Kit do aplikacji. Jeśli nie masz zainstalowanego CocoaPods na swoim komputerze, instrukcje instalacji znajdziesz tutaj. Po zainstalowaniu otwórz plik Podfile w ulubionym edytorze i dodaj ML Kit jako zależności:
Podfile
platform :ios, '10.0'
use_frameworks!
pod 'GoogleMLKit/FaceDetection'
pod 'GoogleMLKit/TextRecognition'
target 'MLKit-codelab' do
end
Instalowanie pakietów Cocoa Pods ML Kit
Aby mieć pewność, że wszystkie zależności są dostępne dla aplikacji, zainstaluj pakiety Cocoa Pods ML Kit za pomocą wiersza poleceń.
Wiersz poleceń
# Make sure you are in the root of your app
pod install
xed .
3. Uruchamianie aplikacji startowej
Możesz teraz uruchomić aplikację po raz pierwszy. W Xcode kliknij
Run (Uruchom), aby skompilować aplikację i uruchomić ją w symulatorze iOS.
Aplikacja powinna uruchomić się w symulatorze. W tym momencie powinien być widoczny podstawowy układ z selektorem, który umożliwia wybór między 2 obrazami. W następnej sekcji dodasz do aplikacji rozpoznawanie tekstu, aby identyfikować tekst na obrazach.
4. Dodawanie rozpoznawania tekstu na urządzeniu
W tym kroku dodamy do aplikacji funkcję rozpoznawania tekstu na obrazach.
Importowanie modułu MLVision
Sprawdź, czy w klasie ViewController istnieją te importy.
ViewController.swift
import MLKit
Tworzenie obiektu VisionTextRecognizer
Dodaj do klasy ViewController te właściwości leniwe:
ViewController.swift
private lazy var textRecognizer = TextRecognizer.textRecognizer()
Konfigurowanie i uruchamianie rozpoznawania tekstu na obrazie na urządzeniu
Dodaj do metody runTextRecognition klasy ViewController te wiersze:
ViewController.swift
func runTextRecognition(with image: UIImage) {
let visionImage = VisionImage(image: image)
textRecognizer.process(visionImage) { features, error in
self.processResult(from: features, error: error)
}
}
Powyższy kod konfiguruje detektor rozpoznawania tekstu i wywołuje funkcję processResult(from:, error:) z odpowiedzią.
Przetwarzanie odpowiedzi rozpoznawania tekstu
Dodaj ten kod do elementu processResult w klasie ViewController, aby przeanalizować wyniki i wyświetlić je w aplikacji.
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)
}
}
}
}
Uruchamianie aplikacji w symulatorze
Teraz w Xcode kliknij
Uruchom. Po wczytaniu aplikacji upewnij się, że w selektorze jest wybrany symbol Image 1, i kliknij przycisk Find Text.
Aplikacja powinna teraz wyglądać jak na obrazie poniżej, wyświetlając wyniki rozpoznawania tekstu i ramki ograniczające nałożone na oryginalny obraz.

Zdjęcie: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0
Gratulacje! Właśnie udało Ci się dodać do aplikacji rozpoznawanie tekstu na urządzeniu za pomocą ML Kit. Rozpoznawanie tekstu na urządzeniu sprawdza się w wielu zastosowaniach, ponieważ działa nawet wtedy, gdy aplikacja nie ma połączenia z internetem, i jest wystarczająco szybkie, aby można było go używać zarówno w przypadku zdjęć, jak i klatek wideo na żywo.
5. Dodawanie wykrywania konturów twarzy na urządzeniu
W tym kroku dodamy do aplikacji funkcję wykrywania konturów twarzy na zdjęciach.
Tworzenie obiektu FaceDetector
Dodaj do klasy ViewController te właściwości leniwe:
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)
Konfigurowanie i uruchamianie na obrazie wykrywania konturów twarzy na urządzeniu
Dodaj do metody runFaceContourDetection klasy ViewController te wiersze:
ViewController.swift
func runFaceContourDetection(with image: UIImage) {
let visionImage = VisionImage(image: image)
faceDetector.process(visionImage) { features, error in
self.processResult(from: features, error: error)
}
}
Powyższy kod konfiguruje detektor rozpoznawania tekstu i wywołuje funkcję processResult(from:, error:) z odpowiedzią.
Przetwarzanie odpowiedzi detektora twarzy
Dodaj ten kod do elementu processResult w klasie ViewController, aby przeanalizować wyniki i wyświetlić je w aplikacji.
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)
}
}
Na koniec dodaj do klasy ViewController metodę pomocniczą addContours, aby narysować punkty konturu.
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)
}
}
}
Uruchamianie aplikacji w symulatorze
Teraz w Xcode kliknij
Uruchom. Po wczytaniu aplikacji upewnij się, że w selektorze jest wybrany symbol Image 2, i kliknij przycisk Find Face Contour. Aplikacja powinna teraz wyglądać jak na ilustracji poniżej, pokazując kontury twarzy Grace Hopper jako punkty nałożone na oryginalny obraz.

Gratulacje! Właśnie dodano do aplikacji wykrywanie konturów twarzy na urządzeniu za pomocą pakietu ML Kit. Wykrywanie konturów twarzy na urządzeniu jest przydatne w wielu przypadkach użycia, ponieważ działa nawet wtedy, gdy aplikacja nie ma połączenia z internetem, i jest wystarczająco szybkie, aby można było go używać zarówno w przypadku zdjęć, jak i klatek wideo na żywo.
6. Gratulacje!
Dzięki ML Kit możesz łatwo dodawać do aplikacji zaawansowane funkcje uczenia maszynowego.
Omówione zagadnienia
- Jak dodać ML Kit do aplikacji na iOS
- Jak używać rozpoznawania tekstu na urządzeniu w ML Kit do znajdowania tekstu na obrazach
- Jak używać rozpoznawania twarzy na urządzeniu w ML Kit do identyfikowania cech twarzy na zdjęciach
Następne kroki
- Używaj ML Kit w swojej aplikacji na iOS.
Więcej informacji
- https://g.co/mlkit

