File size: 5,154 Bytes
c428c06
c8710a3
0fe8471
 
 
 
 
 
 
 
 
 
 
 
 
 
14b0859
82feb26
 
 
 
afb8405
82feb26
14b0859
 
 
c8710a3
 
 
 
14b0859
 
 
 
 
82feb26
14b0859
82feb26
 
14b0859
82feb26
 
14b0859
82feb26
 
 
 
 
 
 
 
 
 
 
 
 
 
0fe8471
1960f8c
14b0859
0fe8471
 
 
14b0859
 
1960f8c
14b0859
1960f8c
14b0859
c8710a3
 
 
14b0859
 
 
 
afb8405
 
 
14b0859
 
 
 
 
 
1960f8c
 
 
 
14b0859
 
 
1960f8c
 
 
14b0859
 
0fe8471
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
import gradio as gr
from PIL import Image
import json

# Inicializa puntuaciones Elo y las guarda en un archivo
def load_elo_scores():
    try:
        with open("elo_scores.json", "r") as f:
            return json.load(f)
    except FileNotFoundError:
        # Si el archivo no existe, inicializamos las puntuaciones en 1000
        return {"DALL-E 3": 1000, "Midjourney 6.1": 1000, "Flux": 1000}

def save_elo_scores(elo_scores):
    with open("elo_scores.json", "w") as f:
        json.dump(elo_scores, f)

# Funci贸n para calcular la actualizaci贸n de Elo
def elo_update(winner_elo, loser_elo, k=32):
    expected_score_winner = 1 / (1 + 10 ** ((loser_elo - winner_elo) / 400))
    new_winner_elo = winner_elo + k * (1 - expected_score_winner)
    new_loser_elo = loser_elo + k * (0 - (1 - expected_score_winner))
    return new_winner_elo, new_loser_elo

# Cargar im谩genes predefinidas
def load_images():
    dalle3_image = Image.open("images/dalle3_image.png")
    midjourney_image = Image.open("images/midjourney_image.png")
    flux_image = Image.open("images/flux_image.png")
    return dalle3_image, midjourney_image, flux_image

# Actualizar el puntaje Elo basado en la votaci贸n
def update_elo(first, second, third):
    global elo_scores

    # Primera elecci贸n
    if first == "DALL-E 3":
        elo_scores["DALL-E 3"], elo_scores["Midjourney 6.1"] = elo_update(elo_scores["DALL-E 3"], elo_scores["Midjourney 6.1"])
        elo_scores["DALL-E 3"], elo_scores["Flux"] = elo_update(elo_scores["DALL-E 3"], elo_scores["Flux"])
    elif first == "Midjourney 6.1":
        elo_scores["Midjourney 6.1"], elo_scores["DALL-E 3"] = elo_update(elo_scores["Midjourney 6.1"], elo_scores["DALL-E 3"])
        elo_scores["Midjourney 6.1"], elo_scores["Flux"] = elo_update(elo_scores["Midjourney 6.1"], elo_scores["Flux"])
    elif first == "Flux":
        elo_scores["Flux"], elo_scores["DALL-E 3"] = elo_update(elo_scores["Flux"], elo_scores["DALL-E 3"])
        elo_scores["Flux"], elo_scores["Midjourney 6.1"] = elo_update(elo_scores["Flux"], elo_scores["Midjourney 6.1"])

    # Segunda elecci贸n
    if second == "DALL-E 3":
        elo_scores["DALL-E 3"], elo_scores["Midjourney 6.1"] = elo_update(elo_scores["DALL-E 3"], elo_scores["Midjourney 6.1"])
        elo_scores["DALL-E 3"], elo_scores["Flux"] = elo_update(elo_scores["DALL-E 3"], elo_scores["Flux"])
    elif second == "Midjourney 6.1":
        elo_scores["Midjourney 6.1"], elo_scores["DALL-E 3"] = elo_update(elo_scores["Midjourney 6.1"], elo_scores["DALL-E 3"])
        elo_scores["Midjourney 6.1"], elo_scores["Flux"] = elo_update(elo_scores["Midjourney 6.1"], elo_scores["Flux"])
    elif second == "Flux":
        elo_scores["Flux"], elo_scores["DALL-E 3"] = elo_update(elo_scores["Flux"], elo_scores["DALL-E 3"])
        elo_scores["Flux"], elo_scores["Midjourney 6.1"] = elo_update(elo_scores["Flux"], elo_scores["Midjourney 6.1"])

    save_elo_scores(elo_scores)
    return elo_scores["DALL-E 3"], elo_scores["Midjourney 6.1"], elo_scores["Flux"]

# Cargar las puntuaciones Elo
elo_scores = load_elo_scores()

# Interfaz Gradio
def vote(first, second, third):
    dalle3_score, midjourney_score, flux_score = update_elo(first, second, third)
    dalle3_image, midjourney_image, flux_image = load_images()
    return dalle3_image, midjourney_image, flux_image, f"DALL-E 3: {round(dalle3_score)}", f"Midjourney 6.1: {round(midjourney_score)}", f"Flux: {round(flux_score)}"

# Cargar im谩genes al inicio
dalle3_image, midjourney_image, flux_image = load_images()

with gr.Blocks() as demo:
    gr.Markdown("# Akelarre Generativo (DALL-E 3 vs MJ 6.1 vs Flux 1)")
    gr.Markdown("### Vota por la imagen generada por IA que prefieras. La puntuaci贸n Elo se actualizar谩 en tiempo real.")

    dalle3_img = gr.Image(value=dalle3_image, label="DALL-E 3", interactive=False, height=512, width=512)
    midjourney_img = gr.Image(value=midjourney_image, label="Midjourney 6.1", interactive=False, height=512, width=512)
    flux_img = gr.Image(value=flux_image, label="Flux", interactive=False, height=512, width=512)

    with gr.Row():
        first_choice = gr.Dropdown(["DALL-E 3", "Midjourney 6.1", "Flux"], label="Primera Favorita")
        second_choice = gr.Dropdown(["DALL-E 3", "Midjourney 6.1", "Flux"], label="Segunda Favorita")
        third_choice = gr.Dropdown(["DALL-E 3", "Midjourney 6.1", "Flux"], label="Tercera Favorita")
    
    with gr.Row():
        dalle3_score_text = gr.Textbox(value=f"DALL-E 3: {elo_scores['DALL-E 3']}", label="Puntuaci贸n DALL-E 3", interactive=False)
        midjourney_score_text = gr.Textbox(value=f"Midjourney 6.1: {elo_scores['Midjourney 6.1']}", label="Puntuaci贸n Midjourney 6.1", interactive=False)
        flux_score_text = gr.Textbox(value=f"Flux: {elo_scores['Flux']}", label="Puntuaci贸n Flux", interactive=False)

    vote_button = gr.Button("Votar y Actualizar")

    vote_button.click(vote, inputs=[first_choice, second_choice, third_choice], 
                      outputs=[dalle3_img, midjourney_img, flux_img, 
                               dalle3_score_text, midjourney_score_text, flux_score_text])

demo.launch()