omoi-ui-detector / config.py
makeitfr's picture
Upload config.py with huggingface_hub
b3ceaa1 verified
Raw
History Blame Contribute Delete
4.52 kB
"""
Path Configuration Module
Handles all path resolution for the OmniParser system.
Works on any machine regardless of installation location.
"""
import os
from pathlib import Path
import sys
# Get the project root dynamically
def get_project_root():
"""
Get the project root directory.
Works by finding the parent of OmniParser directory.
"""
# If this config is in project root, use that
config_file = Path(__file__).resolve()
# Look for OmniParser directory to determine project root
current_dir = config_file.parent
# Search up the directory tree for OmniParser or omoi-v2
for _ in range(5): # Search up to 5 levels
if (current_dir / 'OmniParser').exists():
return current_dir
if (current_dir / '.git').exists() and 'omoi' in str(current_dir).lower():
return current_dir
current_dir = current_dir.parent
# Fallback: assume omoi-v2 is in the parent of OmniParser
omniparser_dir = Path(__file__).parent.parent
if omniparser_dir.name == 'OmniParser':
return omniparser_dir.parent
# Last resort: return current working directory
return Path.cwd()
# Get all paths
PROJECT_ROOT = get_project_root()
OMNIPARSER_DIR = PROJECT_ROOT / 'OmniParser'
WEIGHTS_DIR = OMNIPARSER_DIR / 'weights'
ICON_DETECT_DIR = WEIGHTS_DIR / 'icon_detect'
ICON_CAPTION_DIR = WEIGHTS_DIR / 'icon_caption_florence'
# Data directories
DATA_DIR = PROJECT_ROOT / 'data'
CROPPED_IMAGES_DIR = PROJECT_ROOT / 'cropped_images'
TEMP_CROP_DIR = Path('/tmp') / 'omoi_cropped_images'
# Output directories
OUTPUT_DIR = PROJECT_ROOT / 'output'
# Create directories if they don't exist
for directory in [DATA_DIR, CROPPED_IMAGES_DIR, OUTPUT_DIR, TEMP_CROP_DIR]:
directory.mkdir(parents=True, exist_ok=True)
# ============ Model Paths ============
def get_icon_detect_model_path():
"""Get YOLOv8 icon detection model path"""
model_path = ICON_DETECT_DIR / 'model.pt'
if not model_path.exists():
raise FileNotFoundError(f"Icon detect model not found at: {model_path}")
return str(model_path)
def get_icon_caption_model_path():
"""Get Florence-2 caption model path (if it exists)"""
model_path = ICON_CAPTION_DIR / 'model.safetensors'
if model_path.exists():
return str(ICON_CAPTION_DIR)
return None
# ============ Configuration ============
def get_omniparser_config():
"""Get default OmniParser configuration"""
return {
'som_model_path': get_icon_detect_model_path(),
'caption_model_name': None, # Florence removed
'caption_model_path': get_icon_caption_model_path(),
'device': 'cpu',
'BOX_TRESHOLD': 0.05,
'save_cropped_images': True,
'cropped_images_dir': str(TEMP_CROP_DIR)
}
# ============ Path Resolution Functions ============
def resolve_path(path_str, base_dir=None):
"""
Resolve a path that could be relative or absolute.
Args:
path_str: Path string (relative or absolute)
base_dir: Base directory for relative paths (defaults to PROJECT_ROOT)
Returns:
Absolute path as string
"""
if base_dir is None:
base_dir = PROJECT_ROOT
path = Path(path_str)
# If already absolute, return as is
if path.is_absolute():
return str(path)
# Relative path: resolve from base directory
resolved = (Path(base_dir) / path).resolve()
return str(resolved)
def get_screenshot_path(filename='Screenshot2.png'):
"""Get path to a screenshot file"""
return str(DATA_DIR / filename)
def get_output_path(filename):
"""Get path to an output file"""
return str(OUTPUT_DIR / filename)
# ============ Print Configuration for Debugging ============
if __name__ == "__main__":
print("\n" + "="*70)
print("OmniParser Configuration")
print("="*70)
print(f"\nProject Root: {PROJECT_ROOT}")
print(f"OmniParser Dir: {OMNIPARSER_DIR}")
print(f"Weights Dir: {WEIGHTS_DIR}")
print(f"\n[Model Paths]")
print(f" Icon Detect: {get_icon_detect_model_path()}")
print(f" Caption Model: {get_icon_caption_model_path()}")
print(f"\n[Data Directories]")
print(f" Cropped Images: {CROPPED_IMAGES_DIR}")
print(f" Temp Crop: {TEMP_CROP_DIR}")
print(f" Output: {OUTPUT_DIR}")
print(f"\n[Configuration]")
config = get_omniparser_config()
for key, value in config.items():
print(f" {key}: {value}")
print("\n" + "="*70 + "\n")