55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
import cv2
|
|
import json
|
|
import time
|
|
|
|
# Inicializa o vídeo a partir da webcam (ou outro dispositivo de captura)
|
|
cap = cv2.VideoCapture(0)
|
|
|
|
# Variáveis para controle de tempo
|
|
file_path = 'face.json' # Caminho do arquivo para salvar as coordenadas
|
|
|
|
# Lista para armazenar as leituras
|
|
readings = []
|
|
|
|
while True:
|
|
# Captura o frame da câmera
|
|
ret, frame = cap.read()
|
|
|
|
# Conversão para escala de cinza para facilitar a detecção
|
|
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
|
|
|
|
# Utiliza um classificador de Haar Cascade para detectar objetos (neste caso, rostos)
|
|
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
|
|
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)
|
|
|
|
current_readings = []
|
|
|
|
# Adicionar as coordenadas na lista
|
|
for idx, (x, y, w, h) in enumerate(faces):
|
|
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
|
|
cv2.putText(frame, f"Rosto {idx + 1}", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)
|
|
current_readings.append({'id': idx, 'x': int(x), 'y': int(y), 'a': int(w), 'l': int(h)})
|
|
|
|
timestamp = time.time() # Captura o timestamp atual
|
|
readings.append({'timestamp': timestamp, 'rostos': current_readings})
|
|
|
|
# Se a lista atingir o limite máximo, remover a leitura mais antiga
|
|
if len(readings) > 10:
|
|
readings.pop(0)
|
|
|
|
# Salvar as coordenadas no arquivo a cada intervalo de tempo
|
|
if len(readings) == 10:
|
|
with open(file_path, 'w') as file:
|
|
json.dump({'frames': readings}, file)
|
|
|
|
# Mostra o frame com os retângulos
|
|
cv2.imshow('Detecção de Objetos', frame)
|
|
|
|
# Verifica se o usuário pressionou a tecla 'q' para sair do loop
|
|
if cv2.waitKey(1) & 0xFF == ord('q'):
|
|
break
|
|
|
|
# Libera a captura de vídeo e fecha as janelas
|
|
cap.release()
|
|
cv2.destroyAllWindows()
|