streamlit components for image annotation
Project description
Streamlit Image Annotation
Streamlit component for image annotation.
Features
- You can easily launch an image annotation tool using streamlit.
- By customizing the pre- and post-processing, you can achieve your preferred annotation workflow.
- Currently supports classification, detection, point detection tasks.
- Simple UI that is easy to navigate.
Install
pip install streamlit-image-annotation
Example Usage
If you want to see other use cases, please check inside the examples folder.
from glob import glob
import pandas as pd
import streamlit as st
from streamlit_image_annotation import classification
label_list = ['deer', 'human', 'dog', 'penguin', 'framingo', 'teddy bear']
image_path_list = glob('image/*.jpg')
if 'result_df' not in st.session_state:
st.session_state['result_df'] = pd.DataFrame.from_dict({'image': image_path_list, 'label': [0]*len(image_path_list)}).copy()
num_page = st.slider('page', 0, len(image_path_list)-1, 0)
label = classification(image_path_list[num_page],
label_list=label_list,
default_label_index=int(st.session_state['result_df'].loc[num_page, 'label']))
if label is not None and label['label'] != st.session_state['result_df'].loc[num_page, 'label']:
st.session_state['result_df'].loc[num_page, 'label'] = label_list.index(label['label'])
st.table(st.session_state['result_df'])
API
classification(
image_path: str,
label_list: List[str],
default_label_index: Optional[int] = None,
height: int = 512,
width: int = 512,
key: Optional[str] = None
)
-
image_path: Image path.
-
label_list: List of label candidates.
-
default_label_index: Initial label index.
-
height: The maximum height of the displayed image.
-
width: The maximum width of the displayed image.
-
key: An optional string to use as the unique key for the widget. Assign a key so the component is not remount every time the script is rerun.
-
Component Value: {'label': label_name}
Example: example code
detection(
image_path: str,
label_list: List[str],
bboxes: Optional[List[List[int, int, int, int]]] = None,
labels: Optional[List[int]] = None,
height: int = 512,
width: int = 512,
line_width: int = 5,
use_space: bool = False,
key: Optional[str] = None
)
-
image_path: Image path.
-
label_list: List of label candidates.
-
bboxes: Initial list of bounding boxes, where each bbox is in the format [x, y, w, h].
-
labels: List of label for each initial bbox.
-
height: The maximum height of the displayed image.
-
width: The maximum width of the displayed image.
-
line_width: The stroke width of the bbox.
-
use_space: Enable Space key for complete.
-
key: An optional string to use as the unique key for the widget. Assign a key so the component is not remount every time the script is rerun.
-
Component Value: [{'bbox':[x,y,width, height], 'label_id': label_id, 'label': label_name},...]
Example: example code
pointdet(
image_path: str,
label_list: List[str],
points: Optional[List[List[int, int]]] = None,
labels: Optional[List[int]] = None,
height: int = 512,
width: int = 512,
point_width: int =3,
use_space: bool = False,
key: Optional[str] = None
)
-
image_path: Image path.
-
label_list: List of label candidates.
-
points: Initial list of points, where each point is in the format [x, y].
-
labels: List of label for each initial bbox.
-
height: The maximum height of the displayed image.
-
width: The maximum width of the displayed image.
-
point_width: The stroke width of the bbox.
-
use_space: Enable Space key for complete.
-
key: An optional string to use as the unique key for the widget. Assign a key so the component is not remount every time the script is rerun.
-
Component Value: [{'bbox':[x,y], 'label_id': label_id, 'label': label_name},...]
Example: example code
Future Work
- Refactoring
- CI and Test
Development
setup
cd Streamlit-Image-Annotation/
export PYTHONPATH=$PWD
and set IS_RELEASE = False in Streamlit-Image-Annotation/__init__.py.
start frontend
git clone https://github.com/hirune924/Streamlit-Image-Annotation.git
cd Streamlit-Image-Annotation/streamlit_image_annotation/Detection/frontend
yarn
yarn start
start streamlit
cd Streamlit-Image-Annotation/
streamlit run streamlit_image_annotation/Detection/__init__.py
build
You can use the automated build script to build all components and create the distribution package:
source .venv/bin/activate # Activate virtual environment first
./scripts/build_all.sh
This script will:
- Clean previous builds
- Build all three frontend components (Classification, Detection, Point)
- Create both wheel and source distribution packages in
dist/folder
The built package can be found in dist/streamlit_image_annotation-*.whl.
Alternatively, you can build manually:
cd Streamlit-Image-Annotation/Classification/frontend
yarn build
cd Streamlit-Image-Annotation/Detection/frontend
yarn build
cd Streamlit-Image-Annotation/Point/frontend
yarn build
and set IS_RELEASE = True in Streamlit-Image-Annotation/__init__.py.
Then create the wheel:
python setup.py sdist bdist_wheel
upload
python3 -m twine upload --repository testpypi dist/*
python -m pip install --index-url https://test.pypi.org/simple/ --no-deps streamlit-image-annotation
twine upload dist/*
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file streamlit_image_annotation-0.7.2.tar.gz.
File metadata
- Download URL: streamlit_image_annotation-0.7.2.tar.gz
- Upload date:
- Size: 3.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39e8bd2e36fff2343a7631568d19c2c0341481e118a45674dd73fafe61d40e07
|
|
| MD5 |
3af2e447726dece5cca527d365fb78af
|
|
| BLAKE2b-256 |
ca50f9f3cffe286f0a5aae892bdd55d845bc0d065e31bd97f1745692f2968446
|
File details
Details for the file streamlit_image_annotation-0.7.2-py3-none-any.whl.
File metadata
- Download URL: streamlit_image_annotation-0.7.2-py3-none-any.whl
- Upload date:
- Size: 3.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d80fc26e8ecbd3bc2458b2dbb40d5d5c027b73a51e2e32e2443ce965ffc704c
|
|
| MD5 |
b2b5d64ef2d8727fc75bf8a51e96b779
|
|
| BLAKE2b-256 |
04c55db5dfde04f92d6dd0496a503b2a71d30bf8903e0ae29ce9028aea77e302
|