Adding documentation and main.py
This commit is contained in:
323
PLAN_SUMMARY.md
Normal file
323
PLAN_SUMMARY.md
Normal file
@@ -0,0 +1,323 @@
|
||||
# Project Plan Summary - Microscopy Object Detection Application
|
||||
|
||||
## Executive Summary
|
||||
|
||||
This document provides a high-level overview of the planned microscopy object detection application. The application will enable users to train, validate, and deploy YOLOv8-based object detection models for microscopy images, with comprehensive GUI, database storage, and visualization capabilities.
|
||||
|
||||
## Project Goals
|
||||
|
||||
1. **Detect Objects**: Identify organelles and membrane branching structures in microscopy images
|
||||
2. **Train Models**: Fine-tune YOLOv8s on custom datasets with YOLO format annotations
|
||||
3. **Manage Results**: Store and query detection results in SQLite database
|
||||
4. **Visualize Data**: Interactive plots and image viewers for analysis
|
||||
5. **Export Results**: Flexible export options (CSV, JSON, Excel)
|
||||
6. **Future Annotation**: Provide manual annotation capabilities for dataset preparation
|
||||
|
||||
## Key Technologies
|
||||
|
||||
| Component | Technology | Purpose |
|
||||
|-----------|------------|---------|
|
||||
| ML Framework | Ultralytics YOLOv8 | Object detection model |
|
||||
| GUI | PySide6 | Desktop application interface |
|
||||
| Visualization | pyqtgraph | Real-time plots and charts |
|
||||
| Database | SQLite | Detection results storage |
|
||||
| Image Processing | OpenCV, Pillow | Image manipulation |
|
||||
|
||||
## Application Architecture
|
||||
|
||||
### Three-Layer Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ GUI Layer (PySide6) │
|
||||
│ - Main Window with Tabs │
|
||||
│ - Dialogs & Custom Widgets │
|
||||
└──────────────┬──────────────────────┘
|
||||
│
|
||||
┌──────────────▼──────────────────────┐
|
||||
│ Business Logic Layer │
|
||||
│ - YOLO Wrapper │
|
||||
│ - Inference Engine │
|
||||
│ - Database Manager │
|
||||
│ - Config Manager │
|
||||
└──────────────┬──────────────────────┘
|
||||
│
|
||||
┌──────────────▼──────────────────────┐
|
||||
│ Data Layer │
|
||||
│ - SQLite Database │
|
||||
│ - File System (images, models) │
|
||||
│ - YOLOv8 Model Files │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Core Features
|
||||
|
||||
### 1. Detection Tab ✨
|
||||
- **Single Image Detection**: Select and detect objects in one image
|
||||
- **Batch Processing**: Process entire folders of images
|
||||
- **Real-time Preview**: View detections with bounding boxes
|
||||
- **Confidence Control**: Adjustable threshold slider
|
||||
- **Database Storage**: Automatic saving of results with metadata
|
||||
|
||||
### 2. Training Tab 🎓
|
||||
- **Dataset Selection**: Browse for YOLO format datasets
|
||||
- **Parameter Configuration**: Epochs, batch size, image size, learning rate
|
||||
- **Progress Monitoring**: Real-time training metrics and loss curves
|
||||
- **Model Versioning**: Automatic model naming and version tracking
|
||||
- **Validation Metrics**: Track mAP, precision, recall during training
|
||||
|
||||
### 3. Validation Tab 📊
|
||||
- **Model Evaluation**: Validate models on test datasets
|
||||
- **Metrics Visualization**:
|
||||
- Confusion matrix
|
||||
- Precision-Recall curves
|
||||
- Class-wise performance
|
||||
- **Model Comparison**: Compare multiple model versions
|
||||
|
||||
### 4. Results Tab 📈
|
||||
- **Detection Browser**: Searchable table of all detections
|
||||
- **Advanced Filtering**: By date, model, class, confidence
|
||||
- **Statistics Dashboard**:
|
||||
- Detection count by class
|
||||
- Confidence distribution
|
||||
- Timeline visualization
|
||||
- **Export Options**: CSV, JSON, Excel formats
|
||||
|
||||
### 5. Annotation Tab 🖊️ (Future Feature)
|
||||
- **Image Browser**: Navigate through image repository
|
||||
- **Drawing Tools**: Create bounding boxes
|
||||
- **Class Assignment**: Label objects
|
||||
- **YOLO Export**: Export annotations for training
|
||||
|
||||
## Database Design
|
||||
|
||||
### Tables Overview
|
||||
|
||||
| Table | Purpose | Key Fields |
|
||||
|-------|---------|------------|
|
||||
| **models** | Store trained models | name, version, path, metrics |
|
||||
| **images** | Image metadata | path, dimensions, checksum |
|
||||
| **detections** | Detection results | bbox, class, confidence |
|
||||
| **annotations** | Manual labels | bbox, class, annotator |
|
||||
|
||||
### Key Relationships
|
||||
- Each detection links to one image and one model
|
||||
- Each image can have multiple detections from multiple models
|
||||
- Annotations are separate from automated detections
|
||||
|
||||
## Implementation Phases
|
||||
|
||||
### Phase 1: Core Foundation (Weeks 1-2)
|
||||
- [x] Architecture design and documentation
|
||||
- [ ] Project structure setup
|
||||
- [ ] Database schema implementation
|
||||
- [ ] YOLO wrapper basic functionality
|
||||
- [ ] Database manager CRUD operations
|
||||
|
||||
### Phase 2: GUI Development (Weeks 3-4)
|
||||
- [ ] Main window and tab structure
|
||||
- [ ] Detection tab implementation
|
||||
- [ ] Training tab implementation
|
||||
- [ ] Basic visualization widgets
|
||||
- [ ] Configuration management
|
||||
|
||||
### Phase 3: Advanced Features (Weeks 5-6)
|
||||
- [ ] Validation tab with metrics
|
||||
- [ ] Results tab with filtering
|
||||
- [ ] Export functionality
|
||||
- [ ] Error handling and logging
|
||||
- [ ] Performance optimization
|
||||
|
||||
### Phase 4: Polish & Testing (Week 7)
|
||||
- [ ] Unit tests for all components
|
||||
- [ ] Integration testing
|
||||
- [ ] User documentation
|
||||
- [ ] Bug fixes and refinements
|
||||
- [ ] Deployment preparation
|
||||
|
||||
### Phase 5: Future Enhancements (Post-Launch)
|
||||
- [ ] Annotation tool
|
||||
- [ ] Real-time camera detection
|
||||
- [ ] Multi-model ensemble
|
||||
- [ ] Cloud integration
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
object_detection/
|
||||
├── main.py # Entry point
|
||||
├── requirements.txt # Dependencies
|
||||
├── README.md # User documentation
|
||||
├── ARCHITECTURE.md # Technical architecture
|
||||
├── IMPLEMENTATION_GUIDE.md # Development guide
|
||||
├── PLAN_SUMMARY.md # This file
|
||||
│
|
||||
├── config/
|
||||
│ └── app_config.yaml # Application settings
|
||||
│
|
||||
├── src/
|
||||
│ ├── database/ # Database layer
|
||||
│ │ ├── db_manager.py # Main database operations
|
||||
│ │ ├── models.py # Data classes
|
||||
│ │ └── schema.sql # SQL schema
|
||||
│ │
|
||||
│ ├── model/ # ML layer
|
||||
│ │ ├── yolo_wrapper.py # YOLO interface
|
||||
│ │ └── inference.py # Detection engine
|
||||
│ │
|
||||
│ ├── gui/ # Presentation layer
|
||||
│ │ ├── main_window.py # Main app window
|
||||
│ │ ├── tabs/ # Feature tabs
|
||||
│ │ ├── dialogs/ # Popup dialogs
|
||||
│ │ └── widgets/ # Custom widgets
|
||||
│ │
|
||||
│ └── utils/ # Utilities
|
||||
│ ├── config_manager.py # Config handling
|
||||
│ ├── logger.py # Logging setup
|
||||
│ └── file_utils.py # File operations
|
||||
│
|
||||
├── data/ # Runtime data
|
||||
│ ├── models/ # Trained models
|
||||
│ ├── datasets/ # Training data
|
||||
│ └── results/ # Detection outputs
|
||||
│
|
||||
├── tests/ # Test suite
|
||||
│ ├── test_database.py
|
||||
│ ├── test_model.py
|
||||
│ └── test_gui.py
|
||||
│
|
||||
├── logs/ # Application logs
|
||||
└── docs/ # Additional docs
|
||||
```
|
||||
|
||||
## User Workflows
|
||||
|
||||
### Workflow 1: First-Time Setup
|
||||
1. Launch application
|
||||
2. Configure image repository path in Settings
|
||||
3. Download/verify YOLOv8s.pt base model
|
||||
4. Ready to detect!
|
||||
|
||||
### Workflow 2: Quick Detection
|
||||
1. Open Detection tab
|
||||
2. Select pre-trained model
|
||||
3. Choose image or folder
|
||||
4. Adjust confidence threshold
|
||||
5. Click "Detect"
|
||||
6. View results and save to database
|
||||
|
||||
### Workflow 3: Train Custom Model
|
||||
1. Prepare dataset in YOLO format
|
||||
2. Open Training tab
|
||||
3. Select data.yaml file
|
||||
4. Configure hyperparameters
|
||||
5. Start training
|
||||
6. Monitor progress
|
||||
7. Model saved automatically with metrics
|
||||
|
||||
### Workflow 4: Analyze Results
|
||||
1. Open Results tab
|
||||
2. Apply filters (date range, class, model)
|
||||
3. View statistics dashboard
|
||||
4. Export filtered results to CSV/JSON
|
||||
|
||||
## Data Formats
|
||||
|
||||
### YOLO Annotation Format
|
||||
```
|
||||
<class_id> <x_center> <y_center> <width> <height>
|
||||
```
|
||||
- All coordinates normalized (0-1)
|
||||
- One line per object
|
||||
- Separate .txt file for each image
|
||||
|
||||
### Detection Output Format
|
||||
```json
|
||||
{
|
||||
"image_id": 123,
|
||||
"image_path": "relative/path/to/image.jpg",
|
||||
"model_id": 5,
|
||||
"model_name": "organelle_detector_v1",
|
||||
"detections": [
|
||||
{
|
||||
"class_name": "organelle",
|
||||
"confidence": 0.95,
|
||||
"bbox": [0.1, 0.2, 0.3, 0.4],
|
||||
"detected_at": "2024-12-04T15:30:00Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Performance Requirements
|
||||
|
||||
| Metric | Target | Notes |
|
||||
|--------|--------|-------|
|
||||
| Detection Speed | < 1s per image | On GPU for 640x640 images |
|
||||
| Training Start | < 5s | Model loading time |
|
||||
| Database Query | < 100ms | For 10k detections |
|
||||
| GUI Responsiveness | < 100ms | UI interactions |
|
||||
| Memory Usage | < 4GB | During inference |
|
||||
| Batch Processing | 100+ images | Without memory issues |
|
||||
|
||||
## Risk Mitigation
|
||||
|
||||
| Risk | Impact | Mitigation Strategy |
|
||||
|------|--------|-------------------|
|
||||
| CUDA/GPU issues | High | Fallback to CPU mode |
|
||||
| Database corruption | Medium | Regular backups, transactions |
|
||||
| Large datasets | Medium | Lazy loading, pagination |
|
||||
| Memory overflow | High | Batch size limits, monitoring |
|
||||
| Model compatibility | Low | Version checking, validation |
|
||||
|
||||
## Success Criteria
|
||||
|
||||
- ✅ Successfully detect objects in microscopy images
|
||||
- ✅ Train custom models with >80% mAP50
|
||||
- ✅ Store and retrieve detection results efficiently
|
||||
- ✅ Intuitive GUI requiring minimal training
|
||||
- ✅ Process 100+ images in batch mode
|
||||
- ✅ Export results in multiple formats
|
||||
- ✅ Comprehensive documentation
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. **Review this plan** with stakeholders
|
||||
2. **Gather feedback** on features and priorities
|
||||
3. **Confirm requirements** are fully captured
|
||||
4. **Switch to Code mode** to begin implementation
|
||||
5. **Follow the implementation guide** for development
|
||||
6. **Iterate based on testing** and user feedback
|
||||
|
||||
## Questions for Stakeholders
|
||||
|
||||
Before proceeding to implementation, please consider:
|
||||
|
||||
1. Are there any additional object classes beyond organelles and membrane branches?
|
||||
2. What is the typical size of your microscopy images?
|
||||
3. Do you need multi-user support or is single-user sufficient?
|
||||
4. Are there specific export formats you need beyond CSV/JSON/Excel?
|
||||
5. What is your expected dataset size (number of images)?
|
||||
6. Do you need support for 3D/volumetric microscopy images?
|
||||
7. Any specific visualization requirements?
|
||||
8. Integration with other tools or workflows?
|
||||
|
||||
## Resources Required
|
||||
|
||||
### Development Time
|
||||
- Phase 1-3: ~6 weeks development
|
||||
- Phase 4: ~1 week testing & polish
|
||||
- Total: ~7 weeks for initial release
|
||||
|
||||
### Hardware Requirements
|
||||
- Development machine with CUDA GPU (recommended)
|
||||
- 16GB RAM minimum
|
||||
- 50GB storage for development
|
||||
|
||||
### Software Dependencies
|
||||
- All listed in [`requirements.txt`](requirements.txt)
|
||||
- Total size: ~2GB when installed
|
||||
|
||||
---
|
||||
|
||||
**Ready to proceed with implementation? Let's build this! 🚀**
|
||||
54
main.py
Normal file
54
main.py
Normal file
@@ -0,0 +1,54 @@
|
||||
"""
|
||||
Microscopy Object Detection Application
|
||||
Main entry point for the application.
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Add src directory to path
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
|
||||
from PySide6.QtWidgets import QApplication
|
||||
from PySide6.QtCore import Qt
|
||||
|
||||
from src.gui.main_window import MainWindow
|
||||
from src.utils.logger import setup_logging
|
||||
from src.utils.config_manager import ConfigManager
|
||||
|
||||
|
||||
def main():
|
||||
"""Application entry point."""
|
||||
# Setup logging
|
||||
config_manager = ConfigManager()
|
||||
log_config = config_manager.get_section("logging")
|
||||
setup_logging(
|
||||
log_file=log_config.get("file", "logs/app.log"),
|
||||
level=log_config.get("level", "INFO"),
|
||||
log_format=log_config.get("format"),
|
||||
)
|
||||
|
||||
# Enable High DPI scaling
|
||||
QApplication.setHighDpiScaleFactorRoundingPolicy(
|
||||
Qt.HighDpiScaleFactorRoundingPolicy.PassThrough
|
||||
)
|
||||
|
||||
# Create Qt application
|
||||
app = QApplication(sys.argv)
|
||||
app.setApplicationName("Microscopy Object Detection")
|
||||
app.setOrganizationName("MicroscopyLab")
|
||||
app.setApplicationVersion("1.0.0")
|
||||
|
||||
# Set application style
|
||||
app.setStyle("Fusion")
|
||||
|
||||
# Create and show main window
|
||||
window = MainWindow()
|
||||
window.show()
|
||||
|
||||
# Run application
|
||||
sys.exit(app.exec())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user