Roboflow 2.0 is a DeepLabv3-based semantic segmentation model. You train Roboflow 2.0 models on the Roboflow platform and deploy them through our Serverless Cloud API.
For self-hosted deployment, see Roboflow Inference.
Roboflow 2.0 API
Get your API Key
Create a Roboflow account, find your key on the Roboflow API settings page and make it available to your shell:
export ROBOFLOW_API_KEY="your-key-here"Install the dependencies
Install the Inference SDK and supervision:
pip install -U inference-sdk supervisionRun the model
Run inference against a Roboflow 2.0 semantic segmentation model you have trained, decode the per-pixel class map, and write an annotated PNG. Call your model by its {workspace}/{model-slug} ID (see Versions, Trainings, and Models).
The response contains a segmentation_mask (base64-encoded grayscale PNG where each pixel value is a class ID and 0 is background) and a class_map mapping class IDs to class names. The script splits that into one sv.Detections row per class so sv.MaskAnnotator can overlay the masks on the source image.
import base64
import os
import cv2
import numpy as np
import supervision as sv
from inference_sdk import InferenceHTTPClient
image = sv.load_image_from_url("https://media.roboflow.com/quickstart/traffic.jpg")
client = InferenceHTTPClient(
api_url="https://serverless.roboflow.com",
api_key=os.environ["ROBOFLOW_API_KEY"],
)
# No pretrained aliases: train your own model and replace "your-project/1" with your model ID.
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(image.copy(), detections)
annotated = sv.LabelAnnotator().annotate(annotated, detections)
else:
annotated = image
cv2.imwrite("annotated.png", annotated)
print("Saved annotated.png")Set api_url to match your deployment target:
https://serverless.roboflow.comfor the Serverless Cloud API.http://localhost:9001for a local Inference server.- Your Dedicated Deployment URL for a private endpoint.