File size: 2,540 Bytes
680e8a6
 
 
c2058a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2aa8325
c2058a3
 
 
 
 
 
 
 
 
 
 
2aa8325
c2058a3
 
 
 
 
 
 
 
 
 
2aa8325
 
c2058a3
 
8836ad1
 
 
 
 
c2058a3
 
 
 
 
 
 
 
8836ad1
 
 
c2058a3
 
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
#Importing required libraries
import spaces
import gradio as gr
import random
from PIL import Image

# Define pixel sizes for different levels
pixel_sizes = [128, 96, 64, 32, 24, 16, 12, 8, 4, 2]
# Function to pixelate an image
def pixelate(image, pixel_size):
    # Reduce the image size
    small = image.resize((image.size[0] // pixel_size, image.size[1] // pixel_size), Image.Resampling.NEAREST)
    # Scale back to original size
    return small.resize(image.size, Image.Resampling.NEAREST)

# dictionary of photo name and url
celeb_list = ["Tom Cruise", "Jake Gyllenhal", "Natalie Portman", "Aubrey Plaza", "Oscar Isaac", "Kate Winslet", "Ellen DeGeneres"]
celeb_folder = {
    "Tom Cruise" : "./Celebs/TomCruise.jpeg",
    "Jake Gyllenhal"  : "./Celebs/JakeGyllenhal.jpg",
    "Natalie Portman" : "./Celebs/NataliePortman.png",
    "Kajol"   : "./Celebs/Kajol.png",
    "Oscar Isaac" : "./Celebs/OscarIsaac.jpg",
    "Nayanthara" : "./Celebs/Nayanthara.jpg",
    "Dhanush" : "./Celebs/Dhanush.jpg",    
}

curr_size = 256
def Clear(prev_size, photo=celeb_list[1], folder=celeb_folder, next=False):
    if next:
        index = celeb_list.index(photo) + 1
        photo = celeb_list[index]
        
    print(f"Processing {photo}")
    image_path = folder[photo]
    img = Image.open(BytesIO(image_path))    

    for curr_size in pixel_sizes:
        if curr_size<prev_size:
           return pixelate(img, curr_size), photo, curr_size


# # Display the pixelated images progressively
# for idx, img in enumerate(images):
#     plt.figure(figsize=(6, 6))
#     plt.imshow(img)
#     plt.axis("off")
#     plt.title(f"Guess the Portrait - Level {idx + 1}")
#     plt.show()


MARKDOWN = "Guess the Cartoon Character before the Image becomes fully clear"
with gr.Blocks(theme=gr.themes.Ocean()) as demo:
    gr.Markdown(MARKDOWN)

    Old_size = curr_size
    Actual_Answer = answer
    if_next=True

    with gr.Row():
        with gr.Column(scale=1):
            pixelated_image = gr.Image(type='pil', image_mode='RGB', label='Pixelated Image')
            with gr.Accordion("Answer", open=False):
                answer = gr.Textbox()

        Clear_button = gr.Button(value='Clear', variant='primary')
        Next_button = gr.Button(value='Next', variant='secondary')

    Clear_button.click(fn=Clear, inputs=[Old_size], outputs=[pixelated_image, answer, curr_size])
    Next_button.click(fn=Clear, inputs=[Old_size, Actual_Answer, if_next], outputs=[pixelated_image, answer, prev_size])

demo.launch(debug=False, show_error=True)