demo-image-pyxelate / gradio_pyxelate.py
jaekookang
update callback
6172439
raw history blame
No virus
3.49 kB
'''Pyxelate Demo
- Based on https://huggingface.co/spaces/akhaliq/Pyxelate
- Credits to akhaliq
2021-12-16 first created for testing
'''
import os
from glob import glob
from loguru import logger
import gradio as gr
from skimage import io as sio
from pyxelate import Pyx, Pal
# ----------- Settings -----------
examples = sorted(glob(os.path.join('examples', '*.jpg')))
# ----------- Logging -----------
logger.add('app.log', mode='a')
logger.info('===== APP RESTARTED =====')
# ----------- Params -----------
DOWNSAMPLE_MIN = 1
DOWNSAMPLE_MAX = 10
COLOR_MIN = 1
COLOR_MAX = 20
PALETTE_CHOICES = [
'none', # if not chosen
'TELETEXT', 'BBC_MICRO', 'CGA_MODE4_PAL1', 'CGA_MODE5_PAL1',
'CGA_MODE4_PAL2', 'ZX_SPECTRUM', 'APPLE_II_LO', 'APPLE_II_HI',
'COMMODORE_64', 'GAMEBOY_COMBO_UP', 'GAMEBOY_COMBO_DOWN', 'GAMEBOY_COMBO_LEFT',
'GAMEBOY_COMBO_RIGHT', 'GAMEBOY_A_UP', 'GAMEBOY_A_DOWN', 'GAMEBOY_A_LEFT',
'GAMEBOY_A_RIGHT', 'GAMEBOY_B_UP', 'GAMEBOY_B_DOWN', 'GAMEBOY_B_LEFT',
'GAMEBOY_B_RIGHT', 'GAMEBOY_ORIGINAL', 'GAMEBOY_POCKET', 'GAMEBOY_VIRTUALBOY',
'MICROSOFT_WINDOWS_16', 'MICROSOFT_WINDOWS_20', 'MICROSOFT_WINDOWS_PAINT',
'PICO_8', 'MSX', 'MONO_OBRADINN_IBM', 'MONO_OBRADINN_MAC', 'MONO_BJG', 'MONO_BW',
'MONO_PHOSPHOR_AMBER', 'MONO_PHOSPHOR_LTAMBER', 'MONO_PHOSPHOR_GREEN1',
'MONO_PHOSPHOR_GREEN2', 'MONO_PHOSPHOR_GREEN3', 'MONO_PHOSPHOR_APPLE', 'APPLE_II_MONO',
'MONO_PHOSPHOR_APPLEC', 'APPLE_II_MONOC'
]
DITHER_CHOICES = ['none', 'naive', 'bayer', 'floyd', 'atkinson']
def predict(image_obj, sampling_param, color_param, palette_param, dither_param):
img = sio.imread(image_obj.name)
logger.info('--- image loaded')
if palette_param != 'none':
color_param = 'none'
palette = Pal[palette_param]
else:
palette = color_param
pyx = Pyx(factor=sampling_param, palette=palette, dither=dither_param)
pyx.fit(img)
img_out = pyx.transform(img)
logger.info('--- output generated')
return img_out
iface = gr.Interface(
predict,
title='์ด๋ฏธ์ง€๋ฅผ ํ”ฝ์…€ํ™” ์‹œํ‚ค๋Š” ๋ฐ๋ชจ์ž…๋‹ˆ๋‹ค.',
description='์ด๋ฏธ์ง€๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์ด๋ฏธ์ง€๋ฅผ ์Šค์ผ€์ผ๋งํ•˜๊ณ  ์ƒ‰๊ฐ์„ ๋ฐ”๊พธ์–ด ํ”ฝ์…€ํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.',
inputs=[
gr.inputs.Image(label='์ธํ’‹ ์ด๋ฏธ์ง€๋ฅผ ์ค€๋น„ํ•ด์ฃผ์„ธ์š”', type='file'),
gr.inputs.Slider(label='๋‹ค์šด์ƒ˜ํ”Œํ•  ํฌ๊ธฐ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” (ํด์ˆ˜๋ก ํ”ฝ์…€ํฌ๊ธฐ๊ฐ€ ์ปค์ง = ์ €ํ™”์งˆ)',
minimum=DOWNSAMPLE_MIN, maximum=DOWNSAMPLE_MAX, step=1, default=5),
gr.inputs.Slider(label='์‚ฌ์šฉํ•  ์ƒ‰๊น”์˜ ๊ฐœ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” (์„ ํƒ ์‹œ ์•„๋ž˜ ํŒ”๋ ˆํŠธ ์„ค์ •์€ "none"์œผ๋กœ ํ•ด์ฃผ์„ธ์š”)',
minimum=DOWNSAMPLE_MIN, maximum=DOWNSAMPLE_MAX, step=1, default=5),
gr.inputs.Dropdown(label='์ƒ‰๊น” ํŒ”๋ ˆํŠธ๋ฅผ ์„ ํƒํ•˜์„ธ์š” (์„ ํƒ ์‹œ ์œ„์˜ ์ƒ‰๊น” ๊ฐœ์ˆ˜๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค)',
choices=PALETTE_CHOICES, default='none', type='value'),
gr.inputs.Dropdown(label='๊ฒฐ๊ณผ ์ด๋ฏธ์ง€์˜ ๋ถ€๋“œ๋Ÿฌ์›€ ์ •๋„๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค ("dithering")',
choices=DITHER_CHOICES, default='none', type='value'),
],
outputs=[
gr.outputs.Image(label='๊ฒฐ๊ณผ ์ด๋ฏธ์ง€ ์ž…๋‹ˆ๋‹ค')
],
examples=examples,
enable_queue=True,
article='<p style="text-align:center">Credits to <a href="https://github.com/sedthh/pyxelate">GitHub</a></p>',
)
iface.launch(debug=True)