File size: 4,279 Bytes
b0afc19
 
 
 
 
 
 
 
a494deb
b0afc19
 
 
 
 
 
a494deb
b0afc19
 
 
 
 
 
 
5aab889
b0afc19
 
 
 
 
d7540cc
 
b0afc19
 
 
 
e5fbffb
b0afc19
5aab889
e5fbffb
b0afc19
 
 
 
 
 
 
 
 
 
 
 
 
 
fcf99b3
b0afc19
fcf99b3
b0afc19
 
 
 
 
 
6b4a66c
ef49bfe
b0afc19
ef49bfe
b0afc19
e97c8c1
b0afc19
 
 
 
 
ef49bfe
b0afc19
d7540cc
b0afc19
 
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
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()
  response_dict = response['data'][0]
  return response_dict  

#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)
    #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]
    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]

#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;">
            Streaming PlaygroundAI Images in a grid </h1><br></div>
        <div><h4 style="font-weight: 500; margin-bottom: 7px; margin-top: 5px;">
            Based on <a href="https://github.com/playgroundai/liked_images" target="_blank">PlaygroundAI Image dataset</a></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)