Spaces:
Runtime error
Runtime error
File size: 4,021 Bytes
fadb92b | 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 | import json
def generate_combined_mapping(file_mapping_path, image_id_mapping_path, output_path):
"""
Generates a combined mapping file from an original filename mapping
and an image ID mapping.
Args:
file_mapping_path (str): Path to the text file mapping original filenames
to intermediate 6-digit IDs.
image_id_mapping_path (str): Path to the JSON file mapping intermediate
IDs to destination IDs.
output_path (str): Path where the new combined mapping file will be saved.
"""
# 1. Read test_file_mapping.txt
org_fn_to_intermediate_id = {}
try:
with open(file_mapping_path, "r") as f:
for line in f:
parts = line.strip().split()
if len(parts) == 2:
org_fn = parts[0]
# Convert the 6-digit string ID to an integer for lookup
intermediate_id_str = parts[1]
# Remove leading zeros and convert to int
intermediate_id = int(intermediate_id_str)
org_fn_to_intermediate_id[org_fn] = intermediate_id
except FileNotFoundError:
print(f"Error: The file '{file_mapping_path}' was not found.")
return
except Exception as e:
print(f"Error reading '{file_mapping_path}': {e}")
return
# 2. Read test_image_id_mapping.json
intermediate_id_to_dst_fn = {}
try:
with open(image_id_mapping_path, "r") as f:
image_id_data = json.load(f)
for key, value in image_id_data.items():
# Keys in JSON are strings, convert to int for consistency
intermediate_id_to_dst_fn[int(key)] = value
except FileNotFoundError:
print(f"Error: The file '{image_id_mapping_path}' was not found.")
return
except json.JSONDecodeError:
print(f"Error: Could not decode JSON from '{image_id_mapping_path}'. Please ensure it's valid JSON.")
return
except Exception as e:
print(f"Error reading '{image_id_mapping_path}': {e}")
return
# 3. Create the combined mapping and write to output file
combined_mappings = []
found_mappings_count = 0
for org_fn, intermediate_id in org_fn_to_intermediate_id.items():
if intermediate_id in intermediate_id_to_dst_fn:
dst_fn = intermediate_id_to_dst_fn[intermediate_id]
combined_mappings.append(f"{org_fn} {dst_fn}")
found_mappings_count += 1
else:
# Optionally, you can print a warning for IDs not found
print(f"Warning: Intermediate ID '{intermediate_id}' for '{org_fn}' not found in image ID mapping.")
try:
with open(output_path, "w") as f:
for mapping_line in combined_mappings:
f.write(mapping_line + "\n")
print(f"\nSuccessfully generated combined mapping to '{output_path}'.")
print(f"Total original filenames processed: {len(org_fn_to_intermediate_id)}")
print(f"Total combined mappings written: {found_mappings_count}")
except Exception as e:
print(f"Error writing to output file '{output_path}': {e}")
# Define file paths
file_mapping_path = "data/R2G_hr_dataset_processed/test_file_mapping.txt"
image_id_mapping_path = "data/R2G_hr_dataset_processed_v1/annotations/test_image_id_mapping.json"
output_mapping_path = "data/R2G_hr_dataset_processed_v1/annotations/test_combined_mapping.txt"
# Run the mapping function
generate_combined_mapping(file_mapping_path, image_id_mapping_path, output_mapping_path)
# You can optionally print the content of the generated file to verify
print("\n--- Content of combined_mapping.txt ---")
try:
with open(output_mapping_path, "r") as f:
print(f.read())
except FileNotFoundError:
print("Output file was not created.")
# Clean up dummy files (optional)
# os.remove(file_mapping_path)
# os.remove(image_id_mapping_path)
|