Detecção de objetos ao vivo em Python
Sumário
Introdução {#introduction}
Neste artigo, vamos implementar uma ferramenta de reconhecimento de objetos em Python. Vamos utilizar um modelo pré-treinado e a biblioteca OpenCV para realizar a detecção de objetos em imagens estáticas e em tempo real através da câmera.
Estrutura do projeto {#project-structure}
Antes de iniciarmos o projeto, precisamos configurar a estrutura do mesmo. Para isso, vamos criar uma estrutura de pastas e baixar os arquivos necessários. A estrutura do projeto será a seguinte:
- main.py
- models/
- mobile_net_ssd_deploy.prototxt
- mobile_net_ssd.caffemodel
- images/
Instalação das bibliotecas {#library-installation}
Antes de começarmos a implementar o código, precisamos instalar algumas bibliotecas. Abra o terminal e execute os seguintes comandos:
pip install numpy
pip install opencv-python
Carregando o modelo {#model-loading}
Para realizar o reconhecimento de objetos, vamos utilizar um modelo pré-treinado chamado MobileNet SSD. Para isso, vamos fazer o download dos arquivos mobile_net_ssd_deploy.prototxt
e mobile_net_ssd.caffemodel
e salvá-los na pasta models
.
Detectando objetos em imagens estáticas {#object-detection-static-images}
Agora que configuramos a estrutura do projeto e carregamos o modelo, podemos começar a implementar a detecção de objetos em imagens estáticas. Vamos criar uma função chamada detect_objects_static_images
que receberá o caminho da imagem como parâmetro.
def detect_objects_static_images(image_path):
# Carrega a imagem
image = cv2.imread(image_path)
# Redimensiona a imagem para 300x300 pixels
resized_image = cv2.resize(image, (300, 300))
# Normaliza a imagem
normalized_image = (resized_image - 127.5) / 127.5
# Realiza a detecção de objetos
detections = net.forward(normalized_image)
# Processa as detecções
for i in range(detections.shape[2]):
confidence = detections[0, 0, i, 2]
# Verifica se a confiança da detecção é maior que 0.2 (20%)
if confidence > 0.2:
class_index = int(detections[0, 0, i, 1])
class_name = classes[class_index]
# Obtém as coordenadas da detecção
x1 = int(detections[0, 0, i, 3] * image.shape[1])
y1 = int(detections[0, 0, i, 4] * image.shape[0])
x2 = int(detections[0, 0, i, 5] * image.shape[1])
y2 = int(detections[0, 0, i, 6] * image.shape[0])
# Desenha um retângulo e exibe o nome do objeto
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(image, class_name, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
# Exibe a imagem
cv2.imshow('Detected Objects', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Detectando objetos em tempo real {#real-time-object-detection}
Agora que já implementamos a detecção de objetos em imagens estáticas, vamos implementar a detecção de objetos em tempo real através da câmera. Para isso, vamos criar uma função chamada detect_objects_real_time_camera
.
def detect_objects_real_time_camera():
# Inicializa a captura de vídeo
cap = cv2.VideoCapture(0)
# Loop principal
while True:
# Lê o quadro atual da câmera
ret, frame = cap.read()
# Redimensiona o quadro para 300x300 pixels
resized_frame = cv2.resize(frame, (300, 300))
# Normaliza o quadro
normalized_frame = (resized_frame - 127.5) / 127.5
# Realiza a detecção de objetos
detections = net.forward(normalized_frame)
# Processa as detecções
for i in range(detections.shape[2]):
confidence = detections[0, 0, i, 2]
# Verifica se a confiança da detecção é maior que 0.2 (20%)
if confidence > 0.2:
class_index = int(detections[0, 0, i, 1])
class_name = classes[class_index]
# Obtém as coordenadas da detecção
x1 = int(detections[0, 0, i, 3] * frame.shape[1])
y1 = int(detections[0, 0, i, 4] * frame.shape[0])
x2 = int(detections[0, 0, i, 5] * frame.shape[1])
y2 = int(detections[0, 0, i, 6] * frame.shape[0])
# Desenha um retângulo e exibe o nome do objeto
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(frame, class_name, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
# Exibe o quadro
cv2.imshow('Real-time Object Detection', frame)
# Verifica se a tecla 'q' foi pressionada para sair
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Libera a captura de vídeo e fecha as janelas
cap.release()
cv2.destroyAllWindows()
Conclusão {#conclusion}
Neste artigo, implementamos uma ferramenta de reconhecimento de objetos em python utilizando um modelo pré-treinado e a biblioteca OpenCV. Aprendemos como detectar objetos em imagens estáticas e em tempo real através da câmera. Essa ferramenta pode ser útil em uma variedade de aplicações, como detecção de objetos em vídeos de vigilância, detecção de rostos em fotos e muito mais. Experimente em diversos cenários e divirta-se explorando essa tecnologia!