diff --git a/cloud/microwaveDishAnalyzer.py b/cloud/microwaveDishAnalyzer.py index 6713f2e..b55dde4 100644 --- a/cloud/microwaveDishAnalyzer.py +++ b/cloud/microwaveDishAnalyzer.py @@ -1,6 +1,11 @@ import cv2 import numpy as np from typing import Dict, Any, Optional +sys.path.insert(0, '..') +try: + from shared import config +except ImportError: + from ..shared import config class MicrowaveDishAnalyzer: @@ -42,6 +47,17 @@ class MicrowaveDishAnalyzer: largest_contour = max(contours, key=cv2.contourArea) area_pixels = cv2.contourArea(largest_contour) + # DEBUG CONDITION: Draw and save contour image if DEBUG_DISHANALYZER is set + if getattr(config, "DEBUG_DISHANALYZER", False): + annotated_image = image.copy() + # Draw the contour in red (BGR: 0, 0, 255) with thickness of 2 + cv2.drawContours(annotated_image, [largest_contour], -1, (0, 0, 255), 2) + + # Handle file extensions gracefully + analyzed_path = image_path.replace(".jpg", "_analyzed.jpg") + + cv2.imwrite(analyzed_path, annotated_image) + # 5. Convert pixels² to cm² using scale ratio squared area_cm2 = area_pixels * (self.cm_per_pixel ** 2) return float(area_cm2) @@ -64,13 +80,13 @@ class MicrowaveDishAnalyzer: return 0.85 # Default factor for plated meals def estimate_volume( - self, image_path: str, height_cm: float, food_label: str = "" + self, image_path: str, height_cm: float, food_label: str = "", config: Optional[Any] = None ) -> Dict[str, float]: """ Computes total physical volume in cm³ (mL). Volume = Area (cm²) * Height (cm) * Shape Factor """ - area_cm2 = self.calculate_surface_area_cm2(image_path) + area_cm2 = self.calculate_surface_area_cm2(image_path, config=config) k_shape = self._get_shape_factor(food_label) volume_cm3 = area_cm2 * height_cm * k_shape