DEV Community

Dogs Behavior Classification Using Visual Computing with Keras model.

Neste estudo procuro classificar os comportamentos ('alerta', 'bravo', 'brincar', 'tranquilo') através de uma estratégia de computação visual, utilizando modelos para identificar padrões de comportamento pré-definidos. Esses aspectos classificados foram definidos de acordo com alguns padrões de comportamento comuns entre cães veja exemplo figura abaixo.

Image description

Particularmente meu cachorro OZZY foi minha inspiração para iniciar esse estudo, pois era um cão adotado já adulto e que apresentava muitos problemas de saúde como cinomose, doença do carrapato entre outros, ficou com sequelas dessas doenças e isso nos levou a sempre ter um cuidado especial com ele e sempre precisamos vigiá-lo. Aí surgiu a ideia de montar esse modelo no keras que se chamava LOLA (homenagem ao meu outro cachorro) para iniciar essa brincadeira de previsão.

Disponibilizarei neste post um código simplificado para rodar o modelo treinado que fiz e verificar seus resultados. Foi um modelo treinado há alguns anos com mais de 5mil imagens. Eu fiz isso em 2019.
Mas iniciarei uma série de posts passo a passo como fiz o modelo, definição e tratamentos para imagens, bibliotecas utilizadas e irei treinar e criar um novo modelo desde o início.
Criarei vários posts para esses estudos.....

Chega de conversa e mãos no código.. vamos rodar essa bagaça

obs: arquivos do projeto no link https://drive.google.com/file/d/1BxaqU0VWc7WJ2B3DlFzdNrKfWeP24_1W/view?usp=drive_link.

Importa as bibliotecas necessárias

import numpy as np # Para operações numéricas
from keras.applications.inception_v3 import decode_predictions # Para decodificar previsões
import matplotlib.pyplot as plt # Para visualização
import os # Para operações relacionadas ao sistema operacional
from keras.models import load_model # Para carregar o modelo de classificação
from PIL import Image # Para trabalhar com imagens
import cv2 # Para operações de processamento de imagem

Define a função para converter uma imagem de BGR para RGB

def cvtRGB(img):
    return cv2.cvtColor(img.copy(), cv2.COLOR_BGR2RGB)
Enter fullscreen mode Exit fullscreen mode

Define as dimensões desejadas para as imagens

img_width, img_height = 256, 256
Enter fullscreen mode Exit fullscreen mode

Define as categorias possíveis para classificação

categories = ['alerta', 'bravo', 'brincar', 'tranquilo']
Enter fullscreen mode Exit fullscreen mode

Carrega o modelo pré-treinado ResNet50 a partir do arquivo 'lola_classification.h5'

model_ResNet50 = load_model('lola_classification.h5')
Enter fullscreen mode Exit fullscreen mode

Define a função para fazer previsões em uma única imagem usando o modelo carregado

def predict_one_image(img, model):
    img = cv2.resize(img, (img_width, img_height), interpolation=cv2.INTER_CUBIC)  # Redimensiona a imagem
    img = np.reshape(img, (1, img_width, img_height, 3))  # Reformata a imagem
    img = img/255.  # Normaliza a imagem
    pred = model.predict(img)  # Faz a previsão
    class_num = np.argmax(pred)  # Obtém a classe com maior probabilidade
    return class_num, np.max(pred)  # Retorna a classe e a probabilidade
Enter fullscreen mode Exit fullscreen mode

Carrega a imagem de teste

test_img = cv2.imread('dog3.jpg')
Enter fullscreen mode Exit fullscreen mode

Faz a previsão na imagem de teste

pred, probability = predict_one_image(test_img, model_ResNet50)
Enter fullscreen mode Exit fullscreen mode

Imprime a classe prevista e a probabilidade associada

print('%s %d%%' % (categories[pred], round(probability, 2) * 100))
Enter fullscreen mode Exit fullscreen mode

Plotar a imagem de teste

plt.imshow(cvtRGB(test_img))  # Mostra a imagem de teste
plt.axis('off')  # Desliga os eixos
plt.show()  # Mostra a imagem
Enter fullscreen mode Exit fullscreen mode

No teste abaixo essa braveza deu 100% rsrsrs...

Image description

see you folks!

Top comments (1)

Collapse
 
fsimoes profile image
Fabio Simoes

Show Marco!! Muito bom!