intelligent-pid / config.py
msIntui
Fix merge conflict in config.py
690b5e4
Raw
History Blame Contribute Delete
3.5 kB
from dataclasses import dataclass, field
from typing import List, Dict, Optional, Tuple, Union
import numpy as np
from base import BaseConfig
@dataclass
class ImageConfig(BaseConfig):
"""Configuration for global image-related settings"""
roi: Optional[np.ndarray] = field(default_factory=lambda: np.array([500, 500, 5300, 4000]))
mask_json_path: str = "./text_and_symbol_bboxes.json"
save_annotations: bool = True
annotation_style: Dict = field(default_factory=lambda: {
'bbox_color': (255, 0, 0),
'line_color': (0, 255, 0),
'text_color': (0, 0, 255),
'thickness': 2,
'font_scale': 0.6
})
@dataclass
class SymbolConfig:
"""Configuration for Symbol Detection"""
model_paths: Dict[str, str] = field(default_factory=lambda: {
"model1": "models/Intui_SDM_41.pt",
"model2": "models/Intui_SDM_20.pt"
})
# Multiple thresholds to test
confidence_thresholds: List[float] = field(default_factory=lambda: [0.1, 0.3, 0.5, 0.7, 0.9])
apply_preprocessing: bool = False
resize_image: bool = True
max_dimension: int = 1280
iou_threshold: float = 0.5
# Optional mapping from class_id to SymbolType
symbol_type_mapping: Dict[str, str] = field(default_factory=lambda: {
"valve": "VALVE",
"pump": "PUMP",
"sensor": "SENSOR"
})
@dataclass
class TagConfig(BaseConfig):
"""Configuration for Tag Detection with OCR"""
confidence_threshold: float = 0.5
iou_threshold: float = 0.4
ocr_engines: List[str] = field(default_factory=lambda: ['tesseract', 'easyocr', 'doctr'])
text_patterns: Dict[str, str] = field(default_factory=lambda: {
'Line_Number': r"\d{1,5}-[A-Z]{2,4}-\d{1,3}",
'Equipment_Tag': r"[A-Z]{1,3}-[A-Z0-9]{1,4}-\d{1,3}",
'Instrument_Tag': r"\d{2,3}-[A-Z]{2,4}-\d{2,3}",
'Valve_Number': r"[A-Z]{1,2}-\d{3}",
'Pipe_Size': r"\d{1,2}\"",
'Flow_Direction': r"FROM|TO",
'Service_Description': r"STEAM|WATER|AIR|GAS|DRAIN",
'Process_Instrument': r"\d{2,3}(?:-[A-Z]{2,3})?-\d{2,3}|[A-Z]{2,3}-\d{2,3}",
'Nozzle': r"N[0-9]{1,2}|MH",
'Pipe_Connector': r"[0-9]{1,5}|[A-Z]{1,2}[0-9]{2,5}"
})
tesseract_config: str = r'--oem 3 --psm 11'
easyocr_params: Dict = field(default_factory=lambda: {
'paragraph': False,
'height_ths': 2.0,
'width_ths': 2.0,
'contrast_ths': 0.2
})
@dataclass
class LineConfig(BaseConfig):
"""Configuration for Line Detection"""
threshold_distance: float = 10.0
expansion_factor: float = 1.1
@dataclass
class PointConfig(BaseConfig):
"""Configuration for Point Detection"""
threshold_distance: float = 10.0
@dataclass
class JunctionConfig(BaseConfig):
"""Configuration for Junction Detection"""
window_size: int = 21
radius: int = 5
angle_threshold_lb: float = 15.0
angle_threshold_ub: float = 75.0
expansion_factor: float = 1.1
mask_json_paths: List[str] = field(default_factory=list) # Now a list
roi: Optional[np.ndarray] = field(default_factory=lambda: np.array([300, 500, 7500, 7000]))
save_annotations: bool = True
annotation_style: Dict = None
def __post_init__(self):
self.annotation_style = self.annotation_style or {
'bbox_color': (255, 0, 0),
'line_color': (0, 255, 0),
'text_color': (0, 0, 255),
'thickness': 2,
'font_scale': 0.6
}