Roboflow 2.0
Use the Roboflow 2.0 semantic segmentation model through our Serverless Hosted API
Code sample
pip install inference-sdk supervisionimport base64
import os
import urllib.request
import cv2
import numpy as np
import supervision as sv
from inference_sdk import InferenceHTTPClient
image_url = "https://storage.googleapis.com/com-roboflow-marketing/notebooks/examples/bicycle.png"
image_path = "bicycle.png"
urllib.request.urlretrieve(image_url, image_path)
image = cv2.imread(image_path)
OUTPUT_PATH = "annotated.png"
client = InferenceHTTPClient(
api_url="https://serverless.roboflow.com",
api_key=os.getenv("API_KEY"),
)
result = client.infer(image, model_id="your-project/1")
predictions = result["predictions"]
mask_bytes = base64.b64decode(predictions["segmentation_mask"])
class_map = predictions.get("class_map", {})
class_mask = cv2.imdecode(np.frombuffer(mask_bytes, np.uint8), cv2.IMREAD_GRAYSCALE)
class_mask = cv2.resize(class_mask, (image.shape[1], image.shape[0]), interpolation=cv2.INTER_NEAREST)
class_ids = [cid for cid in np.unique(class_mask).tolist() if cid != 0]
if class_ids:
masks, xyxy, names = [], [], []
for cid in class_ids:
binary = class_mask == cid
rows = np.where(np.any(binary, axis=1))[0]
cols = np.where(np.any(binary, axis=0))[0]
xyxy.append([cols[0], rows[0], cols[-1], rows[-1]])
masks.append(binary)
names.append(class_map.get(str(cid), str(cid)))
detections = sv.Detections(
xyxy=np.array(xyxy, dtype=np.float64),
mask=np.array(masks),
class_id=np.array(class_ids),
data={"class_name": np.array(names)},
)
annotated = sv.MaskAnnotator().annotate(scene=image.copy(), detections=detections)
annotated = sv.LabelAnnotator().annotate(scene=annotated, detections=detections)
else:
annotated = image
cv2.imwrite(OUTPUT_PATH, annotated)
print(f"Saved {OUTPUT_PATH}")Last updated
Was this helpful?