import json import gradio as gr import os from PIL import Image import plotly.graph_objects as go import plotly.express as px clusters_12 = json.load(open("clusters/id_all_blip_clusters_12.json")) clusters_24 = json.load(open("clusters/id_all_blip_clusters_24.json")) clusters_48 = json.load(open("clusters/id_all_blip_clusters_48.json")) clusters_by_size = { 12: clusters_12, 24: clusters_24, 48: clusters_48, } def show_cluster(cl_id, num_clusters): cl_dct = clusters_by_size[num_clusters][cl_id] images = [] for i in range(6): img_path = "/".join([st.replace("/", "") for st in cl_dct['img_path_list'][i].split("//")][3:]) images.append((Image.open(os.path.join("identities-images", img_path)), "_".join([img_path.split("/")[0], img_path.split("/")[-1]]).replace('Photo_portrait_of_an_','').replace('Photo_portrait_of_a_','').replace('SD_v2_random_seeds_identity_','(SD v.2) ').replace('dataset-identities-dalle2_','(Dall-E 2) ').replace('SD_v1.4_random_seeds_identity_','(SD v.1.4) ').replace('_',' '))) model_fig = go.Figure() model_fig.add_trace(go.Bar(x=list(dict(cl_dct["labels_model"]).keys()), y=list(dict(cl_dct["labels_model"]).values()), marker_color=px.colors.qualitative.G10)) gender_fig = go.Figure() gender_fig.add_trace(go.Bar(x=list(dict(cl_dct["labels_gender"]).keys()), y=list(dict(cl_dct["labels_gender"]).values()), marker_color=px.colors.qualitative.G10)) ethnicity_fig = go.Figure() ethnicity_fig.add_trace(go.Bar(x=list(dict(cl_dct["labels_ethnicity"]).keys()), y=list(dict(cl_dct["labels_ethnicity"]).values()), marker_color=px.colors.qualitative.G10)) return (len(cl_dct['img_path_list']), gender_fig, #dict(cl_dct["labels_model"]), model_fig, ethnicity_fig, images) with gr.Blocks() as demo: gr.Markdown("# Cluster Explorer") gr.HTML("""⚠️ DISCLAIMER: the images displayed by this tool were generated by text-to-image models and may depict offensive stereotypes or contain explicit content.""") with gr.Row(): num_clusters = gr.Radio([12, 24, 48], label="number of clusters") cluster_id = gr.Number(precision=0, label="cluster id") button = gr.Button(value="Go") with gr.Column(): a = gr.Text(label="Number of items in cluster") gallery = gr.Gallery(label="Most representative images in cluster").style(grid=6) with gr.Row(): c = gr.Plot(label="Model makeup of cluster") b = gr.Plot(label="Gender label makeup of cluster") d = gr.Plot(label="Ethnicity label makeup of cluster") button.click(fn=show_cluster, inputs=[cluster_id, num_clusters], outputs=[a,b,c,d, gallery]) # demo = gr.Interface(fn=show_cluster, inputs=[gr.Slider(0, 50), gr.Radio([12, 24, 48])], outputs=["text", "text", "text", "text", gr.Gallery()]) demo.launch(debug=True)