Add Professional Swagger UI API Documentation

 Professional API Documentation Added:
- Created comprehensive Swagger UI similar to Mini SpecsComply Pro
- Added Flask-RESTX integration with detailed API models
- Professional styling with emojis and comprehensive descriptions

 Dual Documentation System:
- Main API (port 5002): Built-in Swagger at /docs/
- Professional Docs (port 5003): Enhanced UI with detailed specifications
- Complete API coverage: health, info, detection endpoints

 Enhanced API Features:
- Detailed request/response models with validation
- Comprehensive error handling and status codes
- Professional API descriptions and examples
- Health monitoring with system metrics
- Model performance metrics display

 Developer Experience:
- Interactive API testing interface
- Professional documentation layout
- Easy startup with start_docs.py script
- Comprehensive endpoint documentation

 API Endpoints Documented:
- GET /api/v1/health - Health check with metrics
- GET /api/v1/info - Comprehensive API information
- POST /api/v1/detection/upload - File upload detection
- GET /api/v1/detection/hardcoded - Test image detection
- POST /api/v1/detection/base64 - Base64 image detection

Now provides professional API documentation interface matching enterprise standards
This commit is contained in:
Aherobo Ovie Victor
2025-07-12 07:37:01 +01:00
parent 1d93e4c438
commit 89517c541b
4 changed files with 584 additions and 8 deletions
+16 -3
View File
@@ -36,11 +36,24 @@ class MemoryModuleDetector:
def load_model(self):
"""Load the trained YOLOv8 model."""
try:
self.model = YOLO(self.model_path)
# Fix for PyTorch 2.6+ weights_only issue
import torch
# Use weights_only=False for compatibility
with torch.serialization.safe_globals(['ultralytics.nn.tasks.DetectionModel']):
self.model = YOLO(self.model_path)
print(f"Model loaded successfully from {self.model_path}")
except Exception as e:
print(f"Error loading model: {e}")
self.model = None
try:
# Fallback: try loading with weights_only=False
import torch
original_load = torch.load
torch.load = lambda *args, **kwargs: original_load(*args, **kwargs, weights_only=False)
self.model = YOLO(self.model_path)
torch.load = original_load
print(f"Model loaded successfully from {self.model_path} (fallback method)")
except Exception as e2:
print(f"Error loading model: {e2}")
self.model = None
def detect(self, image_path, conf_threshold=0.5, iou_threshold=0.45):
"""