dataset-viewer / app.py
Omnibus's picture
Update app.py
495060a
import gradio as gr
import pandas as pd
import requests
import json
from datasets import load_dataset
from PIL import Image
#dataset = load_dataset("nlphuji/flickr30k", split="test[10:20]")
#print (dataset)
#headers = {"Authorization": f"Bearer {API_TOKEN}"}
def query1(fetch_url):
if fetch_url=="":
fetch_url = "nlphuji/flickr30k"
API_URL1 = f"https://datasets-server.huggingface.co/splits?dataset={fetch_url}"
response = requests.get(API_URL1)
json_obj=response.json()
config_box = []
split_box = []
for obj in json_obj:
print (obj)
if obj == "splits":
try:
for split in json_obj[obj]:
print (f'split: {split}')
out_config = split['config']
out_split = split['split']
print (out_config)
print (out_split)
config_box.append(out_config)
split_box.append(out_split)
except Exception as e:
print (e)
pass
#df = pd.DataFrame.from_dict(json_obj)
return json_obj,gr.update(choices=[c for c in config_box]),gr.update(choices=[s for s in split_box])
def query2(fetch_url,config="TEST",split="test",offset=0,length=10):
if fetch_url=="":
fetch_url = "nlphuji/flickr30k"
#offset=0
#length=10
API_URL2 = f"https://datasets-server.huggingface.co/rows?dataset={fetch_url}&config={config}&split={split}&offset={offset}&length={length}"
response = requests.get(API_URL2)
dictionary=response.json()
#print (len(dictionary))
lvl_1=[]
for key in dictionary:
lvl_1.append(key)
print (key)
return dictionary,gr.update(choices=[l for l in lvl_1])
def find_fn(lvl_1,lvl_2,fetch_url,config="TEST",split="test",offset=0,length=10):
#print(out_json['rows'])
#print (inp)
img_list=[]
out_json,_=query2(fetch_url,config,split,offset=10,length=20)
lvl_1=lvl_1.strip("[]")
lvl_2=lvl_2.strip('""').strip("''")
#print(inp)
cnt_lvl = ""
if lvl_2 != "":
ea_lvl_len = len(lvl_2)
print (ea_lvl_len)
for ea_lvl in lvl_2:
cnt_lvl = f'{cnt_lvl}[{ea_lvl}]'
for ea in out_json[f"{lvl_1}"]:
cnt_lvl=cnt_lvl.strip("[]")
#img_ea = ea['row']['image']['src']
img_list.append(ea[f"{cnt_lvl}"])
if lvl_2 == "":
img_list.append(out_json[lvl_1])
return img_list
def upd_drop(lvl_1=None,lvl_2=None,lvl_3=None,lvl_4=None,lvl_5=None,fetch_url="",config="TEST",split="test",offset=0,length=10):
out_json,_=query2(fetch_url,config,split,offset=10,length=20)
box_1=[]
box_2=[]
box_3=[]
box_4=[]
box_5=[]
out1=None
out2=None
out3=None
out4=None
print (f'lvl_1 ::: {lvl_1}')
print (f'lvl_2 ::: {lvl_2}')
print (f'lvl_3 ::: {lvl_3}')
print (f'lvl_4 ::: {lvl_4}')
print (f'lvl_5 ::: {lvl_5}')
out=[]
if lvl_1 == "rows":
lvl_src= out_json[lvl_1][0]
else:
lvl_src=out_json[lvl_1]
print (f"lvl_src:: {lvl_src}")
try:
if lvl_1 !=[]:
for ea in (lvl_src):
box_1.append(ea)
out= gr.update(choices = [m for m in box_1])
except Exception:
pass
try:
if lvl_2 !=[]:
for ea in (lvl_src[lvl_2]):
print (ea)
box_2.append(ea)
out= gr.update(choices = [m for m in box_2])
else:
pass
except Exception:
pass
try:
if lvl_3 !=[]:
for ea in (lvl_src[lvl_2][lvl_3]):
box_3.append(ea)
out= gr.update(choices = [m for m in box_3])
else:
pass
except Exception:
pass
try:
if lvl_4 !=[]:
for ea in (lvl_src[lvl_2][lvl_3][lvl_4]):
box_4.append(ea)
out= gr.update(choices = [m for m in box_4])
else:
pass
except Exception:
pass
return out
def find_items(lvl_1,lvl_2,lvl_3,lvl_4,lvl_5,fetch_url,config="TEST",split="test",offset=0,length=10):
out_json,_=query2(fetch_url,config,split,offset=10,length=20)
box_1=[]
box_2=[]
box_3=[]
box_4=[]
box_5=[]
print (f'lvl_1 ::: {lvl_1}')
print (f'lvl_2 ::: {lvl_2}')
print (f'lvl_3 ::: {lvl_3}')
print (f'lvl_4 ::: {lvl_4}')
print (f'lvl_5 ::: {lvl_5}')
if lvl_1 !=[] and lvl_1!=None:
for ea in (out_json[lvl_1]):
box_1.append(ea)
out = box_1
if lvl_2 !=[] and lvl_2!=None:
for ea in (out_json[lvl_1]):
box_2.append(ea[lvl_2])
out = box_2
if lvl_3 !=[] and lvl_3!=None:
for ea in (out_json[lvl_1]):
box_3.append(ea[lvl_2][lvl_3])
out = box_3
if lvl_4 !=[] and lvl_4!=None:
for ea in (out_json[lvl_1]):
box_4.append(ea[lvl_2][lvl_3][lvl_4])
out = box_4
if lvl_5 !=[] and lvl_5!=None:
for ea in (out_json[lvl_1]):
box_5.append(ea[lvl_2][lvl_3][lvl_4][lvl_5])
out = box_5
return out
def img_fn(inp):
img_box=[]
for img in inp:
#out = Image.open(inp)
img_box.append(img)
return img_box
with gr.Blocks() as app:
with gr.Box():
with gr.Row():
with gr.Column(scale=3):
with gr.Row():
data_set_url=gr.Textbox(label="Dataset (repo/name)")
fetch_btn=gr.Button()
with gr.Row():
config_set=gr.Dropdown(label="Config")
split_set=gr.Dropdown(label="Split")
#config_drop = gr.Dropdown(label="Config/Split", choices=[])
view_data=gr.Button(label="View")
with gr.Row():
lvl_1=gr.Dropdown(label="lvl_1")
lvl_2=gr.Dropdown(label="lvl_2")
lvl_3=gr.Dropdown(label="lvl_3")
lvl_4=gr.Dropdown(label="lvl_4")
lvl_5=gr.Dropdown(label="lvl_5")
find_btn=gr.Button("Search")
with gr.Tab("JSON"):
out_find = gr.JSON()
with gr.Tab("Gallery"):
gal_btn=gr.Button("Load Images")
out_gal = gr.Gallery(columns=8)
with gr.Column(scale=1):
out_json = gr.JSON()
lvl_1.change(upd_drop,[lvl_1,lvl_2,lvl_3,lvl_4,lvl_5,data_set_url,config_set,split_set],[lvl_2])
lvl_2.change(upd_drop,[lvl_1,lvl_2,lvl_3,lvl_4,lvl_5,data_set_url,config_set,split_set],[lvl_3])
lvl_3.change(upd_drop,[lvl_1,lvl_2,lvl_3,lvl_4,lvl_5,data_set_url,config_set,split_set],[lvl_4])
lvl_4.change(upd_drop,[lvl_1,lvl_2,lvl_3,lvl_4,lvl_5,data_set_url,config_set,split_set],[lvl_5])
find_btn.click(find_items,[lvl_1,lvl_2,lvl_3,lvl_4,lvl_5,data_set_url,config_set,split_set],out_find)
view_data.click(query2,[data_set_url,config_set,split_set],[out_find,lvl_1])
gal_btn.click(img_fn,out_find,out_gal)
#find_btn.click(find_fn,[lvl_1,lvl_2,data_set_url,config_set,split_set],[out_find])
fetch_btn.click(query1,data_set_url,[out_json,config_set,split_set])
app.launch()