Dogs Behavior Classification Using Visual Computing with Keras model.
Published: 2024-05-02 16:28:24

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bkgejd1d3qguojkq526x.png)





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
```pyton
def cvtRGB(img):
    return cv2.cvtColor(img.copy(), cv2.COLOR_BGR2RGB)
```

# Define as dimensões desejadas para as imagens
```pyton
img_width, img_height = 256, 256
```

# Define as categorias possíveis para classificação
```python
categories = ['alerta', 'bravo', 'brincar', 'tranquilo']
```

# Carrega o modelo pré-treinado ResNet50 a partir do arquivo 'lola_classification.h5'
```python
model_ResNet50 = load_model('lola_classification.h5')
```

# Define a função para fazer previsões em uma única imagem usando o modelo carregado
```python
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
```

# Carrega a imagem de teste
```python
test_img = cv2.imread('dog3.jpg')
```

# Faz a previsão na imagem de teste
```python
pred, probability = predict_one_image(test_img, model_ResNet50)
```

# Imprime a classe prevista e a probabilidade associada
```pythhon
print('%s %d%%' % (categories[pred], round(probability, 2) * 100))
```
# Plotar a imagem de teste
```python
plt.imshow(cvtRGB(test_img))  # Mostra a imagem de teste
plt.axis('off')  # Desliga os eixos
plt.show()  # Mostra a imagem
```
#No teste abaixo essa braveza deu 100% rsrsrs...


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5j03beclrwjshib3lzzw.png)




see you folks!