File size: 7,086 Bytes
7930e1d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# import gradio as gr
# import ast
# import requests
#
# # Using Gradio Demos as API - This is Hot!
# API_URL_INITIAL = "https://ysharma-playground-ai-exploration.hf.space/run/initial_dataframe"
# API_URL_NEXT10 = "https://ysharma-playground-ai-exploration.hf.space/run/next_10_rows"
#
#
# # define inference function
# # First: Get initial images for the grid display
# def get_initial_images():
#     response = requests.post(API_URL_INITIAL, json={
#         "data": []
#     }).json()
#     # data = response["data"][0]['data'][0][0][:-1]
#     response_dict = response['data'][0]
#     return response_dict  # , [resp[0][:-1] for resp in response["data"][0]["data"]]
#
#
# # Second: Process response dictionary to get imges as hyperlinked image tags
# def process_response(response_dict):
#     return [resp[0][:-1] for resp in response_dict["data"]]
#
#
# response_dict = get_initial_images()
# initial = process_response(response_dict)
# initial_imgs = '<div style="display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(3, 1fr); grid-gap: 0; background-color: #fff; padding: 20px; box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);">\n' + "\n".join(
#     initial[:-1])
#
#
# # Third: Load more images for the grid
# def get_next10_images(response_dict, row_count):
#     row_count = int(row_count)
#     # print("(1)",type(response_dict))
#     # Convert the string to a dictionary
#     if isinstance(response_dict, dict) == False:
#         response_dict = ast.literal_eval(response_dict)
#     response = requests.post(API_URL_NEXT10, json={
#         "data": [response_dict, row_count]  # len(initial)-1
#     }).json()
#     row_count += 10
#     response_dict = response['data'][0]
#     # print("(2)",type(response))
#     # print("(3)",type(response['data'][0]))
#     next_set = [resp[0][:-1] for resp in response_dict["data"]]
#     next_set_images = '<div style="display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(3, 1fr); grid-gap: 0; background-color: #fff; padding: 20px; box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); ">\n' + "\n".join(
#         next_set[:-1])
#     return response_dict, row_count, next_set_images  # response['data'][0]
#
#
# # get_next10_images(response_dict=response_dict, row_count=9)
# # position: fixed; top: 0; left: 0; width: 100%; background-color: #fff; padding: 20px; box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
#
# # Defining the Blocks layout
# with gr.Blocks(css="""#img_search img {width: 100%; height: 100%; object-fit: cover;}""") as demo:
#     gr.HTML(value="top of page", elem_id="top", visible=False)
#     gr.HTML("""<div style="text-align: center; max-width: 700px; margin: 0 auto;">
#         <div
#         style="
#             display: inline-flex;
#             align-items: center;
#             gap: 0.8rem;
#             font-size: 1.75rem;
#         "
#         >
#         <h1 style="font-weight: 900; margin-bottom: 7px; margin-top: 5px;">
#             Using Gradio Demos as API - 2 </h1><br></div>
#         <div><h4 style="font-weight: 500; margin-bottom: 7px; margin-top: 5px;">
#             Stream <a href="https://github.com/playgroundai/liked_images" target="_blank">PlaygroundAI Images</a> ina beautiful grid</h4><br>
#         </div>""")
#     # with gr.Accordion(label="Details about the working:", open=False, elem_id='accordion'):
#     #     gr.HTML("""
#     #     <p style="margin-bottom: 10px; font-size: 90%"><br>
#     #     ▶️Do you see the "view api" link located in the footer of this application?
#     #     By clicking on this link, a page will open which provides documentation on the REST API that developers can use to query the Interface function / Block events.<br>
#     #     ▶️In this demo, I am making such an API request to the <a href="https://huggingface.co/spaces/ysharma/Playground_AI_Exploration" target="_blank">Playground_AI_Exploration</a> Space.<br>
#     #     ▶️I am exposing an API endpoint of this Gradio app as well. This can easily be done by one line of code, just set the api_name parameter of the event listener.
#     #     </p></div>""")
#
#     with gr.Column():  # (elem_id = "col-container"):
#         b1 = gr.Button("Load More Images").style(full_width=False)
#         df = gr.Textbox(visible=False, elem_id='dataframe', value=response_dict)
#         row_count = gr.Number(visible=False, value=19)
#         img_search = gr.HTML(label='Images from PlaygroundAI dataset', elem_id="img_search",
#                              value=initial_imgs)  # initial[:-1] )
#
#     gr.HTML('''<center><a href="https://huggingface.co/spaces/ysharma/Stream_PlaygroundAI_Images?duplicate=true"><img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a></center>
#     #     </p></div>''')
#     b1.click(get_next10_images, [df, row_count], [df, row_count, img_search], api_name="load_playgroundai_images")
#
# demo.launch(debug=True)

import pandas as pd
import gradio as gr

df = pd.read_csv("/Users/yonatanbitton/Downloads/whoops_dataset.csv")
df['image_url'] = df['image_url'].apply(lambda x: '<a href= "' + str(x) + '" target="_blank"> <img src= "' + str(
    x) + '"/> </a>')
df['designer_explanation'] = df['designer_explanation'].apply(lambda x: str(x))
df['selected_caption'] = df['selected_caption'].apply(lambda x: str(x))
df['crowd_captions'] = df['crowd_captions'].apply(lambda x: str(x))
df['crowd_underspecified_captions'] = df['crowd_underspecified_captions'].apply(lambda x: str(x))
df['question_answering_pairs'] = df['question_answering_pairs'].apply(lambda x: str(x))
df['commonsense_category'] = df['commonsense_category'].apply(lambda x: str(x))
df['image_id'] = df['image_id'].apply(lambda x: str(x))
df['image_designer'] = df['image_designer'].apply(lambda x: str(x))
df = df[['image_url', 'designer_explanation', 'selected_caption', 'crowd_captions', 'crowd_underspecified_captions',
         'question_answering_pairs', 'commonsense_category', 'image_id', 'image_designer']]

LINES_NUMBER = 20

def display_df():
    df_images = df.head(LINES_NUMBER)
    return df_images


def display_next10(dataframe, end):
    start = (end or dataframe.index[-1]) + 1
    end = start + (LINES_NUMBER-1)
    df_images = df.loc[start:end]
    return df_images, end


# Gradio Blocks
with gr.Blocks() as demo:
    gr.Markdown("<h1><center>WHOOPS! Dataset Viewer</center></h1>")

    with gr.Row():
        num_end = gr.Number(visible=False)
        b1 = gr.Button("Get Initial dataframe")
        b2 = gr.Button("Next 10 Rows")

    with gr.Row():
        out_dataframe = gr.Dataframe(wrap=True, max_rows=LINES_NUMBER, overflow_row_behaviour="paginate",
                                     datatype=["markdown", "markdown", "str", "str", "str", "str", "str", "str","str","str"],
                                     interactive=False)

    b1.click(fn=display_df, outputs=out_dataframe, api_name="initial_dataframe")
    b2.click(fn=display_next10, inputs=[out_dataframe, num_end], outputs=[out_dataframe, num_end],
             api_name="next_10_rows")

demo.launch(debug=True, show_error=True)