Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

(Fundamentos de IA: investigando algoritmos e abordagens de machine learning) Faça como eu fiz: identificando objetos com MobileNetV2

# ==========================================================
# IDENTIFICAÇÃO DE OBJETOS UTILIZANDO O MODELO MOBILENETV2
# ==========================================================

# Importação das bibliotecas necessárias
import cv2
import numpy as np

from google.colab import files

from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.applications.mobilenet_v2 import (
    preprocess_input,
    decode_predictions
)

# ==========================================================
# 1. Selecionar uma imagem do computador
# ==========================================================

print("Selecione uma imagem para análise.")

arquivo = files.upload()

# Obtém o nome do primeiro arquivo enviado
nome_imagem = next(iter(arquivo))

# ==========================================================
# 2. Ler a imagem utilizando o OpenCV
# ==========================================================

imagem = cv2.imread(nome_imagem)

# O OpenCV trabalha em BGR.
# O MobileNetV2 utiliza imagens no padrão RGB.
imagem = cv2.cvtColor(imagem, cv2.COLOR_BGR2RGB)

# ==========================================================
# 3. Ajustar a imagem para o formato esperado pelo modelo
# ==========================================================

# O MobileNetV2 recebe imagens de 224x224 pixels.
imagem = cv2.resize(imagem, (224, 224))

# Adiciona uma dimensão para representar o lote de imagens.
imagem = np.expand_dims(imagem, axis=0)

# Normaliza os valores dos pixels.
imagem = preprocess_input(imagem)

# ==========================================================
# 4. Carregar o modelo pré-treinado
# ==========================================================

rede_neural = MobileNetV2(weights="imagenet")

# ==========================================================
# 5. Classificar a imagem
# ==========================================================

resultado = rede_neural.predict(imagem, verbose=0)

# Obtém as três previsões mais prováveis
previsoes = decode_predictions(resultado, top=3)[0]

# ==========================================================
# 6. Exibir os resultados
# ==========================================================

print("\nObjeto(s) identificado(s):\n")

for indice, (_, classe, confianca) in enumerate(previsoes, start=1):
    print(f"{indice}º - {classe} ({confianca:.2%})")
1 resposta

Oi, Eduardo! Como vai?
Agradeço por compartilhar seu código com a comunidade Alura.

Chama a atenção como você estruturou bem as etapas, documentando a conversão de BGR para RGB com cv2.cvtColor e o redimensionamento para o modelo MobileNetV2. Esse tratamento no processamento de imagens com OpenCV é um passo importante para o sucesso de projetos envolvendo aprendizado de máquina e classificação de objetos no Python.

Uma dica interessante para o futuro é usar o método argmax da biblioteca numpy caso queira identificar rapidamente apenas o índice da classe de maior probabilidade, sem precisar ordenar todo o array de previsões. Veja este exemplo:


import numpy as np
indice_maximo = np.argmax(resultado[0])
print(indice_maximo)

Esse código localiza de forma direta a posição do maior valor numérico retornado pelo modelo. Sabendo disso, qual o próximo desafio ou objeto que você pretende classificar usando esse script?