import gradio as gr import cv2 import numpy as np from src.pipeline import run_pipeline from src.scene_graph import build_graph from src.visualization import visualize_graph from src.text_generation import graph_to_text def process_image(image): try: image_cv = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) relations = run_pipeline(image_cv) if not relations or len(relations) == 0: return image, None, "No relationships detected." G = build_graph(relations) fig = visualize_graph(G) caption = graph_to_text(relations) return image, fig, caption except Exception as e: print("Error:", e) return image, None, "Error processing image." demo = gr.Interface( fn=process_image, inputs=gr.Image(type="pil"), outputs=[ gr.Image(label="Input Image"), gr.Plot(label="Scene Graph"), gr.Textbox(label="Generated Description") ], title="Scene Graph Generator", description="Upload an image → Detect objects → Predict relationships → Generate scene graph + description", theme="soft" ) if __name__ == "__main__": demo.launch()