Pixelated-Game / app.py
NikhilJoson's picture
Update app.py
e9f8b4f verified
raw
history blame
3.57 kB
# Importing required libraries
import gradio as gr
from PIL import Image
import random
# 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)
# List of celebrities and folder paths
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",
"Aubrey Plaza": "./Celebs/AubreyPlaza.jpg",
"Oscar Isaac": "./Celebs/OscarIsaac.jpg",
"Kate Winslet": "./Celebs/KateWinslet.jpg",
"Ellen DeGeneres": "./Celebs/EllenDeGeneres.jpg"
}
# Initialize global variables
current_index = 0
current_pixel_size = 256
def clear_and_start(prev_size=256):
"""
Resets the current image and returns the first level of pixelation.
"""
global current_index, current_pixel_size
current_pixel_size = prev_size
celebrity = celeb_list[current_index]
image_path = celeb_folder[celebrity]
# Open and pixelate the image
img = Image.open(image_path)
result_img = pixelate(img, current_pixel_size)
return result_img, celebrity
def next_image(prev_size):
"""
Moves to the next celebrity and pixelates the image.
"""
global current_index, current_pixel_size
current_index = (current_index + 1) % len(celeb_list) # Loop through the list
current_pixel_size = prev_size
celebrity = celeb_list[current_index]
image_path = celeb_folder[celebrity]
# Open and pixelate the image
img = Image.open(image_path)
result_img = pixelate(img, current_pixel_size)
return result_img, celebrity
def progressive_clear(pixel_size):
"""
Progressively clears the pixelation of the current image.
"""
global current_pixel_size
current_pixel_size = max(pixel_size - 32, 2) # Decrease pixel size for better clarity
celebrity = celeb_list[current_index]
image_path = celeb_folder[celebrity]
# Open and pixelate the image
img = Image.open(image_path)
result_img = pixelate(img, current_pixel_size)
return result_img, celebrity
# Gradio App Layout
MARKDOWN = "## Guess the Celebrity before the Image Clears Up!"
with gr.Blocks() as demo:
gr.Markdown(MARKDOWN)
with gr.Row():
with gr.Column(scale=1):
pixelated_image = gr.Image(type='pil', label='Pixelated Image')
with gr.Accordion("Reveal Answer", open=False):
answer = gr.Textbox(label="Current Celebrity")
with gr.Column(scale=1):
Start_button = gr.Button(value='Start', variant='primary')
Clear_button = gr.Button(value='Clear More', variant='secondary')
Next_button = gr.Button(value='Next Image', variant='success')
# Define button actions
Start_button.click(fn=clear_and_start, inputs=[], outputs=[pixelated_image, answer])
Clear_button.click(fn=progressive_clear, inputs=[gr.Number(value=current_pixel_size)], outputs=[pixelated_image, answer])
Next_button.click(fn=next_image, inputs=[gr.Number(value=current_pixel_size)], outputs=[pixelated_image, answer])
demo.launch(debug=True, show_error=True)