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 ❤️