bsvaz
deploy
82c9f6d
Raw History Blame Contribute Delete
2.89 kB
"""
Module for handling example data management and processing.
Provides functionality to load and organize landmark examples.
"""
import json
import os
from collections import OrderedDict
# Define the desired category order
CATEGORY_ORDER = [
"Historical Sites & Monuments",
"Modern Architecture & Urban Landmarks",
"National Parks & Natural Wonders",
"Bridges",
"Other"
]
def load_categories():
"""Load landmark categories from JSON file in specified order."""
with open('landmark_categories.json') as f:
categories = json.load(f)
# Create an OrderedDict with categories in the specified order
ordered_categories = OrderedDict()
for category in CATEGORY_ORDER:
if category in categories:
ordered_categories[category] = categories[category]
return ordered_categories
def create_example_data(categories):
"""
Create organized example data for the interface.
Args:
categories (dict): Dictionary of landmark categories and their landmarks
Returns:
dict: Examples organized by category with format {category: [(image_path, label_info)]}
Raises:
ValueError: If categories is empty or not a dictionary
"""
if not isinstance(categories, dict) or not categories:
raise ValueError("Categories must be a non-empty dictionary")
category_examples = {}
def generate_filename_variations(landmark_name):
"""
Generate possible filename variations for landmark images.
Handles different naming conventions (spaces, underscores, etc.)
"""
base = landmark_name.lower().strip()
return [
base.replace(' ', '_'), # underscore_format
base.replace(' ', '-'), # dash-format
base.replace(' ', ''), # nocapsnospacesformat
'_'.join(base.split()) # underscore_all_words
]
# Process each category and its landmarks
for category, landmarks in categories.items():
category_examples[category] = []
# Find matching image files for each landmark
for landmark in landmarks:
if not isinstance(landmark, str):
continue
# Try different filename variations until a match is found
for filename in generate_filename_variations(landmark):
image_path = os.path.join("examples", f"{filename}.jpg")
if os.path.exists(image_path):
# Create label info dictionary for the example
label_info = {
"label": landmark,
"confidences": [(landmark, 1.0)]
}
category_examples[category].append([image_path, label_info])
break
return category_examples