{"id":13575941,"url":"https://github.com/faisalthaheem/simanno","last_synced_at":"2026-05-24T07:04:30.107Z","repository":{"id":44583300,"uuid":"139584614","full_name":"faisalthaheem/simanno","owner":"faisalthaheem","description":"Simple Image Annotation (simanno) Tool for Machine Learning Projects","archived":false,"fork":false,"pushed_at":"2025-09-16T06:32:56.000Z","size":15807,"stargazers_count":5,"open_issues_count":6,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-09-16T08:31:23.201Z","etag":null,"topics":["annotation-tool","image-processing","machine-learning","tool"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/faisalthaheem.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-07-03T13:05:23.000Z","updated_at":"2025-09-16T06:33:01.000Z","dependencies_parsed_at":"2022-09-14T08:22:14.094Z","dependency_job_id":null,"html_url":"https://github.com/faisalthaheem/simanno","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/faisalthaheem/simanno","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faisalthaheem%2Fsimanno","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faisalthaheem%2Fsimanno/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faisalthaheem%2Fsimanno/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faisalthaheem%2Fsimanno/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/faisalthaheem","download_url":"https://codeload.github.com/faisalthaheem/simanno/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/faisalthaheem%2Fsimanno/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33424576,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"online","status_checked_at":"2026-05-24T02:00:06.296Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["annotation-tool","image-processing","machine-learning","tool"],"created_at":"2024-08-01T15:01:05.649Z","updated_at":"2026-05-24T07:04:30.079Z","avatar_url":"https://github.com/faisalthaheem.png","language":"Python","funding_links":[],"categories":["Others"],"sub_categories":[],"readme":"|Repository|Last commit|Docker CI Health|Docker pulls|\n|---|---|---|---|\n|Scripts|![GithubLastCommit](https://img.shields.io/github/last-commit/faisalthaheem/simanno-scripts)|[![Docker Image CI](https://github.com/faisalthaheem/simanno-scripts/actions/workflows/docker-image.yml/badge.svg?branch=main)](https://github.com/faisalthaheem/simanno-scripts/actions/workflows/docker-image.yml)|![DockerPulls](https://img.shields.io/docker/pulls/faisalthaheem/simanno-scripts)|\n|Backend|![GithubLastCommit](https://img.shields.io/github/last-commit/faisalthaheem/simanno-be)|[![Docker Image CI](https://github.com/faisalthaheem/simanno-be/actions/workflows/docker-image.yml/badge.svg?branch=main)](https://github.com/faisalthaheem/simanno-be/actions/workflows/docker-image.yml)|![DockerPulls](https://img.shields.io/docker/pulls/faisalthaheem/simanno-be)|\n|Frontend|![GithubLastCommit](https://img.shields.io/github/last-commit/faisalthaheem/simanno-fe)|[![Docker Image CI](https://github.com/faisalthaheem/simanno-fe/actions/workflows/docker-image.yml/badge.svg?branch=main)](https://github.com/faisalthaheem/simanno-fe/actions/workflows/docker-image.yml)|![DockerPulls](https://img.shields.io/docker/pulls/faisalthaheem/simanno-fe)|\n\n\n# simanno\n\nSimple Image Annotation (SimAnno) Tool for Deep Learning Projects.\n\nSimAnno is a web based image annotation tool that uses sqlite database(s) to maintain annotations for images and consists of a front end which is an app written in Angular 8 and is supported by a Flask based python 3 REST service backend.\n\nThis repository has been refactored to serve as the documentation and general information repo, for specific modules please refer to the respective repositories below.\n\n\n|Module|Repo link|\n|---|---|\n|Documentation|This repo|\n|Backend|https://github.com/faisalthaheem/simanno-be|\n|Frontend|https://github.com/faisalthaheem/simanno-fe|\n|Scripts|https://github.com/faisalthaheem/simanno-scripts|\n\nAt the heart of the project is the great [jquery select areas plugin](https://github.com/360Learning/jquery-select-areas).\n\nThe tool makes it easy to keep images on a headless environment and access them from any web browser. Once images have been tagged a training record can be generated to be fed to the learning/evaluating scripts. See [life2tfrec.py](https://github.com/faisalthaheem/deep-learning-scripts/blob/master/dbutils/lite2tfrec.py) for an example of how the databases generated by this tool are being used.\n\nThe easiest and straightforward way is to use Docker to run the services, see [Running with Docker](https://github.com/faisalthaheem/simanno/wiki/Running-with-Docker) for more information. \n\nIf you would like to run outside of Docker, you will need to install dependencies, please refer to  [Setup Guide](https://github.com/faisalthaheem/simanno/wiki/Setup-Guide) to get started.\n\n# Demo\n\n![Demo](https://rawcdn.githack.com/faisalthaheem/simanno/f30c565754724ac7c5077f55311baf7ef85243a6/screenshots/demo.gif)\n\n## Annotation Screen\nFollowing screen a sample image with different areas marked with appropriate labels\n![Annotation Screen](https://rawcdn.githack.com/faisalthaheem/simanno/daec6b7be6a4dcfbd2f332199bcc97bc5b130e1c/screenshots/annotating-v2.png)\n\n## ROI (Regions Of Interest) Wall\nFollowing image shows the regions of interest extracted from the available data for a quick review\n![ROI Wall](https://raw.githack.com/faisalthaheem/simanno/master/screenshots/wall-v2.png)\n\n## Running the demo locally\n\nTo launch the stack using the latest containers from main branch, use the following command\n```bash\ndocker-compose -f docker-compose.yml up -d\n```\n\nIf you have cloned the repositories and are developing, you can use the following command to launch the stack in development mode\n```bash\ndocker-compose -f docker-compose.dev.yml up -d\n```\n\n# Issues and Feedback\nPlease use the issues link on the top to report any issues/feedback/suggestions.\n\n# Scripts\n\nThere are few useful scripts that faciliate data import and export to/from simanno. The following section describes these briefly.\n\n## code/import-cat-from-coco.py\n\n\u003e Using this script you can extract a category of images from the COCO dataset.\n\nThe scripts expects the following arguments\nThe comand expects the following arguments\n```bash\nusage: import-cat-from-coco.py [-h] -c CATEGORY -t TYPE -li LBLID -af ANNOTATIONFILE -sp SRCPATH -dp DESTPATH\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -c CATEGORY, --category CATEGORY\n                        The category to extract.\n  -t TYPE, --type TYPE  Type to assign to images, accepted values are train or val, default is train.\n  -li LBLID, --lblid LBLID\n                        The label id to be used for this category.\n  -af ANNOTATIONFILE, --annotationfile ANNOTATIONFILE\n                        Path to annotation file.\n  -sp SRCPATH, --srcpath SRCPATH\n                        Path of source containing images.\n  -dp DESTPATH, --destpath DESTPATH\n                        Path to destination to create the db and save images to.\n```\n\nFor instance, the following command extracts all images belonging to the \"cars\" category and moves them to a destination folder while also creating a stand alone sqlite db that works with simanno.\n```bash\npython3 import-cat-from-coco.py \\\n-t val -c car -li 1 \\\n-af $COCO_PATH/annotations/instances_val2017.json \n-dp $CARS_FROM_COCO_PATH \n-sp $COCO_PATH/val2017/\n```\n\nWhere, the parameters are\n|Parameter|Valid values|Description|\n|---|---|---|\n|-t |val or train| Type of dataset that is being created for simanno. Influences the names of db file and destination folder.|\n|-c |string| Name of category that should exist in coco dataset.|\n|-li|integer| The label index to be assigned when records are added to db. Label text is taken from the -c parameter.|\n|-af|path| Path to the coco annotations file.|\n|-dp|path| Path to the destination folder which will contain a database file and a folder containing images copied from the coco dataset.|\n|-sp|path| Path to the source folder containing coco images to be copied from into the destination folder.|\n\n\nAlternatively you can use the docker-container version to run this script with the following command\n```bash\ndocker run --rm -it -u $UID -v $PWD:/datasets faisalthaheem/simanno-scripts:main \"/usr/local/bin/python3.8 import-cat-from-coco.py -t val -c car -li 1 -af /datasets/coco/annotations/instances_val2017.json -dp /datasets/cars_from_coco -sp /datasets/coco/val2017/\"\n```\n\n```bash\ndocker run --rm -it -u $UID -v $PWD:/datasets faisalthaheem/simanno-scripts:main \"/usr/local/bin/python3.8 import-cat-from-coco.py -t train -c car -li 1 -af /datasets/coco/annotations/instances_train2017.json -dp /datasets/cars_from_coco -sp /datasets/coco/train2017/\"\n```\n\n\u003e Notice \"/usr/local/bin/python3.8\" which is important in the image\n\n## code/mergedbs.py\n\u003e For merging multiple simanno datasets into a single set for training and validation.\n\nThis script uses a yaml configuration file as input and provides remapping of the source labels in addition to merging annotations db table and files. \n\nAs output train and val folders containing images and train and val dbs are produced. \n\nIf the destination dbs exist then they are deleted before re-generation, files are only copied again if missing in destination.\n\n\nFor an example of a sample merge config file please take a look at\n```bash\nconf/scripts/mergedbs.sample.yaml\n```\n\nThe comand expects the following arguments\n```bash\nusage: mergedbs.py [-h] -c CONFIGFILE\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -c CONFIGFILE, --configfile CONFIGFILE\n                        Path to the merge config file.\n```\n\nTo execute, use the following command\n```bash\npython3 mergedbs.py -c mergedbs.yaml\n```\n\nOr, use the docker variant as given below, assuming you're in the folder containing all your datasets\n```bash\ndocker run --rm -it -u $UID -v $PWD:/datasets faisalthaheem/simanno-scripts:main \"/usr/local/bin/python3.8 /simanno/scripts/mergedbs.py -c /datasets/mergedbs.yaml\"\n```\n\n## code/splitdb.py\n\u003e For splitting a common db into two given input a folder containing images.\n\nGiven there is a simanno database that contains annotation of images contained in several folders, this script allows to split this database into several independent files thus allowing for better management of the training data.\n\nTo execute the script directly, a command similar to following can be used\n```bash\npython3 splitdb.py -r $PLATE_DETECTION_PATH/train -o $PLATE_DETECTION_PATH/train.db -i $PLATE_DETECTION_PATH/train_and_val.d\n```\n\nOr, if using the docker image, then following command accomplishes the same result\n```bash\ndocker run --rm -it -u $UID -v $PWD:/datasets faisalthaheem/simanno-scripts:main \"/usr/local/bin/python3.8 /simanno/scripts/splitdb.py -r /datasets/plate_detection/train -o /datasets/plate_detection/train.db -i /datasets/plate_detection/train_and_val.db\"\n```\n\nThe comand expects the following arguments\n```bash\nusage: splitdb.py [-h] -r REF -o OUT -i IN\n\noptional arguments:\n  -h, --help         show this help message and exit\n  -r REF, --ref REF  Path to the folder containing ref images.\n  -o OUT, --out OUT  Path to the destination db which will be created bearing contents related to ref folder images.\n  -i IN, --in IN     Path to the source db containing information on ref images.\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaisalthaheem%2Fsimanno","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaisalthaheem%2Fsimanno","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaisalthaheem%2Fsimanno/lists"}