import os import shutil import json import random from pathlib import Path # Paths BASE_DIR = Path("Convolve/photo/voxceleb_data") AUDIO_SRC_DIR = BASE_DIR / "indian_celebs_audio (1)" FACES_SRC_DIR = BASE_DIR # The _local folders are directly in BASE_DIR # Rich Metadata Generators RELATIONS = ["Friend", "Colleague", "Mentor", "Acquaintance", "Family", "Rival", "Partner"] MEMORIES = [ "Met at a tech conference in Mumbai.", "Collaborated on a creative project in 2024.", "Shared a coffee and discussed future of AI.", "Went to the same university.", "Worked together on a film set.", "Met during a charity event.", "Regular tennis partner on weekends.", "Discussed philosophy during a long flight.", "Childhood neighbor from Delhi." ] def normalize_name(folder_name): # Removes _local, _idXXXX name = folder_name.replace("_local", "") if "_id" in name: name = name.split("_id")[0] return name def merge_data(): print("🚀 Starting Data Merge & Enrichment...") # Track all unique persons persons = set() # 1. Scan Face Folders face_folders = [f for f in FACES_SRC_DIR.iterdir() if f.is_dir() and "_local" in f.name] for f in face_folders: persons.add(normalize_name(f.name)) # 2. Scan Audio Folders if AUDIO_SRC_DIR.exists(): audio_folders = [f for f in AUDIO_SRC_DIR.iterdir() if f.is_dir()] for f in audio_folders: persons.add(normalize_name(f.name)) else: print("⚠️ Audio directory not found!") audio_folders = [] print(f"👥 Found {len(persons)} unique persons.") # 3. Create Unified Folders for p_name in persons: target_dir = BASE_DIR / p_name target_dir.mkdir(exist_ok=True) print(f"Processing {p_name}...") # Merge Face Data face_src = BASE_DIR / f"{p_name}_local" if face_src.exists(): for item in face_src.iterdir(): if item.suffix.lower() in ['.jpg', '.jpeg', '.png']: shutil.copy2(item, target_dir / item.name) # Remove old folder? Or keep backup? User said "proceed now", implies robust structure. # I'll keep old for safety for now, or delete if name collision isn't issue. # Actually, renaming might be cleaner? # copy is safer. # Merge Audio Data # Audio folder name might be p_name + "_idXXXX" # Find matching folder in AUDIO_SRC_DIR matching_audio = [f for f in audio_folders if normalize_name(f.name) == p_name] if matching_audio: a_src = matching_audio[0] # Take first match for item in a_src.iterdir(): if item.suffix.lower() == '.wav': shutil.copy2(item, target_dir / item.name) # Generate Rich Metadata metadata = { "name": p_name.replace("_", " "), "id": p_name, # Simple ID "relation": random.choice(RELATIONS), "summary": random.choice(MEMORIES), "context": { "last_seen": "2025-12-01", "notes": f"Generated profile for {p_name}" } } # Save Metadata with open(target_dir / "metadata.json", "w") as f: json.dump(metadata, f, indent=4) print("✨ Merge Complete. Data structured.") if __name__ == "__main__": merge_data()