1. Введение
ML Kit — это мобильный SDK, который переносит опыт Google в области машинного обучения в приложения для Android и iOS в мощном, но простом в использовании пакете. Независимо от того, новичок вы или опытный специалист в области машинного обучения, вы можете легко реализовать необходимую функциональность всего несколькими строками кода. Для начала работы не требуется глубоких знаний нейронных сетей или оптимизации моделей.
Как это работает?
ML Kit упрощает применение методов машинного обучения в ваших приложениях, объединяя технологии машинного обучения Google, такие как Mobile Vision и TensorFlow Lite , в одном SDK. Независимо от того, нужны ли вам возможности обработки данных в реальном времени, предоставляемые моделями Mobile Vision, работающими на устройстве, или гибкость пользовательских моделей классификации изображений TensorFlow Lite, ML Kit позволяет реализовать это всего несколькими строками кода.
В этом практическом занятии вы научитесь создавать собственное iOS-приложение, способное автоматически распознавать текст и черты лица на изображении.
Что вы построите
В этом практическом занятии вы создадите iOS-приложение с помощью ML Kit . Ваше приложение будет:
|
|
Что вы узнаете
- Как использовать SDK ML Kit для простого добавления расширенных возможностей машинного обучения, таких как распознавание текста и определение черт лица, в любое приложение iOS.
Что вам понадобится
- Последняя версия Xcode (v12.4+)
- Симулятор iOS или физическое устройство iOS с операционной системой iOS 10.0 и выше.
- ML Kit поддерживает только две 64-битные архитектуры:
x86_64иarm64 - Пример кода
- Базовые знания разработки iOS на Swift.
- Базовое понимание моделей машинного обучения.
Данный практический урок посвящен ML Kit. Несущественные концепции и блоки кода опущены и предоставлены для простого копирования и вставки.
2. Настройка
Скачать код
Чтобы скачать весь код для этого практического занятия, перейдите по следующей ссылке:
Распакуйте загруженный zip-файл. Это создаст корневую папку ( mlkit-ios-codelab ) со всеми необходимыми ресурсами. Для этого практического занятия вам понадобятся только ресурсы из подкаталога vision .
Подкаталог vision в репозитории mlkit-ios-codelab содержит два каталога:
Стартовый код — это начальный код, на основе которого вы будете строить дальнейшую работу в этом практическом занятии.
Завершенный код — код готового демонстрационного приложения.
Добавьте зависимости для ML Kit с помощью CocoaPods.
CocoaPods используется для добавления зависимостей ML Kit в ваше приложение. Если у вас не установлен CocoaPods, инструкции по его установке можно найти здесь . После установки откройте Podfile в вашем любимом редакторе и добавьте ML Kit в качестве зависимостей:
Podfile
platform :ios, '10.0'
use_frameworks!
pod 'GoogleMLKit/FaceDetection'
pod 'GoogleMLKit/TextRecognition'
target 'MLKit-codelab' do
end
Установите капсулы ML Kit Cocoa Pods.
Чтобы убедиться в доступности всех зависимостей для вашего приложения, следует использовать командную строку для установки Cocoa Pods из ML Kit.
Командная строка
# Make sure you are in the root of your app
pod install
xed .
3. Запустите стартовое приложение.
Теперь вы готовы запустить приложение в первый раз. Нажмите
Запустите команду в Xcode, чтобы скомпилировать приложение и запустить его в симуляторе iOS.
Приложение должно запуститься на вашем симуляторе. На этом этапе вы увидите базовый интерфейс с панелью выбора, позволяющей выбрать одно из двух изображений. В следующем разделе вы добавляете в приложение функцию распознавания текста для идентификации текста на изображениях.
4. Добавить функцию распознавания текста на устройстве.
На этом этапе мы добавим в ваше приложение функцию распознавания текста на изображениях.
Импортируйте модуль MLVision.
Убедитесь, что следующие импорты в ваш класс ViewController существуют.
ViewController.swift
import MLKit
Создайте VisionTextRecognizer
Добавьте следующие ленивые свойства в класс ViewController .
ViewController.swift
private lazy var textRecognizer = TextRecognizer.textRecognizer()
Настройка и запуск функции распознавания текста на изображении непосредственно на устройстве.
Добавьте следующее в метод runTextRecognition класса 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)
}
}
Приведённый выше код настраивает детектор распознавания текста и вызывает функцию processResult(from:, error:) с полученным ответом.
Обработайте ответ на запрос распознавания текста.
Добавьте следующий код в processResult в классе ViewController , чтобы проанализировать результаты и отобразить их в вашем приложении.
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)
}
}
}
}
Запустите приложение на симуляторе.
Теперь нажмите
Запустите приложение в Xcode. После загрузки приложения убедитесь, что в окне выбора выбрано Image 1 , и нажмите кнопку Find Text .
Теперь ваше приложение должно выглядеть как на изображении ниже, показывая результаты распознавания текста и ограничивающие рамки, наложенные поверх исходного изображения.

Фото: Кай Шрайбер / Wikimedia Commons / CC BY-SA 2.0
Поздравляем, вы только что добавили в свое приложение функцию распознавания текста на устройстве с помощью ML Kit! Распознавание текста на устройстве отлично подходит для многих сценариев использования, поскольку оно работает даже при отсутствии подключения к интернету и достаточно быстро для обработки как статичных изображений, так и кадров видео в реальном времени.
5. Добавить функцию распознавания контуров лица непосредственно на устройстве.
На этом этапе мы добавим в ваше приложение функциональность для распознавания контуров лиц на изображениях.
Создать детектор лиц
Добавьте следующие ленивые свойства в класс 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)
Настройте и запустите на устройстве функцию распознавания контуров лица на изображении.
Добавьте следующее в метод runFaceContourDetection класса 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)
}
}
Приведённый выше код настраивает детектор распознавания текста и вызывает функцию processResult(from:, error:) с полученным ответом.
Обработайте ответ детектора лиц.
Добавьте следующий код в processResult в классе ViewController , чтобы проанализировать результаты и отобразить их в вашем приложении.
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)
}
}
Наконец, добавьте вспомогательный метод addContours в класс ViewController для отрисовки точек контура.
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)
}
}
}
Запустите приложение на симуляторе.
Теперь нажмите
Запустите приложение в Xcode. После загрузки приложения убедитесь, что в палитре выбрано Image 2 , и нажмите кнопку « Find Face Contour . Теперь ваше приложение должно выглядеть как на изображении ниже, показывая контуры лица Грейс Хоппер в виде точек, наложенных поверх исходного изображения.

Поздравляем, вы только что добавили в свое приложение функцию распознавания контуров лица на устройстве с помощью On-device ML Kit. Распознавание контуров лица отлично подходит для многих сценариев использования, поскольку работает даже при отсутствии подключения к интернету и достаточно быстро для обработки как статичных изображений, так и кадров видео в реальном времени.
6. Поздравляем!
Вы использовали ML Kit для простого добавления расширенных возможностей машинного обучения в ваше приложение.
Что мы рассмотрели
- Как добавить ML Kit в ваше iOS-приложение
- Как использовать встроенную функцию распознавания текста в ML Kit для поиска текста на изображениях
- Как использовать встроенную функцию распознавания лиц в ML Kit для идентификации черт лица на изображениях
Следующие шаги
- Используйте ML Kit в своем iOS-приложении.
Узнать больше
- https://g.co/mlkit

