Spaces:
Runtime error
Runtime error
import streamlit as st | |
import asyncio | |
from PIL import Image | |
from app.upscale import ImageUpscaler | |
img_upscale = ImageUpscaler() | |
async def async_upscaler(image_stream, factor): | |
return await img_upscale.upscaler(target_img=image_stream, factor=factor, byte_stream=True) | |
def calculate_new_dimension(original_size, entered_size, dimension_type): | |
original_width, original_height = original_size | |
aspect_ratio = original_width / original_height | |
if dimension_type == 'width': | |
new_width = entered_size | |
new_height = round(new_width / aspect_ratio) | |
return new_width, new_height | |
else: | |
new_height = entered_size | |
new_width = round(new_height * aspect_ratio) | |
return new_width, new_height | |
def calculate_factor(original_size, target_size): | |
return target_size[0] / original_size[0], target_size[1] / original_size[1] | |
def main(): | |
if 'user_factor' not in st.session_state: | |
st.session_state.user_factor = None | |
password = st.text_input("Enter Password", type='password') | |
if password != '1bz@123': | |
st.stop() | |
cols = st.columns([3,5,2]) | |
logo_url = 'https://media.licdn.com/dms/image/D560BAQGQxI71sZ1vTQ/company-logo_200_200/0/1687829291546?e=1703721600&v=beta&t=5RnOK7-Ak8cj1EQose8HQHWUYXPXRpI-x2dnjGjUABg' | |
cols[0].image(logo_url, width=int(200 * 0.8)) | |
cols[1].markdown("<h1 style='text-align: left; color: black;'>IMAGE UPSCALER</h1>", unsafe_allow_html=True) | |
cols[1].markdown("This is a PoC application for upscaling images.") | |
cols[1].markdown("[onebyzero.ai](http://www.onebyzero.ai)", unsafe_allow_html=True) | |
uploaded_image = st.file_uploader('Upload target image (Required)', type=['jpeg', 'jpg', 'png']) | |
if uploaded_image is not None: | |
image = Image.open(uploaded_image) | |
Image_stream = img_upscale.pil2byte(image) | |
original_size = image.size | |
st.write(f"Original Image Resolution: {original_size[0]} x {original_size[1]}") | |
col1, mid_col, col2 = st.columns([3, 1, 3]) | |
with col1: | |
dimension_type = st.radio("Dimension Type:", ('width', 'height')) | |
entered_size = st.number_input("Enter Target Width or Height:", min_value=1, value=original_size[0]) | |
if st.button("Calculate Target Resolution"): | |
if dimension_type == 'width': | |
target_size = calculate_new_dimension(original_size, entered_size, 'width') | |
else: | |
target_size = calculate_new_dimension(original_size, entered_size, 'height') | |
st.write(f"Target Resolution: {target_size[0]} x {target_size[1]}") | |
factor_x, factor_y = calculate_factor(original_size, target_size) | |
st.session_state.user_factor = round(min(factor_x, factor_y), 2) | |
st.write(f"Calculated Upscaling Factor: {st.session_state.user_factor}") | |
with mid_col: | |
st.markdown("<h2 style='text-align: center;'>OR</h2>", unsafe_allow_html=True) | |
with col2: | |
factor_slider = st.slider('Choose Upscaling Factor:', min_value=1.0, max_value=10.0, value=1.0, step=0.5, format="") | |
st.write(f"Selected Upscaling Factor: {factor_slider}") | |
if st.button("Generate"): | |
factor = st.session_state.user_factor if st.session_state.user_factor is not None else factor_slider | |
with st.spinner('Generating images...'): | |
result_image_stream = asyncio.run(async_upscaler(Image_stream, factor)) | |
try: | |
print(type(result_image_stream)) | |
st.image(result_image_stream.getvalue()) | |
except Exception as e: | |
st.error(f"An error occurred during image upscaling: {e}") | |
if __name__ == "__main__": | |
main() | |
st.markdown(""" --- """) | |
st.markdown("<h6 style='text-align: left; color: grey;'>Created by <a href='mailto:[email protected]'>Sandeep Patra</a></h6>", unsafe_allow_html=True) | |