Sankie005's picture
Upload 434 files
c446951
import cv2
import requests
import base64
import supervision as sv
import argparse
import os
from typing import List
def parse_arguments() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Process image and annotate with detections."
)
parser.add_argument(
"--image_path", type=str, required=True, help="Path to the image file."
)
parser.add_argument(
"--class_list",
type=str,
nargs="+",
required=True,
help="List of classes to detect in the image.",
)
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 annotate_image(
image_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}"
headers = {"Content-Type": "application/json"}
params = {
"api_key": api_key,
"confidence": confidence,
}
with open(image_path, "rb") as image_file:
encoded_image = base64.b64encode(image_file.read()).decode("utf-8")
image = cv2.imread(image_path)
response = requests.post(
url, headers=headers, params=params, data=encoded_image
).json()
detections = sv.Detections.from_roboflow(response, class_list=class_list)
box_annotator = sv.BoxAnnotator()
labels = [
f"{class_list[class_id]} {det_confidence:0.2f}"
for _, _, det_confidence, class_id, _ in detections
]
annotated_image = box_annotator.annotate(
image, detections=detections, labels=labels
)
cv2.imshow("Annotated image", annotated_image)
cv2.waitKey(0)
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.")
annotate_image(
args.image_path,
args.class_list,
args.dataset_id,
args.version_id,
args.confidence,
API_KEY,
)