File size: 1,392 Bytes
855e8cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e81ca22
855e8cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
"""Dibujo sobre cada cuadro: la zona en rojo translúcido y un recuadro por persona."""

import numpy as np
import supervision as sv

ZONE_COLOR_BGR = np.array([0, 0, 255])  # rojo (OpenCV usa BGR)
ZONE_OPACITY = 0.4


def annotate(
    frame_bgr: np.ndarray, detections: sv.Detections, inside: np.ndarray, zone: np.ndarray
) -> np.ndarray:
    """Dibuja la zona, las personas de afuera en verde y los intrusos en rojo.

    Args:
        frame_bgr: Cuadro original en BGR. No se modifica.
        detections: Personas detectadas, con ``tracker_id``.
        inside: Array booleano: True para las personas que están sobre la zona.
        zone: Máscara booleana de la zona.

    Returns:
        Una copia del cuadro, anotada, en BGR.
    """
    out = frame_bgr.copy()
    # Mezcla en vez de pintar sólido, para que se vea lo que hay debajo de la zona.
    out[zone] = ((1 - ZONE_OPACITY) * out[zone] + ZONE_OPACITY * ZONE_COLOR_BGR).astype(np.uint8)
    groups = (
        (~inside, sv.Color.GREEN, "persona #{}"),
        (inside, sv.Color.RED, "INTRUSO #{}"),
    )
    for mask, color, label in groups:
        group = detections[mask]
        out = sv.BoxAnnotator(color=color, thickness=3).annotate(out, group)
        labels = [label.format(track_id) for track_id in group.tracker_id]
        out = sv.LabelAnnotator(color=color).annotate(out, group, labels=labels)
    return out