Snake4y5h's picture
Upload folder using huggingface_hub
1a73df3 verified
|
Raw
History Blame Contribute Delete
1.69 kB
metadata
title: Segment Everything API
emoji: 🧩
colorFrom: indigo
colorTo: blue
sdk: gradio
sdk_version: 6.26.0
app_file: app.py
python_version: '3.12'
short_description: SAM 2.1 masks as a decodable label-map PNG

Segment Everything API

SAM 2.1 automatic mask generation, returned as data instead of a picture.

Most segmentation demos hand back a colour-blended overlay, which cannot be decoded into masks again. This Space returns:

Output What it is
labels.png Lossless, untagged PNG. Each pixel carries its segment id as R + G*256; 0 means unsegmented.
manifest {width, height, count, model, regions: [{id, area, bbox}]}
preview A tinted image for eyeballing only — never parse it.

A client decodes labels.png once into a per-pixel label array and then does hit-testing, hover highlighting and selection entirely locally: one call per image, no round trip per interaction.

API

from gradio_client import Client, handle_file

client = Client("Snake4y5h/segment-everything-api")
labels, manifest, preview = client.predict(
    image=handle_file("art.png"),
    points_per_crop=32,        # 8 coarse … 64 fine
    min_area_frac=0.0002,      # drop specks
    pred_iou_thresh=0.88,
    stability_score_thresh=0.95,
    api_name="/segment",
)

Decoding the label map (JavaScript):

const bmp = await createImageBitmap(pngBlob, { colorSpaceConversion: 'none' });
// draw to a canvas, then per pixel:  id = data[p] + (data[p + 1] << 8)

Note colorSpaceConversion: 'none' — colour management would corrupt the ids.

Long edge is capped at 2048px; the manifest reports the size actually segmented.