Criação
de Redes Neurais em Python usando as bibliotecas TensorFlow e Keras com WebCam
Explicando o código
passo a passo para que você
compreenda como ele utiliza Python, OpenCV e TensorFlow para criar um
sistema de classificação de imagens em tempo real com captura de
webcam.
🧠 Objetivo do Código
Criar um modelo de
rede neural densa (fully connected) para classificar imagens capturadas
da webcam em duas classes (ex: logos diferentes), treinado de forma interativa
com os dados fornecidos pelo próprio usuário, em tempo real.
📦 1. Importação de Bibliotecas
import cv2
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing.image import
ImageDataGenerator
- cv2: OpenCV para captura e exibição de vídeo.
- numpy: manipulação de arrays.
- tensorflow: criação e treino do modelo de IA.
- ImageDataGenerator: aumento de dados (data
augmentation).
🎥 2. Captura de Vídeo da Webcam
cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
- 0: índice da câmera (mude para 1 ou 2 se
necessário).
- cv2.CAP_DSHOW: backend do Windows (pode ser
omitido em Linux/macOS).
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print("Resolução da
câmera:", width, height)
- Define width e height da imagem para usar
como entrada do modelo.
🧠 3. Definição do Modelo
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(height, width, 3)), # Entrada: imagem da webcam
tf.keras.layers.Rescaling(1./255), # Normalização (0–1)
tf.keras.layers.Flatten(), #
"Achata" a imagem em vetor 1D
tf.keras.layers.Dense(100,
activation="sigmoid", name="perceptron_1"),
tf.keras.layers.Dense(100, activation="sigmoid", name="perceptron_2"),
tf.keras.layers.Dense(100, activation="sigmoid", name="perceptron_3"),
tf.keras.layers.Dense(100, activation="sigmoid", name="perceptron_4"),
tf.keras.layers.Dense(100, activation="sigmoid", name="perceptron_5"),
tf.keras.layers.Dense(2, activation="softmax", name="output") # Saída com 2 classes
])
📌 A camada Rescaling evita que os valores de pixel
(0 a 255) prejudiquem o aprendizado.
⚙️ 4. Compilação do Modelo
model.compile(
optimizer=tf.optimizers.Adam(learning_rate=0.001),
loss='categorical_crossentropy',
metrics=['accuracy']
)
- categorical_crossentropy: usada para classificação
multiclasse com vetores one-hot (ex: [1, 0], [0, 1]).
- Adam: otimizador eficaz para esse tipo de
rede.
🧪 5. Variáveis e Gerador de Dados
initial_class = [1.0, 0.0]
images = []
y = []
aug =
ImageDataGenerator(...) # definido mas
não usado ativamente
- images: onde são salvas as imagens
capturadas.
- y: onde são salvos os rótulos (labels)
correspondentes.
- ImageDataGenerator: preparado para aumento de
dados, mas com loop desativado.
🔁 6. Loop Principal (Interação com o Usuário)
Captura e Treinamento
if k == ord('1'):
initial_class = [1.0, 0.0]
grab_image = True
elif k == ord('2'):
initial_class = [0.0, 1.0]
grab_image = True
- Pressione 1 ou 2 para capturar imagens para a
classe correspondente.
elif k == ord('t'):
model.fit(...)
# Inicia o treinamento com as imagens coletadas
- Pressione t para treinar o modelo com as
imagens já coletadas.
Previsão
elif k == ord("p"):
prediction = model.predict(np.array([frame]))
...
print("Previsão:",
labels[max_index])
- Pressione p para prever qual classe
corresponde ao frame atual.
- Exibe o rótulo mais provável com base
no output do modelo.
📸 7. Coleta e Aumento de Dados
if grab_image:
images.append(frame)
y.append(initial_class)
- Salva o frame atual e o rótulo definido para
uso futuro no treinamento.
for i in range(0): # loop desativado
img = aug.flow(...) # criaria imagens artificiais aumentadas
🚪 8. Liberação de Recursos
cap.release()
cv2.destroyAllWindows()
📌 Observações Importantes
- Não há salvamento em disco. Tudo é feito em tempo real.
- Rede neural simples (sem convoluções), o que pode afetar a acurácia.
- Você pode adicionar Conv2D para melhorar o
desempenho.
- Ideal para testes, aprendizado e
prototipagem.
Se quiser, posso:
- Adicionar salvamento de modelo (.h5 ou
.keras).
- Substituir o Flatten por CNNs reais
(Conv2D).
- Criar um sistema de testes interativo
com botões ou interface GUI.