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("

IMAGE UPSCALER

", 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("

OR

", 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("
Created by Sandeep Patra
", unsafe_allow_html=True)