{"id":13653493,"url":"https://github.com/alexandre01/UltimateLabeling","last_synced_at":"2025-04-23T06:31:49.452Z","repository":{"id":40063044,"uuid":"189499472","full_name":"alexandre01/UltimateLabeling","owner":"alexandre01","description":"A multi-purpose Video Labeling GUI in Python with integrated SOTA detector and tracker","archived":false,"fork":false,"pushed_at":"2024-08-26T21:19:20.000Z","size":7112,"stargazers_count":319,"open_issues_count":13,"forks_count":37,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-21T11:07:40.964Z","etag":null,"topics":["computer-vision","labeling","labeling-tool","object-detection","object-tracking","python","pytorch","video"],"latest_commit_sha":null,"homepage":"https://www.lingosub.com","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexandre01.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-31T00:15:54.000Z","updated_at":"2025-04-05T21:04:20.000Z","dependencies_parsed_at":"2024-08-27T00:10:03.274Z","dependency_job_id":"83018212-aaec-4b14-b296-516ee970227c","html_url":"https://github.com/alexandre01/UltimateLabeling","commit_stats":{"total_commits":57,"total_committers":2,"mean_commits":28.5,"dds":0.01754385964912286,"last_synced_commit":"f8cf8c9135ecb150929cf04b8bd281f22ba6558e"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexandre01%2FUltimateLabeling","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexandre01%2FUltimateLabeling/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexandre01%2FUltimateLabeling/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexandre01%2FUltimateLabeling/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexandre01","download_url":"https://codeload.github.com/alexandre01/UltimateLabeling/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250385144,"owners_count":21421863,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["computer-vision","labeling","labeling-tool","object-detection","object-tracking","python","pytorch","video"],"created_at":"2024-08-02T02:01:11.438Z","updated_at":"2025-04-23T06:31:44.441Z","avatar_url":"https://github.com/alexandre01.png","language":"Python","funding_links":[],"categories":["Python","Labeling Tools"],"sub_categories":["Images"],"readme":"# UltimateLabeling\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![PyPI](https://img.shields.io/pypi/pyversions/ultimatelabeling.svg)](https://pypi.python.org/pypi/ultimatelabeling)\n[![PyPI](https://img.shields.io/pypi/v/ultimatelabeling.svg)](https://pypi.python.org/pypi/ultimatelabeling) \n\n![GitHub stars](https://img.shields.io/github/stars/alexandre01/UltimateLabeling.svg?style=social)\n\n**Sponsored by \u003cimg src=\"https://www.lingosub.com/icon.svg\" height=20 width=20 style=\"vertical-align: middle;\"/\u003e [LingoSub](https://www.lingosub.com): Learn languages by watching videos with AI-powered translations**\n\nA multi-purpose Video Labeling GUI in Python with integrated SOTA detector and tracker. Developed using PyQt5.\n\n## Features\n- SSH connection to a remote GPU server (see below to configure the server)\n- YOLO and OpenPifPaf integrated object \u0026 pose detectors (single frame/video mode)\n- Hungarian algorithm for track_id assignment\n- SiamMask visual object tracking for missing or mislabeled boxes\n- Zoom on video, resizable bounding boxes and skeletons\n- Dark mode!\n\n## Demo \n\u003cimg src=\"docs/ultimatelabeling.jpg\" width=\"90%\" /\u003e\n\n\u003cimg src=\"docs/uptown_funk.jpg\" width=\"45%\" /\u003e \u003cimg src=\"docs/roundabout.jpg\" width=\"45%\" /\u003e\n\n\nThe integrated object detectors and trackers are based on the following codes:\n- [OpenPifPaf](https://github.com/vita-epfl/openpifpaf): for human pose estimation\n- [YOLO darknet](https://github.com/AlexeyAB/darknet): for object detection\n- [SiamMask](https://github.com/foolwood/SiamMask): for visual object tracking\n- [Hungarian algorithm (scipy.optimize)](https://github.com/scipy/scipy): for optimal instance ID assignment\n\n\n## Installation\n\nStart by cloning the repository on your computer:\n```bash\ngit clone https://github.com/alexandre01/UltimateLabeling.git\ncd UltimateLabeling\n```\n\nWe recommend installing the required packages in a virtual environment to avoid any library versions conflicts. The following will do this for you:\n```bash\nvirtualenv --no-site-packages venv\nsource venv/bin/activate\npip install -r requirements.txt\n```\n\nOtherwise, just install the requirements on your main Python environment using `pip` as follows:\n```bash\npip install -r requirements\n```\n\nFinally, open the GUI using: \n```bash\npython -m ultimatelabeling.main\n```\n\n## Remote server configuration\nTo configure the remote GPU server (using the code in [server files](https://github.com/alexandre01/UltimateLabeling_server).), follow the steps below:\n\n```bash\ngit clone https://github.com/alexandre01/UltimateLabeling_server.git\ncd UltimateLabeling_server\npip install -r requirements.txt\nbash siamMask/setup.sh\nbash detection/setup.sh\n```\n\nThe data images and videos should be placed in the folder `data`, similarly to the client code.\n\nTo extract video files, use the following script:\n\n```bash\nbash extract.sh data/video_file.mp4\n```\n\n\n## Input / output\n\nTo start labeling your videos, put these (folder of images or video file, the frames will be extracted automatically) inside the `data` folder. \n\n- Import labels: To import existing .CSV labels, hit `Cmd+I` (or `Ctrl+I`). UltimateLabeling expects to read one .CSV file per frame, in the format: \"class_id\", \"xc\", \"yc\", \"w\", \"h\".\n\n- Export labels: The annotations are internally saved in the `output` folder. To export them in a unique .CSV file, hit `Cmd+E` (or `Ctrl+E`) and choose the destination location.\n\nIf you need other file formats for your projects, please write a GitHub issue or submit a Pull request.\n\n\n## Shortcuts / mouse controls\n\n\u003cimg src=\"docs/keyboard_shortcuts.jpg\" width=\"50%\" /\u003e\n\nKeyboard:\n- A (or Left key): next frame\n- D (or Right key): previous frame\n- W/S: class up/down\n- T: start/stop tracking (last used tracker)\n- Numberpad: assign given class_id\n- Spacebar: play the video\n\n\n\nMouse:\n- Click: select bounding box\n- Click \u0026 hold: move in the image\n- Cmd + click \u0026 hold: create new bounding box\n- Right click: delete bounding box in current frame (+ in all previous / all following frames if the corresponding option is enabled)\n- Scroll wheel (or swipe up/down): zoom in the image \n\n\n## Improvements / issues\nPlease write a GitHub issue if you experience any issue or wish an improvement. Or even better, submit a pull request! \n\n## Licence\nCopyright (c) 2019 Alexandre Carlier, released under the MIT licence.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexandre01%2FUltimateLabeling","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexandre01%2FUltimateLabeling","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexandre01%2FUltimateLabeling/lists"}