| from __future__ import annotations |
|
|
| from typing import Any |
|
|
| import cv2 |
| import numpy as np |
|
|
|
|
| def _track_color(track_id: int) -> tuple[int, int, int]: |
| |
| return ( |
| 128 + (37 * track_id) % 128, |
| 128 + (17 * track_id + 85) % 128, |
| 128 + (29 * track_id + 170) % 128, |
| ) |
|
|
|
|
| def render_detections(frame, detections) -> Any: |
| """ |
| Render detections on a copied frame. |
| """ |
|
|
| rendered = np.copy(frame) |
| for detection in detections: |
| start_point = (int(detection.x1), int(detection.y1)) |
| end_point = (int(detection.x2), int(detection.y2)) |
| cv2.rectangle(rendered, start_point, end_point, (0, 255, 0), 2) |
| label = f"{detection.score:.2f}" |
| text_origin = (start_point[0], max(20, start_point[1] - 8)) |
| cv2.putText( |
| rendered, |
| label, |
| text_origin, |
| cv2.FONT_HERSHEY_SIMPLEX, |
| 0.5, |
| (0, 255, 0), |
| 1, |
| cv2.LINE_AA, |
| ) |
| return rendered |
|
|
|
|
| def render_tracks(frame, tracks) -> Any: |
| """ |
| Render tracks on a copied frame. |
| """ |
|
|
| rendered = np.copy(frame) |
| for track in tracks: |
| color = _track_color(track.track_id) |
| start_point = (int(track.x1), int(track.y1)) |
| end_point = (int(track.x2), int(track.y2)) |
| cv2.rectangle(rendered, start_point, end_point, color, 2) |
| label = f"ID {track.track_id}" |
| text_origin = (start_point[0], max(20, start_point[1] - 8)) |
| cv2.putText( |
| rendered, |
| label, |
| text_origin, |
| cv2.FONT_HERSHEY_SIMPLEX, |
| 0.6, |
| color, |
| 2, |
| cv2.LINE_AA, |
| ) |
| return rendered |
|
|