subir
DogIA
DogIA - Python
Criando uma aplicação simples de classificação de imagens usando uma rede neural pré-treinada, utiliza o PyTorch para carregar um modelo de rede neural pré-treinado (ResNet50), baixar um arquivo com os rótulos das classes do ImageNet. O objetivo é identificar qualquer raça de cachorro através de uma imagem.
Instalações
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools
pip install torch
pip install torchvision
pip install requests
Bibliotecas
import json # manipular arquivos JSON
import torch # lidar com operações em tensores
import torchvision.models as models # carregar modelos pré-treinados e transformar imagens
import torchvision.transforms as transforms # contém várias transformações que podem ser aplicadas em imagens usando o PyTorch
import requests # baixar arquivos JSON da web
Carregar o modelo ResNet50 pré-treinado
modelo = models.resnet50(pretrained=True)
Carregar o arquivo com os rótulos das classes
url = "https://s3.amazonaws.com/deep-learning-models/image-models/imagenet_class_index.json"
response = requests.get(url)
rotulos = json.loads(response.text)
Carregar a imagem e transformá-la
caminho = input("Digite o nome da imagem:")
imagem = Image.open(caminho)
transform = transforms.Compose([
transforms.Resize(256), # redimensiona a imagem para que o menor lado tenha tamanho 256 pixels.
transforms.CenterCrop(224), # corta a imagem centralmente para que tenha tamanho 224x224 pixels.
transforms.ToTensor(), # : converte a imagem em um tensor do PyTorch.
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225]) # normaliza os valores dos pixels da imagem usando a média e o desvio padrão da ImageNet, que são valores predefinidos.
])
img_tensor = transform(imagem)
img_tensor = img_tensor.unsqueeze(0) #usado para adicionar uma dimensão extra ao tensor
Classificar a imagem
modelo.eval()
with torch.no_grad():
outputs = modelo(img_tensor)
_, predicted = torch.max(outputs, 1)
Obter a classe prevista e o rótulo correspondente
classe = predicted.item()
rotulo = rotulos[str(classe)][1]
Imprimir a classe prevista e o rótulo correspondente
print(f"Classe prevista: {classe}")
print(f"Rótulo: {rotulo}"