馃帴 Detecci贸n de Personas en Video y Grabaci贸n Autom谩tica Usando Python y OpenCV
En este art铆culo explicaremos c贸mo crear un sistema de detecci贸n de personas que grabe autom谩ticamente la pantalla solo cuando se detecta presencia humana. Este proyecto es 煤til si usas c谩maras IP o software como V380 y deseas una forma eficiente de grabar 煤nicamente cuando hay movimiento humano en una regi贸n espec铆fica del escritorio.
¿Qu茅 hace este script?
- Captura un 谩rea definida de la pantalla (donde aparece el video de la c谩mara).
- Usa un modelo de inteligencia artificial para detectar personas.
- Comienza a grabar cuando detecta presencia humana.
- Detiene la grabaci贸n si no se ve nadie por un per铆odo definido.
- Guarda los videos autom谩ticamente con marcas de tiempo.
Tecnolog铆as y librer铆as usadas
OpenCV: procesamiento de im谩genes y video.mss: captura r谩pida de pantalla.NumPy: procesamiento eficiente de matrices.datetimeytime: control de tiempo.- Modelo Caffe SSD preentrenado: para detecci贸n de rostros/personas.
Requisitos
Aseg煤rate de tener Python 3.8+ (funciona en 3.12) y las siguientes librer铆as instaladas:
pip install opencv-python numpy mssTambi茅n necesitas dos archivos de modelo descargados:
deploy.prototxtres10_300x300_ssd_iter_140000.caffemodel
Se pueden obtener desde los repositorios oficiales de OpenCV o desde:
wget https://raw.githubusercontent.com/opencv/opencv/master/samples/dnn/face_detector/deploy.prototxt .
wget https://github.com/opencv/opencv_3rdparty/raw/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000_fp16.caffemodel -O res10_300x300.caffemodel
El c贸digo completo
import cv2
import numpy as np
import time
from mss import mss
from datetime import datetime
# === Configuraciones ===
monitor = {"top": 100, "left": 100, "width": 640, "height": 480}
prototxt = "deploy.prototxt"
model = "res10_300x300_ssd_iter_140000.caffemodel"
NO_PERSON_TIMEOUT = 5
net = cv2.dnn.readNetFromCaffe(prototxt, model)
sct = mss()
recording = False
video_writer = None
last_person_time = 0
def detect_person(frame):
blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)), 1.0,
(300, 300), (104.0, 177.0, 123.0))
net.setInput(blob)
detections = net.forward()
for i in range(detections.shape[2]):
confidence = detections[0, 0, i, 2]
if confidence > 0.6:
return True
return False
def start_recording(filename, frame_size, fps=20):
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
return cv2.VideoWriter(filename, fourcc, fps, frame_size)
print(" Monitoreando... Presiona ESC para salir.")
while True:
frame = np.array(sct.grab(monitor))
frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)
person_detected = detect_person(frame)
current_time = time.time()
if person_detected:
last_person_time = current_time
if not recording:
filename = datetime.now().strftime("grabacion_%Y%m%d_%H%M%S.mp4")
video_writer = start_recording(filename, (monitor["width"], monitor["height"]))
print(f" Persona detectada – grabando en: {filename}")
recording = True
else:
if recording and (current_time - last_person_time > NO_PERSON_TIMEOUT):
print(" No hay persona – deteniendo grabaci贸n.")
recording = False
video_writer.release()
video_writer = None
if recording and video_writer is not None:
video_writer.write(frame)
cv2.imshow("Vista", frame)
if cv2.waitKey(1) == 27: # ESC
break
# Limpieza
if video_writer:
video_writer.release()
cv2.destroyAllWindows()
C贸mo ajustar a tu uso
- Cambia las coordenadas de
monitorseg煤n d贸nde est茅 la imagen de la c谩mara en tu pantalla. - Puedes modificar el umbral de confianza (
confidence > 0.6) si detecta demasiado o poco. - Cambia el tiempo
NO_PERSON_TIMEOUTsi quieres que espere m谩s o menos antes de cortar la grabaci贸n.
Salidas
- Videos guardados en la misma carpeta, con nombre
grabacion_YYYYMMDD_HHMMSS.mp4. - No graba sonido (ideal para privacidad o rendimiento).
Requisitos m铆nimos de hardware
- CPU moderna (Intel i5 o Ryzen 5 en adelante recomendado).
- RAM: 4 GB m铆nimo (8+ recomendado).
- Sistema operativo: Linux o Windows.
- Sin GPU necesaria, ya que el modelo es liviano.


En caso de que falle el segundo archivo lo puedn descargar de aqui Verificaci贸n del Nonce fall贸.
ResponderEliminarhttps://github.com/sr6033/face-detection-with-OpenCV-and-DNN/blob/master/res10_300x300_ssd_iter_140000.caffemodel
Eliminar