O que você criará
Neste tutorial, você fará o download de um modelo Core ML personalizado exportado (.mlmodel
). Em seguida, executará um app para iOS predefinido que usa o modelo para identificar imagens de flores.
Objetivos
Neste tutorial de apresentação completo, você usará o código para fazer o seguinte:
- Executar um modelo do Core ML pré-treinado em um app para iOS.
Visão geral
O framework Core ML (em inglês) possibilita usar um modelo de machine learning treinado para classificar dados de entrada. O framework Vision (em inglês) funciona com o Core ML para aplicar modelos de classificação a imagens e pré-processar essas imagens para tornar tarefas de machine learning mais fáceis e confiáveis.
Antes de começar
Faça o download de um modelo geral do Edge
Faça o download de uma pasta que contenha um modelo pré-configurado do Core ML. Você usará esse modelo neste tutorial.
Descompacte o arquivo zip baixado.
Antes de iniciar o tutorial, navegue até o diretório raiz do projeto:
cd ClassifyingImagesWithVisionAndCoreML
Você vai executar todos os exemplos de código a seguir nesse diretório.
Treine e exporte um modelo personalizado do Edge
Antes de continuar, conclua o Guia de início rápido do modelo do dispositivo Edge com as seguintes modificações:
- Use o conjunto de dados de flores ou use seu próprio conjunto de dados.
- Na etapa Treinar seu modelo, selecione a opção de modelo Edge.
- Na etapa Exportar o modelo, siga as instruções para exportar um modelo de ML principal.
Você usará o arquivo model.mlmodel
do Core ML da flor resultante para executar uma versão personalizada do app atual para iOS.
Configurar o app para iOS
O app de demonstração para iOS requer várias outras ferramentas:
- Xcode
- Ferramentas de linha de comando do Xcode
Fazer o download do Xcode
Use este link para fazer o download do Xcode no seu computador.
Instalar as ferramentas de linha de comando do Xcode
Para instalar as ferramentas de linha de comando do Xcode, execute o seguinte comando na linha de comando:
xcode-select --install
Abrir o projeto
Abra o projeto com o Xcode. É possível abrir o projeto pela linha de comando ou usando o Console do Google Cloud Platform. Para abrir ele usando a linha de comando, execute o comando a seguir:
open ./Vision+ML\ Example.xcodeproj
Executar o app original
Para iniciar o app no Simulator e receber anotações de imagem, siga estas etapas:
- Para iniciar o app, selecione o botão de reprodução no canto superior esquerdo da janela do Xcode.
- Forneça uma imagem de previsão para o app. É possível fornecer uma imagem de duas maneiras:
- Tire uma foto com a câmera do dispositivo ou
- adicione fotos à biblioteca de fotos do dispositivo arrastando-as e soltando-as na janela do Simulator.
O app exibe as duas principais categorias de classificação na ordem da pontuação de confiança atribuída pelo modelo a cada uma delas.
O resultado exibirá anotações semelhantes às imagens abaixo:
Executar o app personalizado
O aplicativo original usa um modelo Core ML que classifica imagens em uma das 1.000 classes genéricas do ImageNet (animal, frutas, móveis, plantas etc.), usando o MobileNet padrão.
Modifique o app para que ele use o modelo treinado novamente com as seguintes categorias de imagens personalizadas de flores:
- margarida
- dente-de-leão
- rosas
- girassóis
- tulipas
Adicionar arquivos de modelo ao projeto
Faça o download do seu modelo personalizado de flores (Core ML exportado
model.mlmodel
) recebido após concluir o guia de início rápido do modelo de dispositivo do Edge. Os arquivosmodel.mlmodel
edict.txt
da exportação do modelo do Core ML estarão no local do Google Cloud Storage que você especificou.Renomeie seu modelo personalizado para
AutoML.mlmodel
.Exclua o modelo atual do projeto (
MobileNet.mlmodel
).Adicione o modelo personalizado ao projeto na pasta
Vision+ML Example
.Modifique a linha 30 em
ImageClassificationViewController
. Remova:let model = try VNCoreMLModel(for: MobileNet().model)
Substitua esta linha por:
let model = try VNCoreMLModel(for: AutoML().model)
Executar seu app de modelo personalizado
Para reiniciar o app no Simulator, selecione o botão de reprodução no canto superior esquerdo da janela do Xcode.
Para testar as modificações, adicione arquivos de imagem do diretório flower_photos/
e receba previsões.
Os resultados serão assim:
Para testar o modelo, adicione as imagens de dados de treinamento que você já fez o download ou faça o download de imagens coletadas em uma pesquisa do Google para usar na previsão.
Como funciona?
Agora que o app está em execução, observe o código específico do framework do CoreML e do Vision.
Configurar o Vision com um modelo do Core ML
O Core ML gera automaticamente uma classe Swift que fornece acesso fácil ao seu modelo de ML.
Neste exemplo, o Core ML gera automaticamente a classe MobileNet com base em MobileNetmodel
.
Extraia a instância de modelo com o seguinte código:
let model = try VNCoreMLModel(for: MobileNet().model)
Crie a solicitação do Vision com o modelo acima e o gerenciador de conclusão. O gerenciador de conclusão manipula a resposta de previsão do modelo.
Atualize o Console do Google Cloud Platform na linha de execução principal:
let request = VNCoreMLRequest(model: model, completionHandler: { [weak self] request, error in DispatchQueue.main.async { guard let results = request.results else { self.classificationLabel.text = "Unable to classify image.\n\(error!.localizedDescription)" return }
results
sempre estará em VNClassificationObservation
, conforme especificado pelo modelo do Core ML neste projeto.
let classifications = results as! [VNClassificationObservation] })
O gerenciador de conclusão da solicitação do Vision indica se a solicitação foi bem-sucedida ou resultou em um erro. Se for bem-sucedida, a propriedade de resultados conterá objetos VNClassificationObservation
que descrevem possíveis classificações identificadas pelo modelo do ML.
Um modelo do ML processa imagens de entrada em uma proporção fixa. No entanto, as imagens de entrada talvez apresentem proporções arbitrárias, de modo que o Vision precise escalonar ou cortar a imagem. Para resultados melhores, defina a propriedade
imageCropAndScaleOption
da solicitação para corresponder ao layout de imagem com que o modelo foi treinado.request.imageCropAndScaleOption = .centerCrop
Crie o
VisionRequestHandler
com a imagem de entrada usando o seguinte código:let handler = VNImageRequestHandler(ciImage: ciImage, orientation: orientation)
Passe o objeto da solicitação para chamar a função de execução do gerenciador.
do { try handler.perform([self.classificationRequest]) } catch {
Esse gerenciador detecta erros gerais de processamento de imagem. O gerenciador de conclusão
processClassifications(_:error:)
doclassificationRequest
detecta erros específicos do processamento dessa solicitação.print("Failed to perform classification.\n\(error.localizedDescription)") }
A seguir
Você concluiu um tutorial de um app de classificação de flores do iOS usando um modelo do Core ML exportado do AutoML Vision Edge. Além disso, usou um modelo do Core ML treinado para testar um app de classificação de imagem geral antes de fazer modificações nele e receber anotações de amostra personalizadas de flores. Em seguida, você examinou o código específico do Core ML para entender a funcionalidade subjacente.
Os recursos a seguir ajudam você a aprender sobre os modelos do Core ML e o AutoML Vision Edge:
- Saiba mais sobre o Core ML por meio da documentação oficial (em inglês) e do repositório de código.
- Teste a versão da câmera deste app de demonstração (em inglês), que usa uma versão quantizada do modelo. Ela fornece a mesma funcionalidade em um pacote menor e mais eficiente.
- Tente usar outros modelos prontos para o TFLite, incluindo um detector de hotwords de fala e uma versão de resposta inteligente no dispositivo.