1. Introdução
O Kit de ML é um SDK para dispositivos móveis que leva a experiência em machine learning do Google para apps Android e iOS em um pacote eficiente e fácil de usar. Não importa se você é novo ou experiente em machine learning, é possível implementar a funcionalidade necessária com apenas algumas linhas de código. Não é preciso ter um conhecimento profundo de redes neurais ou otimização de modelos para começar.
Como funciona?
O Kit de ML facilita a aplicação de técnicas de ML nos seus apps ao reunir as tecnologias de ML do Google, como Mobile Vision e TensorFlow Lite, em um único SDK. Se você precisa do poder dos recursos em tempo real dos modelos no dispositivo do Mobile Vision ou da flexibilidade dos modelos personalizados de classificação de imagens do TensorFlow Lite, o Kit de ML possibilita tudo isso com apenas algumas linhas de código.
Este codelab mostra como criar seu próprio app iOS que pode detectar automaticamente texto e características faciais em uma imagem.
O que você criará
Neste codelab, você vai criar um app iOS com o Kit de ML. Esse app vai:
|
|
O que você aprenderá
- Como usar o SDK do Kit de ML para adicionar facilmente recursos avançados de machine learning, como reconhecimento de texto e detecção de características faciais, a qualquer app iOS
O que é necessário
- Uma versão recente do Xcode (v12.4 ou mais recente)
- Simulador do iOS ou um dispositivo iOS físico com iOS 10.0 ou mais recente
- O Kit de ML oferece suporte apenas a estas duas arquiteturas de 64 bits:
x86_64earm64 - Exemplo de código
- Conhecimento básico de desenvolvimento para iOS em Swift
- Entendimento básico de modelos de machine learning
Este codelab é focado no Kit de ML. Conceitos e blocos de códigos sem relevância não serão abordados. Eles são incluídos somente para você copiar e colar.
2. Etapas da configuração
Fazer o download do código
Clique no link abaixo para fazer o download de todo o código para este codelab:
Descompacte o arquivo ZIP transferido por download. Isso vai criar uma pasta raiz (mlkit-ios-codelab) com todos os recursos necessários. Para este codelab, você só vai precisar dos recursos no subdiretório vision.
O subdiretório vision no repositório mlkit-ios-codelab contém dois diretórios:
starter: código inicial que você vai criar neste codelab.
final: código completo do app de exemplo finalizado.
Adicionar as dependências do Kit de ML com o CocoaPods
O CocoaPods é usado para adicionar as dependências do Kit de ML ao seu app. Se você não tiver o CocoaPods instalado na sua máquina, encontre as instruções de instalação aqui. Depois de instalado, abra o Podfile no seu editor favorito e adicione o Kit de ML como dependências:
Podfile
platform :ios, '10.0'
use_frameworks!
pod 'GoogleMLKit/FaceDetection'
pod 'GoogleMLKit/TextRecognition'
target 'MLKit-codelab' do
end
Instalar os pods do Cocoa do Kit de ML
Para garantir que todas as dependências estejam disponíveis para seu app, use a linha de comando para instalar os pods do Cocoa do Kit de ML.
Linha de comando
# Make sure you are in the root of your app
pod install
xed .
3. Executar o app inicial
Agora você já pode executar o app pela primeira vez. Clique em
Executar no Xcode para compilar o app e executá-lo no simulador do iOS.
O app será iniciado no simulador. Nesse momento, você verá um layout básico com um seletor que permite escolher entre duas imagens. Na próxima seção, você vai adicionar o reconhecimento de texto ao seu app para identificar texto nas imagens.
4. Adicionar reconhecimento de texto no dispositivo
Nesta etapa, vamos adicionar funcionalidade ao seu app para reconhecer texto em imagens.
Importar o módulo MLVision
Confirme se as seguintes importações para a classe ViewController existem.
ViewController.swift
import MLKit
Criar um VisionTextRecognizer
Adicione as seguintes propriedades lentas à classe ViewController.
ViewController.swift
private lazy var textRecognizer = TextRecognizer.textRecognizer()
Configurar e executar o reconhecimento de texto no dispositivo em uma imagem
Adicione o seguinte ao método runTextRecognition da 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)
}
}
O código acima configura o detector de reconhecimento de texto e chama a função processResult(from:, error:) com a resposta.
Processar a resposta de reconhecimento de texto
Adicione o seguinte código a processResult na classe ViewController para analisar os resultados e mostrá-los no seu 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)
}
}
}
}
Executar o app no simulador
Agora clique em
Executar no Xcode. Depois que o app for carregado, verifique se Image 1 está selecionada no seletor e clique no botão Find Text.
Seu app agora vai ficar parecido com a imagem abaixo, mostrando os resultados do reconhecimento de texto e as caixas delimitadoras sobrepostas à imagem original.

Foto: Kai Schreiber / Wikimedia Commons / CC BY-SA 2.0
Parabéns! Você acabou de adicionar o reconhecimento de texto no dispositivo ao seu app usando o Kit de ML. O reconhecimento de texto no dispositivo é ótimo para muitos casos de uso, porque funciona mesmo quando o app não tem conectividade com a Internet e é rápido o suficiente para ser usado em imagens estáticas e em frames de vídeo ao vivo.
5. Adicionar detecção de contorno facial no dispositivo
Nesta etapa, vamos adicionar funcionalidade ao seu app para detectar os contornos de rostos em imagens.
Criar um FaceDetector
Adicione as seguintes propriedades lentas à 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)
Configurar e executar a detecção de contorno facial no dispositivo em uma imagem
Adicione o seguinte ao método runFaceContourDetection da 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)
}
}
O código acima configura o detector de reconhecimento de texto e chama a função processResult(from:, error:) com a resposta.
Processar a resposta do detector facial
Adicione o seguinte código a processResult na classe ViewController para analisar os resultados e mostrá-los no seu 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)
}
}
Por fim, adicione o método auxiliar addContours na classe ViewController para desenhar os pontos de 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)
}
}
}
Executar o app no simulador
Agora clique em
Executar no Xcode. Depois que o app for carregado, verifique se Image 2 está selecionada no seletor e clique no botão Find Face Contour. Seu app agora vai ficar parecido com a imagem abaixo, mostrando os contornos do rosto de Grace Hopper como pontos sobrepostos à imagem original.

Parabéns! Você acabou de adicionar a detecção de contorno facial no dispositivo ao seu app usando o Kit de ML. A detecção de contorno facial no dispositivo é ótima para muitos casos de uso, porque funciona mesmo quando o app não tem conectividade com a Internet e é rápido o suficiente para ser usado em imagens estáticas e em frames de vídeo ao vivo.
6. Parabéns!
Você usou o Kit de ML para adicionar facilmente recursos avançados de machine learning ao seu app.
O que vimos
- Como adicionar o Kit de ML ao seu app iOS
- Como usar o reconhecimento de texto no dispositivo no Kit de ML para encontrar texto em imagens
- Como usar o reconhecimento facial no dispositivo no Kit de ML para identificar características faciais em imagens
Próximas etapas
- Usar o Kit de ML no seu próprio app iOS.
Saiba mais
- https://g.co/mlkit

