import gradio as gr import random, os from PIL import Image import pandas as pd def open_ims(adj, group): if group != '': if adj != '': if adj[0] in vowels: dirname='images/'+'Photo_portrait_of_an_'+ adj+'_'+ group.replace(' ','_')+'/Seed_'+ str(seed_choice)+'/' else: dirname='images/'+'Photo_portrait_of_a_'+ adj+ '_'+ group.replace(' ','_')+'/Seed_'+ str(seed_choice)+'/' else: if group[0] in vowels: dirname='images/'+'Photo_portrait_of_an_'+ group.replace(' ','_')+'/Seed_'+ str(seed_choice)+'/' else: dirname='images/'+'Photo_portrait_of_a_'+ group.replace(' ','_')+'/Seed_'+ str(seed_choice)+'/' imnames= os.listdir(dirname) images = [(Image.open(dirname+name)) for name in imnames] return images[:9] vowels = ["a","e","i","o","u"] prompts = pd.read_csv('promptsadjectives.csv') seeds = [46267, 48040, 51237, 54325, 60884, 64830, 67031, 72935, 92118, 93109] m_adjectives = prompts['Masc-adj'].tolist()[:10] f_adjectives = prompts['Fem-adj'].tolist()[:10] adjectives = sorted(m_adjectives+f_adjectives) #adjectives = ['attractive','strong'] adjectives.insert(0, '') professions = sorted([p.lower() for p in prompts['Occupation-Noun'].tolist()]) with gr.Blocks() as demo: gr.Markdown("# Stable Diffusion Explorer") gr.Markdown("## Choose from the prompts below to explore how the Stable Diffusion model represents different professions and adjectives") seed_choice = gr.State(0) seed_choice = 93109 print("Seed choice is: " + str(seed_choice)) with gr.Row(): with gr.Column(): adj1 = gr.Dropdown(adjectives, label = "Choose a first adjective (or leave this blank!)", interactive=True) choice1 = gr.Dropdown(professions, label = "Choose a first group", interactive=True) images1 = gr.Gallery(label="Images").style(grid=[3], height="auto") with gr.Column(): adj2 = gr.Dropdown(adjectives, label = "Choose a second adjective (or leave this blank!)", interactive=True) choice2 = gr.Dropdown(professions, label = "Choose a second group", interactive=True) images2 = gr.Gallery(label="Images").style(grid=[3], height="auto") gr.Markdown("### [Research](http://gender-decoder.katmatfield.com/static/documents/Gaucher-Friesen-Kay-JPSP-Gendered-Wording-in-Job-ads.pdf) has shown that \ certain words are considered more masculine- or feminine-coded based on how appealing job descriptions containing these words \ seemed to male and female research participants and to what extent the participants felt that they 'belonged' in that occupation.") #demo.load(random_image, None, [images]) choice1.change(open_ims, [adj1,choice1], [images1]) choice2.change(open_ims, [adj2,choice2], [images2]) adj1.change(open_ims, [adj1,choice1], [images1]) adj2.change(open_ims, [adj2,choice2], [images2]) demo.launch()