Skip to main content

Streamlit Image Annotation

Streamlit component for image annotation.

Streamlit App PyPI

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,
    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.

  • 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,
    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.

  • 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

  • Addition of component for segmentation task.

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
yarn
yarn start

start streamlit

cd Streamlit-Image-Annotation/
streamlit run streamlit_image_annotation/Detection/__init__.py

build

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.

make 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/*

image-annotation-streamlit

Metadata

Release files for image-annotation-streamlit-customize 0.3.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for image-annotation-streamlit-customize 0.3.5
File Size Uploaded
image_annotation_streamlit_customize-0.3.5.tar.gz 4.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for image-annotation-streamlit-customize 0.3.5
File Interpreter ABI Platform
image_annotation_streamlit_customize-0.3.5-py3-none-any.whl Python 3 none any Details

Total release size: 8.9 kB

Release files / image_annotation_streamlit_customize-0.3.5.tar.gz

Download URL image_annotation_streamlit_customize-0.3.5.tar.gz
Size 4.3 kB
Tags Source
SHA-256 checksum
How to use checksums
510435cfb94286242ec3cff34cdb2030a20316c221055a5b95bd836828c63cc2
BLAKE2b-256 checksum
How to use checksums
3e45b606ec4d4ef8bd40f30dba6a9dda8ac8b37af736f3fcdfada3d5e8a1f3ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.11.1

Release files / image_annotation_streamlit_customize-0.3.5-py3-none-any.whl

Download URL image_annotation_streamlit_customize-0.3.5-py3-none-any.whl
Size 4.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
841db440f44fbf082f2f124d0c2a6a0e7df3f2f476c6597a47d2281880992fca
BLAKE2b-256 checksum
How to use checksums
e08af3b85e79fb79c6cf2257c1d648eafcf7459af1ca9567b312624adbbe0e40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.11.1

Release history Release notifications | RSS feed

This release

0.3.5 This release

2 release files

0.3.4

2 release files

0.3.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page