File size: 3,362 Bytes
5ce695c
bb2ae93
5ce695c
 
 
0d30669
5ce695c
 
b360817
a638ce0
56d62a9
5ce695c
b360817
a638ce0
84d90da
5ce695c
2877d69
 
94ec9ca
 
5ce695c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dfe5fc6
 
 
0d30669
5ce695c
 
 
0d30669
5ce695c
 
499f2d6
 
 
8c1382e
2cd6b7d
 
0d30669
dfe5fc6
5ce695c
 
bea81d8
3d80d6c
085caab
0d30669
5ce695c
 
0d30669
 
 
 
5ce695c
0d30669
5ce695c
ee8e8e4
8c1382e
dfe5fc6
 
 
 
 
 
 
 
efcd777
 
 
 
 
 
 
0d30669
5ce695c
 
 
dfe5fc6
5ce695c
0d30669
5ce695c
 
 
 
 
0d30669
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
import gradio as gr
from datasets import load_dataset, Dataset
from PIL import Image
import io
import base64
import json 
from graph_visualization import visualize_graph

# branch_name = "edges-sorted-ascending"
branch_name = "Sorted_edges"

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

print(dataset.info)

print(f'This is an example: {dataset[-5]}')

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"]))
    ]
    graph_data = {"nodes": transformed_nodes, "edges": transformed_edges}
    return graph_data

def display_example(index):
    example = dataset[index]
    img = example["image"]

    # Get image dimensions
    img_width, img_height = img.size
    
    # Prepare the graph data
    graph_data = {"nodes": example["nodes"], "edges": example["edges"]}
    transformed_graph_data = reshape_json_data_to_fit_visualize_graph(graph_data)
    
    # Generate the graph visualization
    graph_html = visualize_graph(transformed_graph_data)

    # Modify the iframe to have a fixed height
    graph_html = graph_html.replace('height: 100vh;', 'height: 500px;')

    # Convert graph_data to a formatted JSON string
    json_data = json.dumps(transformed_graph_data, indent=2)
    
    return img, graph_html, json_data, transformed_graph_data, f"Width: {img_width}px, Height: {img_height}px"

def create_interface():
    with gr.Blocks() as demo:
    
        gr.Markdown("# Knowledge Graph Visualizer for the [Zaherrr/OOP_KG_Pyviz_Synthetic_Dataset](https://huggingface.co/datasets/Zaherrr/OOP_KG_Pyviz_Synthetic_Dataset) dataset")
        
        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", height=500)
            graph_output = gr.HTML(label="Knowledge Graph")

        with gr.Row():
            dimensions_output = gr.Textbox(
                label="Image Dimensions (pixels)",
                placeholder="Width and Height will appear here",
                interactive=False,
            )
            
        with gr.Row():
            json_output = gr.Code(language="json", label="Graph JSON Data")
            text_output = gr.Textbox(
                label="Graph Text Data",
                placeholder="Text data will appear here",
                interactive=False,
            )
        
        index_slider.change(
            fn=display_example,
            inputs=[index_slider],
            outputs=[image_output, graph_output, json_output, text_output, dimensions_output],
        )
    
    return demo

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