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