Sankie005's picture
Upload 434 files
c446951
import pickle
import cv2
import requests
import supervision as sv
import argparse
import os
from typing import List
def parse_arguments() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Process video and annotate frames with detections."
)
parser.add_argument(
"--video_path", type=str, required=True, help="Path to the video file."
)
parser.add_argument(
"--class_list",
type=str,
nargs="+",
required=True,
help="List of classes to detect in the video.",
)
parser.add_argument(
"--dataset_id", type=str, required=True, help="Dataset ID for the API request."
)
parser.add_argument(
"--version_id", type=str, required=True, help="Version ID for the API request."
)
parser.add_argument(
"--confidence",
type=float,
default=0.5,
help="Confidence threshold for the detections.",
)
return parser.parse_args()
def process_and_annotate_frames(
video_path: str,
class_list: List[str],
dataset_id: str,
version_id: str,
confidence: float,
api_key: str,
) -> None:
url = f"http://localhost:9001/{dataset_id}/{version_id}?image_type=numpy"
headers = {"Content-Type": "application/json"}
params = {
"api_key": api_key,
"confidence": confidence,
}
box_annotator = sv.BoxAnnotator()
for frame in sv.get_video_frames_generator(source_path=video_path):
numpy_data = pickle.dumps(frame)
response = requests.post(
url, headers=headers, params=params, data=numpy_data
).json()
detections = sv.Detections.from_roboflow(response, class_list=class_list)
labels = [
f"{class_list[class_id]} {confidence_value:0.2f}"
for _, _, confidence_value, class_id, _ in detections
]
annotated_image = box_annotator.annotate(
frame, detections=detections, labels=labels
)
cv2.imshow("Annotated image", annotated_image)
cv2.waitKey(1)
if __name__ == "__main__":
args = parse_arguments()
API_KEY = os.environ.get("API_KEY")
if not API_KEY:
raise ValueError("API_KEY not found in environment variables.")
process_and_annotate_frames(
args.video_path,
args.class_list,
args.dataset_id,
args.version_id,
args.confidence,
API_KEY,
)