File size: 6,381 Bytes
ce2462d
 
 
 
1b8ecf8
ce2462d
 
 
 
2156ab9
ce2462d
 
 
 
 
 
 
 
 
 
 
a5617f1
1b8ecf8
 
ce2462d
 
 
2156ab9
1b8ecf8
 
ce2462d
 
1b8ecf8
 
 
 
ce2462d
 
 
 
 
2156ab9
1b8ecf8
 
ce2462d
 
1b8ecf8
 
8ee8a44
 
ce2462d
 
 
 
 
 
 
 
 
 
 
 
 
 
b8ff803
ce2462d
 
5f2c1c9
cd4a0ea
90edf13
ce2462d
 
 
 
 
 
 
 
 
53feb87
ce2462d
 
 
 
 
53feb87
ce2462d
 
 
 
 
 
 
 
 
 
 
 
 
 
176b059
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import gradio as gr
import random, os, shutil
from PIL import Image
import pandas as pd
import tempfile

def open_sd_ims(adj, group, seed):
    if group != '':
        if adj != '':
            prompt=adj+'_'+str(group).replace(' ','_')
            if os.path.isdir(prompt) == False:
                shutil.unpack_archive('zipped_images/stablediffusion/'+ prompt.replace(' ', '_') +'.zip', prompt, 'zip')
        else:
            prompt=group
            if os.path.isdir(prompt) == False:
                shutil.unpack_archive('zipped_images/stablediffusion/'+ prompt.replace(' ', '_') +'.zip', prompt, 'zip')
        imnames= os.listdir(prompt+'/Seed_'+ str(seed)+'/')
        images = [(Image.open(prompt+'/Seed_'+ str(seed)+'/'+name)) for name in imnames]
        return images[:9]
    
def open_ims(model, adj, group):
    seed = 48040
    with tempfile.TemporaryDirectory() as tmpdirname:
        print('created temporary directory', tmpdirname)
    if model == "Dall-E 2":
        if group != '':
            if adj != '':
                prompt=adj+'_'+str(group).replace(' ','_')
                if os.path.isdir(tmpdirname + '/' + model.replace(' ','').lower()+ '/'+ prompt) == False:
                    shutil.unpack_archive('zipped_images/'+ model.replace(' ','').lower()+ '/'+ prompt.replace(' ', '_') +'.zip', tmpdirname+ '/'+ model.replace(' ','').lower()+ '/'+ prompt, 'zip')
            else:
                prompt=group
                if os.path.isdir(tmpdirname + '/' + model.replace(' ','').lower()+ '/'+ prompt) == False:
                    shutil.unpack_archive('zipped_images/' + model.replace(' ','').lower() + '/'+ prompt.replace(' ', '_') +'.zip', tmpdirname + '/' + model.replace(' ','').lower()+ '/' + prompt, 'zip')
            imnames= os.listdir(tmpdirname + '/' + model.replace(' ','').lower()+ '/'+ prompt+'/')
            images = [(Image.open(tmpdirname + '/' + model.replace(' ','').lower()+ '/'+ prompt+'/'+name)).convert("RGB") for name in imnames]
            return images[:9]

    else:
        if group != '':
            if adj != '':
                prompt=adj+'_'+str(group).replace(' ','_')
                if os.path.isdir(tmpdirname + '/' + model.replace(' ','').lower()+ '/'+ prompt) == False:
                    shutil.unpack_archive('zipped_images/'+ model.replace(' ','').lower()+ '/'+ prompt.replace(' ', '_') +'.zip',  tmpdirname + '/' +model.replace(' ','').lower()+ '/'+ prompt, 'zip')
            else:
                prompt=group
                if os.path.isdir(tmpdirname + '/' + model.replace(' ','').lower()+ '/'+ prompt) == False:
                    shutil.unpack_archive('zipped_images/' + model.replace(' ','').lower() +  '/'+  prompt.replace(' ', '_') +'.zip', tmpdirname + '/' + model.replace(' ','').lower()+'/'+ prompt, 'zip')
            imnames= os.listdir(tmpdirname + '/' + model.replace(' ','').lower()+ '/'+ prompt+'/'+'Seed_'+ str(seed)+'/')
            images = [(Image.open(tmpdirname + '/' + model.replace(' ','').lower()+ '/'+ prompt +'/'+'Seed_'+ str(seed)+'/'+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()])
models = ["Stable Diffusion 1.4", "Dall-E 2","Stable Diffusion 2"]

with gr.Blocks() as demo:
    gr.Markdown("# Diffusion Bias Explorer")
    gr.Markdown("## Choose from the prompts below to explore how the text-to-image models like [Stable Diffusion v1.4](https://huggingface.co/CompVis/stable-diffusion-v-1-4-original), [Stable Diffusion v.2](https://huggingface.co/stabilityai/stable-diffusion-2) and [DALLE-2](https://openai.com/dall-e-2/) represent different professions and adjectives")
#    gr.Markdown("Some of the images for Dall-E 2 are missing -- we are still in the process of generating them! If you get an 'error', please pick another prompt.")
#    seed_choice = gr.State(0)
#    seed_choice = 93109
#    print("Seed choice is: " + str(seed_choice))
    with gr.Row():
        with gr.Column():
            model1 = gr.Dropdown(models, label = "Choose a model to compare results", value = models[0], interactive=True)
            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)
#           seed1= gr.Dropdown(seeds, label = "Choose a random seed to compare results", value = seeds[1], interactive=True)
            images1 = gr.Gallery(label="Images", columns=3, height="auto")
        with gr.Column():
            model2 = gr.Dropdown(models, label = "Choose a model to compare results", value = models[0], interactive=True)         
            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)
#           seed2= gr.Dropdown(seeds, label = "Choose a random seed to compare results", value= seeds[1], interactive=True)
            images2 = gr.Gallery(label="Images", columns=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, [model1, adj1,choice1], [images1])
    choice2.change(open_ims, [model2, adj2,choice2], [images2])
    adj1.change(open_ims, [model1, adj1, choice1], [images1])
    adj2.change(open_ims, [model2, adj2, choice2], [images2])
#    seed1.change(open_ims, [adj1,choice1,seed1], [images1])
#    seed2.change(open_ims, [adj2,choice2,seed2], [images2])

demo.launch()