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()