Fast, minimal, and YOLO-friendly image bounding box tool
Venus Image Annotator is a fast, user-friendly, and modern tool for drawing bounding boxes and saving annotations in YOLO format. Designed for both beginners and professionals working on image labeling and machine learning datasets.
π Click here to download the latest VIA application (.exe)
β No installation needed β just run it!
|
|
|
|
Action | How To Do It |
---|---|
Go to next image | Press Spacebar (auto-saves current annotations) |
Go to previous image | Click "Previous" button |
Change class | Press keys 1-9 to quickly switch between classes |
Delete a box | Ctrl+Click inside the box you want to remove |
Clear all boxes | Click "Clear" button (removes annotation file too) |
Zoom in/out | Use mouse wheel (anchored zoom at cursor position) |
Pro Tip: You don't need to manually save! Annotations are automatically saved when you move to the next image.
While most open-source annotation tools offer basic box drawing and label saving, Venus Annotator focuses on developer ease, speed, and flexibility. Here's what makes it stand out:
- Easily add, remove, or update classes via the GUI
- Colors are auto-assigned from a friendly palette
- Deletes .txt labels and copied image if no boxes are drawn
- No Python or extra steps β just run the app
- Space to go to next image
- 1β9 to switch classes
- Zoom with mouse wheel
- Saves in YOLO format (class_id x_center y_center width height)
- Auto-loads existing annotations
- Modular, readable, and easy to contribute to
- π― Draw Bounding Boxes with click + drag
- π¨ Class Editor GUI for label management
- π Auto-save annotations on image switch
- π Zoom with mouse wheel (anchored)
- β¨οΈ Keyboard Shortcuts:
- Spacebar β next image
- 1β9 β select class
- π§½ Ctrl + Click to erase boxes
- β Clear all = auto-delete annotation and image
- π Auto-load previous annotations if found
- π§ Dynamic class system with YAML or GUI
git clone https://github.com/yourusername/venus-image-annotator.git
cd venus-image-annotator
- Create a virtual environment (recommended):
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- Install required libraries:
pip install PyQt5 pyyaml
Or use the requirements file:
pip install -r requirements.txt
- Run the application:
python via_annotator.py
To integrate Venus Image Annotator into your own project:
-
Copy the core files:
via_annotator.py
(main application)classes.yaml
(if you have predefined classes)
-
Import and use in your code:
from via_annotator import VenusAnnotator
# Initialize the application
app = QApplication(sys.argv)
annotator = VenusAnnotator()
annotator.show()
sys.exit(app.exec_())
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-new-feature
- Make your changes to the code
- Test thoroughly
- Submit a pull request
-
Adding new annotation types (e.g., polygons, lines):
- Modify
draw_box
method invia_annotator.py
- Add new drawing tools to the UI
- Modify
-
Customizing output format:
- Modify
save_annotation
method to support your format - Update the loading functions to recognize your format
- Modify
-
Adding new keyboard shortcuts:
- Find the
keyPressEvent
method and add your shortcuts
- Find the
-
UI Customization:
- All UI elements are defined in the
setup_ui
method - Modify colors, sizes, and layouts as needed
- All UI elements are defined in the
- Classes not loading? Check your YAML file format and make sure paths are correct
- UI elements not appearing? Ensure PyQt5 is properly installed
- Performance issues with large images? Consider implementing image downscaling
Install required libraries:
pip install PyQt5 pyyaml
Or use the requirements file:
pip install -r requirements.txt
β If you're using pyinstaller to make an EXE, others don't need to install these.
After selecting input and output folders:
output/
βββ images/ β contains copied annotated images
βββ labels/ β contains .txt files with YOLO-style annotations
YOLO label format:
<class_id> <x_center> <y_center> <width> <height>
All values are normalized to [0, 1].
On first launch, a classes.yaml
file is created automatically at:
Windows: C:\Users\<YourName>\AppData\Local\VenusAnnotator\classes.yaml
Linux/macOS: ~/.config/VenusAnnotator\classes.yaml
Example Structure:
classes:
- id: 1
name: "human"
- id: 2
name: "dog"
- id: 3
name: "cat"
β Or use the "Edit Classes" GUI to manage classes (no YAML editing required).
pip install pyinstaller
pyinstaller --noconsole --onefile your_script.py
With icon and name:
pyinstaller --noconsole --onefile --name VenusAnnotator --icon=icon.ico your_script.py
β
classes.yaml
is created automatically β no need to bundle it.
π load_classes()
~ Line 95
default_yaml = { "classes": [...] }
π setup_ui()
~ Line 160
for idx, cls in enumerate(self.classes):
π save_annotation()
~ Line 940
f.write(f"{cid} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}\n")
π save_annotation()
~ Line 926
if not self.boxes:
os.remove(label_output_path)
π edit_classes()
~ Line 330
table = QTableWidget(len(self.classes), 2)
π select_output_folder()
~ Line 610
self.labels_output = os.path.join(self.output_folder, "labels")
VIA-Annotator/
βββ via_annotator.py
βββ README.md
βββ assets/
β βββ demo-thumbnail.png
βββ requirements.txt
βββ classes.yaml β Optional (auto-generated if not present)
MIT License β use freely and share with others.
Created by an enthusiast for the global coding community β€οΈ