CoreML para Swift: guia completo com exemplos práticos
1. O que é e para que serve
CoreML é um framework de machine learning desenvolvido pela Apple para integrar modelos de aprendizado de máquina diretamente em aplicativos iOS, macOS, watchOS e tvOS. Diferente de soluções em nuvem, o CoreML executa todos os cálculos no dispositivo do usuário, garantindo processamento instantâneo de dados sem atrasos de rede e total privacidade dos dados do usuário.
Para que serve o CoreML? Primeiro, permite que desenvolvedores implementem funções avançadas de IA (reconhecimento de imagens, processamento de linguagem natural, análise de áudio) sem precisar dominar os detalhes de redes neurais. Segundo, a execução no dispositivo significa que o app pode funcionar offline, algo crucial para muitos cenários de uso. Terceiro, a Apple otimizou o CoreML para trabalhar com Neural Engine, GPU e CPU, garantindo máxima performance em todos os dispositivos Apple.
O CoreML suporta modelos criados em frameworks populares (TensorFlow, PyTorch, scikit-learn), que podem ser convertidos para o formato .mlmodel usando a ferramenta coremltools. O framework também se integra perfeitamente com Vision (para análise de imagens), Natural Language (para processamento de texto) e SoundAnalysis (para áudio).
2. Instalação
O CoreML é um framework nativo da Apple e não requer instalação via gerenciadores de pacotes. Para usá-lo, basta importá-lo no seu projeto. No entanto, para converter modelos de outros formatos, você precisará do pacote Python coremltools.
Instalação do coremltools (Python):
pip install coremltools
Importando CoreML no projeto Xcode:
import CoreML
Para trabalhar com imagens e vídeos, importe também o Vision:
import Vision
3. Início rápido — exemplo mínimo funcional
Vamos criar um app simples que classifica uma imagem usando o modelo pré-treinado MobileNetV2. Primeiro, baixe o modelo MobileNetV2.mlmodel do repositório da Apple ou converta-o usando coremltools.
Exemplo mínimo de classificação de imagem:
import CoreML
import Vision
import UIKit
// 1. Carregar o modelo
guard let model = try? VNCoreMLModel(for: MobileNetV2().model) else {
fatalError("Falha ao carregar o modelo")
}
// 2. Criar a requisição
let request = VNCoreMLRequest(model: model) { request, error in
guard let results = request.results as? [VNClassificationObservation],
let topResult = results.first else {
print("Não foi possível classificar a imagem")
return
}
print("Reconhecido: \(topResult.identifier) com confiança \(topResult.confidence)")
}
// 3. Carregar a imagem
guard let image = UIImage(named: "gato.jpg"),
let ciImage = CIImage(image: image) else {
fatalError("Falha ao carregar a imagem")
}
// 4. Executar a requisição
let handler = VNImageRequestHandler(ciImage: ciImage)
try? handler.perform([request])
4. Principais métodos/funções/classes
4.1. MLModel
Assinatura: class MLModel
O que faz: Classe principal que representa um modelo de machine learning carregado. Permite fazer previsões e obter informações sobre o modelo.
Exemplo:
// Carregar modelo de arquivo
guard let modelURL = Bundle.main.url(forResource: "MeuModelo", withExtension: "mlmodelc"),
let model = try? MLModel(contentsOf: modelURL) else {
fatalError("Falha ao carregar o modelo")
}
// Obter metadados do modelo
let description = model.modelDescription