1
resposta

from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input, decode_predictions
import numpy as np
import cv2
from google.colab import files
from PIL import Image

Fazer upload da imagem

uploaded = files.upload()
imagem_path = list(uploaded.keys())[0] # Pega o nome do arquivo enviado

Carregar a imagem usando OpenCV

imagem = cv2.imread(imagem_path)
imagem_rgb = cv2.cvtColor(imagem, cv2.COLOR_BGR2RGB)

Carregar o modelo MobileNetV2 pré-treinado

modelo = MobileNetV2(weights="imagenet")

Pré-processar a imagem para o formato esperado pelo modelo

imagem_redimensionada = cv2.resize(imagem_rgb, (224, 224))
imagem_array = np.expand_dims(imagem_redimensionada, axis=0)
imagem_array = preprocess_input(imagem_array)

Fazer a previsão

predicoes = modelo.predict(imagem_array)
label = decode_predictions(predicoes)
print("Objeto identificado:", label[0][0][1]) # Exibe a classe identificada

1 resposta

Olá, Ronaldo. Como vai?

Muito bacana você compartilhar o seu código da atividade no fórum! Isso ajuda bastante outros alunos que estão acompanhando o curso e podem querer um exemplo prático de como a implementação funciona no Google Colab.

O seu script está excelente e segue perfeitamente o fluxo de trabalho de visão computacional utilizando modelos pré-treinados no Keras. Para agregar um pouco mais ao seu tópico e detalhar para outros alunos o porquê de o seu código funcionar tão bem, vale destacar alguns pontos importantes da sua lógica:

  • Redimensionamento: O uso da função cv2.resize ajustando a imagem para o tamanho (224, 224) é um passo obrigatório. A arquitetura da rede neural MobileNetV2 foi projetada e treinada no dataset ImageNet recebendo imagens com essas dimensões exatas.
  • Expansão de Dimensões: A linha utilizando np.expand_dims resolve um erro muito comum. O modelo no TensorFlow não espera receber uma única imagem, mas sim um lote (batch) de imagens. Ao usar esse comando, você transforma a estrutura da imagem de (224, 224, 3) para (1, 224, 224, 3), simulando um lote de uma única imagem.
  • Normalização: A função preprocess_input aplica as mesmas transformações matemáticas nos pixels da sua imagem que foram aplicadas nas imagens originais durante o treinamento do modelo, garantindo precisão na predição.

Como sugestão para expandir ainda mais esse seu código em projetos futuros, você pode listar as top 3 previsões do modelo em vez de apenas a principal. O método decode_predictions aceita um parâmetro chamado top. Veja como ficaria:

label = decode_predictions(predicoes, top=3)
print("Top 3 previsões:")
for previsao in label[0]:
    print("Objeto:", previsao[1], "- Confiança:", previsao[2])

Dessa forma, o modelo exibe outras possibilidades caso a imagem tenha mais de um elemento ou seja ambígua. Parabéns pela dedicação e por compartilhar seu conhecimento.

Espero que possa ter lhe ajudado!