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!

0
respostas

[Projeto] Classificação de imagens

import tensorflow as tf
from tensorflow.keras.applications.mobilenet_v2 import MobileNetV2, preprocess_input, decode_predictions
from tensorflow.keras.preprocessing import image
import numpy as np
import matplotlib.pyplot as plt

# Carregar o modelo MobileNetV2 pré-treinado
# `weights='imagenet'` indica que queremos os pesos treinados no ImageNet.
# `input_shape=(224, 224, 3)` define o tamanho esperado da imagem de entrada.
model = MobileNetV2(weights='imagenet', input_shape=(224, 224, 3))

print("Modelo MobileNetV2 carregado com sucesso!")

def preprocess_image(img_path):
    # Carregar a imagem com o tamanho alvo de 224x224
    img = image.load_img(img_path, target_size=(224, 224))
    # Converter a imagem para um array NumPy
    img_array = image.img_to_array(img)
    # Adicionar uma dimensão extra para o batch (o modelo espera um batch de imagens)
    img_array = np.expand_dims(img_array, axis=0)
    # Pré-processar a entrada conforme as especificações do MobileNetV2
    img_array = preprocess_input(img_array)
    return img, img_array

print("Função `preprocess_image` definida.")

def classify_image(model, img_path):
    # Pré-processar a imagem
    original_img, processed_img = preprocess_image(img_path)

    # Fazer a previsão
    predictions = model.predict(processed_img)

    # Decodificar as previsões para termos legíveis por humanos
    # top=3 para mostrar as 3 principais previsões
    decoded_predictions = decode_predictions(predictions, top=3)[0]

    # Exibir a imagem original
    plt.imshow(original_img)
    plt.axis('off')
    plt.title(f"Classificação do objeto")
    plt.show()

    print("Principais previsões:")
    for i, (imagenet_id, label, score) in enumerate(decoded_predictions):
        print(f"{i + 1}: {label} ({score:.2f}%) ")

print("Função `classify_image` definida.")

# Baixar uma imagem de exemplo (pode ser substituído por uma imagem local)
img_url = 'https://raw.githubusercontent.com/modenaxe/dog-breed-classifier/master/submission/images/Labrador_retriever_06449.jpg'
img_name = 'Labrador_retriever_06449.jpg'
img_path = tf.keras.utils.get_file(img_name, img_url)

print(f"Imagem de exemplo baixada: {img_path}")

# Classificar a imagem
classify_image(model, img_path)

# Para carregar uma imagem local, faça o upload dela para o ambiente do Colab primeiro.
# Por exemplo, se você carregou um arquivo chamado 'meu_cachorro.jpg', você o referenciaria assim:
# img_path_local = 'meu_cachorro.jpg'

# Exemplo: Usando uma imagem local que você faria upload
# Substitua 'caminho/para/sua/imagem.jpg' pelo nome do arquivo que você carregou.
img_path_local = '/content/Welsh_springer_spaniel_08203.jpg' # Exemplo: eu carreguei o arquivo Welsh_springer_spaniel_08203.jpg'

print(f"Usando imagem local: {img_path_local}")

# Classificar a imagem local
classify_image(model, img_path_local)