SAMAT is a hackable PyQt5 based GUI labelling tool for semantic segmentation task enhanced by an assistance feature, reminiscent of the functionality offered by the Photoshop Magic Wand tool.
Note: Magic Wand is optional tool and uses SAM masks that can be generated by python script in scripts directory of this repo.
Animation below shows annotation speed in real-time (SAM mask used).

- (optional) Generate SAM masks from images via given script
- Organize your data following this structure
- Specify path to your data in
config.toml - Run GUI via
__main__.py(prerequisites should be satisfied) - Annotate using brush (label is saved on sample switch)
Annotation tool itself requires only:
Python 3.11PyQt5numpy
Example setup (Ubuntu):
git clone https://github.com/Divelix/samat.git
cd samat
sudo apt update
sudo apt install python3.11-venv
pip3 install virtualenv
virtualenv venv -p python3.11
source venv/bin/activate
python -m pip install -e .
python .(optional) In order to generate SAM masks for Magic Wand, you will need to install:
PyTorchto run SAM model inferencesegment-anythingitself + related libs
Example setup (assuming Miniconda/Anaconda installed):
conda create -n samat python=3.11
conda activate samat
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
pip install git+https://github.com/facebookresearch/segment-anything.git
pip install opencv-python pycocotools matplotlib onnxruntime onnxYour data MUST follow this structure:
── my_dataset
├── images
| ├── 000001.png
| ├── 000002.png
| └── ...
├── labels (optional)
| ├── 000001.png
| ├── 000002.png
| └── ...
├── sam (optional)
| ├── 000001.png
| ├── 000002.png
| └── ...
└── classes.json
imagescontains.pngfiles you want to labellabelscontains.pngfiles with labels (will be automatically created if you have no labels yet)samcontains.pngfiles with SAM annotations (8-bit grayscale product of SAM script fromscripts/folder)classes.jsoncontains classes description that will be used for labeling
Example classes.json:
{
"classes": [
{ "id": 1, "name": "human", "color": "#FF0000" },
{ "id": 2, "name": "car", "color": "#00FF00" },
]
}where:
idfield must coinside with number keys on keyboard, so start with 1 (not 0). Any number of classes allowed, but only first 9 have their shortcuts.namefield is arbitrary and used only for dispaly in GUIcolorfield specifies the color this class would be displayed in GUI and encoded in output label.png
Note: specify path to your my_dataset (or any other name) inside config.toml.
Note: image files can have arbitrary names, but should resemble labels and sam names + only .png format is suppotred.
| Shortcut | Description |
|---|---|
| Left Mouse Button | Draw with brush + fill region (in SAM mode) |
| Right Mouse Button | Pan motion on zoomed-in image |
| Mouse Wheel | Zoom in/out |
Ctrl + Mouse Wheel |
Change brush size |
1-9 |
Select class (color to draw on label layer) |
E |
Eraser tool (transparent brush) |
Space |
Reset zoom |
C |
Clear label |
S |
Switch SAM assistance mode on/off |
,/. |
Previous/Next sample |