馃帴 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.
  • datetime y time: 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 mss

Tambi茅n necesitas dos archivos de modelo descargados:

  • deploy.prototxt
  • res10_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 monitor seg煤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_TIMEOUT si 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.

Comentarios

  1. En caso de que falle el segundo archivo lo puedn descargar de aqui Verificaci贸n del Nonce fall贸.

    ResponderEliminar
    Respuestas
    1. https://github.com/sr6033/face-detection-with-OpenCV-and-DNN/blob/master/res10_300x300_ssd_iter_140000.caffemodel

      Eliminar

Publicar un comentario

Entradas populares