File size: 3,481 Bytes
e785be9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103

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()