File size: 2,248 Bytes
5ce695c
3c8406a
5ce695c
 
 
 
 
 
 
 
3c8406a
02ad0d2
5ce695c
84d90da
5ce695c
27dfad9
5ce695c
02ad0d2
 
5ce695c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from datasets import load_dataset
from PIL import Image
import io
import base64
import json

from graph_visualization import visualize_graph

# Load the dataset
dataset = load_dataset(
    "Zaherrr/OOP_KG_Dataset", split='train'
)
print(f'This is the dataset: {dataset}')

dataset = dataset['_data_files']

print(f'This is the train dataset: {dataset}')

def reshape_json_data_to_fit_visualize_graph(graph_data):

    nodes = graph_data["nodes"]
    edges = graph_data["edges"]

    transformed_nodes = [
        {"id": nodes["id"][idx], "label": nodes["label"][idx]}
        for idx in range(len(nodes["id"]))
    ]

    transformed_edges = [
        {"source": edges["source"][idx], "target": edges["target"][idx], "type": "->"}
        for idx in range(len(edges["source"]))
    ]

    # print(f"transformed nodes = {transformed_nodes}")

    graph_data = {"nodes": transformed_nodes, "edges": transformed_edges}

    return graph_data


def display_example(index):
    example = dataset[index]
    # print("This is the example: ")
    # print(example)
    # Get the image
    img = example["image"]

    # Prepare the graph data
    graph_data = {"nodes": example["nodes"], "edges": example["edges"]}

    # # Convert graph_data to JSON string
    # json_data = json.dumps(graph_data)
    transformed_graph_data = reshape_json_data_to_fit_visualize_graph(graph_data)

    # print(json_data)
    # Generate the graph visualization
    graph_html = visualize_graph(transformed_graph_data)

    return img, graph_html


def create_interface():
    with gr.Blocks() as demo:
        gr.Markdown("# Knowledge Graph Visualizer")

        with gr.Row():
            index_slider = gr.Slider(
                minimum=0, maximum=len(dataset) - 1, step=1, label="Example Index"
            )

        with gr.Row():
            image_output = gr.Image(type="pil", label="Image")
            graph_output = gr.HTML(label="Knowledge Graph")

        index_slider.change(
            fn=display_example,
            inputs=[index_slider],
            outputs=[image_output, graph_output],
        )

    return demo


# Create and launch the interface
if __name__ == "__main__":
    demo = create_interface()
    demo.launch(debug=True)