Spaces:
Build error
Build error
| import json | |
| import gradio as gr | |
| def process_metadata(file): | |
| # Read the uploaded JSON file | |
| with open(file.name, "r") as f: | |
| data = json.load(f) | |
| # First pass: collect all unique categories | |
| unique_categories = set() | |
| for item in data["media_items"]: | |
| for metadata in item["metadata_items"]: | |
| if metadata["type"] == "object_label": | |
| unique_categories.add(metadata["properties"]["category_name"]) | |
| # Create category mapping dynamically | |
| category_mapping = {cat: idx for idx, cat in enumerate(sorted(unique_categories))} | |
| # Create a formatted string of the mapping | |
| mapping_str = "\n".join([f"{cat}: {idx}" for cat, idx in category_mapping.items()]) | |
| results = [] | |
| # Process each media item | |
| for item in data["media_items"]: | |
| # Initialize lists for bboxes and categories | |
| bboxes = [] | |
| categories = [] | |
| # Process each metadata item | |
| for metadata in item["metadata_items"]: | |
| if metadata["type"] == "object_label": | |
| bbox = metadata["properties"]["bbox"] | |
| bboxes.append(bbox) | |
| category = category_mapping.get( | |
| metadata["properties"]["category_name"], 0 | |
| ) | |
| categories.append(category) | |
| # Create output format | |
| output = { | |
| "file_name": item["file_name"], | |
| "objects": {"bbox": bboxes, "category": categories}, | |
| } | |
| results.append(json.dumps(output)) | |
| # Return both results and mapping | |
| return "\n".join(results), mapping_str | |
| def save_text(text): | |
| # Create a temporary file to save the output | |
| temp_file = "metadata.jsonl" | |
| with open(temp_file, "w") as f: | |
| f.write(text) | |
| return temp_file | |
| # Create Gradio interface | |
| with gr.Blocks(title="VL-HF Annotations Converter") as iface: | |
| gr.Markdown("# VL-HF Annotations Converter") | |
| gr.Markdown( | |
| "Upload a JSON annotations file exported from Visual Layer and get a JSONL file to be used in Hugging Face AutoTrain." | |
| ) | |
| with gr.Row(): | |
| input_file = gr.File(label="Upload JSON file exported from Visual Layer") | |
| with gr.Row(): | |
| output_text = gr.Textbox(label="Converted JSONL output", lines=10, scale=3) | |
| mapping_text = gr.Textbox(label="Category Mapping", lines=10) | |
| with gr.Row(): | |
| download_btn = gr.DownloadButton( | |
| label="Download JSONL", value="metadata.jsonl", interactive=True | |
| ) | |
| # Connect the components | |
| output = input_file.change( | |
| fn=process_metadata, inputs=[input_file], outputs=[output_text, mapping_text] | |
| ).then( # Chain the save operation immediately after processing | |
| fn=save_text, inputs=[output_text], outputs=[download_btn] | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() | |