This commit integrates the backend API for fetching and updating report data. It also includes a normalization function to handle data consistency between the API and local storage. Co-authored-by: anthonymuncher <anthonymuncher@gmail.com>
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
import os
|
|
from app.services.ai_service import AIModelManager, AIService
|
|
import logging
|
|
import random
|
|
from typing import Tuple
|
|
|
|
logger = logging.getLogger(__name__)
|
|
logger.setLevel(logging.DEBUG)
|
|
|
|
# ----------------------
|
|
# Lazy-initialized AI service
|
|
# ----------------------
|
|
_ai_service: AIService = None
|
|
|
|
def init_ai_service() -> AIService:
|
|
"""Initializes the AI service if not already initialized."""
|
|
global _ai_service
|
|
if _ai_service is None:
|
|
logger.debug("Initializing AI service...")
|
|
try:
|
|
model_manager = AIModelManager()
|
|
_ai_service = AIService(model_manager)
|
|
logger.info("AI service ready.")
|
|
except Exception as e:
|
|
logger.warning(f"Failed to initialize AI service: {e}. Using mock service.")
|
|
# Create a mock AI service for now
|
|
_ai_service = MockAIService()
|
|
return _ai_service
|
|
|
|
def get_ai_service() -> AIService:
|
|
"""Returns the initialized AI service."""
|
|
return init_ai_service()
|
|
|
|
# Mock AI service for testing when models can't be loaded
|
|
class MockAIService:
|
|
def classify_category(self, image_path: str) -> str:
|
|
categories = ["pothole", "streetlight", "garbage", "signage", "drainage", "other"]
|
|
return random.choice(categories)
|
|
|
|
def detect_pothole_severity(self, image_path: str) -> Tuple[str, str]:
|
|
severities = ["High", "Medium", "Low"]
|
|
severity = random.choice(severities)
|
|
return severity, image_path # Return same path as annotated path
|