Spaces:
Running
Running
import streamlit as st | |
import cv2 | |
import matplotlib.pyplot as pt | |
import numpy as np | |
from PIL import Image | |
import io | |
import requests | |
import base64 | |
from tempfile import NamedTemporaryFile | |
import logging | |
logging.basicConfig(filename="logfile.log", | |
format='%(asctime)s %(message)s', | |
filemode='w') | |
logger = logging.getLogger() | |
logger.setLevel(logging.DEBUG) | |
st.set_page_config(layout="wide") | |
st.title("Sketch Generator") | |
st.caption("Use high resolution image to get optimal results") | |
def verify_url(url): | |
try: | |
encoded_content = url.split(',')[1] | |
image_data = base64.b64decode(encoded_content) | |
image = Image.open(io.BytesIO(image_data)) | |
logger.info("Valid Base64 Url") | |
return True, image | |
except Exception as e: | |
logger.warning("Please Enter a valid Image url"+str(e)) | |
return False, None | |
def http_url_image(nk04200111): | |
try: | |
# Send an HTTP request to the URL | |
response = requests.get(nk04200111) | |
response.raise_for_status() # Raise an error for bad responses | |
# Open the image using PIL | |
image = Image.open(io.BytesIO(response.content)) | |
logger.info("Valid http Url") | |
return True, image | |
except Exception as e: | |
logger.warning("Please Enter a valid Image url"+str(e)) | |
return False, None | |
def process_image(url_string,validation): | |
try: | |
if validation=="http": | |
result,upload = http_url_image(url_string) | |
elif validation=="data": | |
result,upload = verify_url(url_string) | |
if result: | |
image_np = np.array(upload) | |
firstimg=cv2.cvtColor(image_np,cv2.COLOR_BGR2GRAY) | |
blurs=cv2.bitwise_not(firstimg) | |
secondimg=cv2.GaussianBlur(blurs, (21, 21),sigmaX=30, sigmaY=30) | |
finalimg = cv2.divide(firstimg, 255 - secondimg, scale=256) | |
column1,column2,column3,column4=st.columns([1,4,4,1]) | |
with column1: | |
pass | |
with column2: | |
st.image(upload, caption="Original Image",width=None, use_column_width=None, clamp=False, channels="RGB", output_format="auto") | |
with column3: | |
if finalimg is not None: | |
st.image(finalimg, caption="Final Image",width=None, use_column_width=None, clamp=False, channels="RGB", output_format="auto") | |
with column4: | |
pass | |
logger.info("Image was processed successfully") | |
else: | |
st.write(f"The URL {url_string} does not contain a valid image.") | |
logger.warning(f"The URL {url_string} does not contain a valid image.") | |
return finalimg | |
except Exception as e: | |
logger.error("Exception occured while processing image: "+str(e)) | |
def get_base64_data(data, filename): | |
try: | |
base64_data = base64.b64encode(data).decode() | |
download_link = f'<a href="data:application/octet-stream;base64,{base64_data}" download="{filename}">Download {filename}</a>' | |
logger.info("Download Link created successfully") | |
return download_link | |
except Exception as e: | |
logger.error("Unable to create download link"+str(e)) | |
def save_image(finalimg): | |
try: | |
NKIMAGES=Image.fromarray(finalimg) | |
buffer = io.BytesIO() | |
NKIMAGES.save(buffer, format="PNG") | |
logger.info("Image was converted successfully") | |
# Provide a link for the user to download the processed image | |
st.markdown(get_base64_data(buffer.getvalue(), "Final Image.png"), unsafe_allow_html=True) | |
except Exception as e: | |
logger.error("Image conversion failed"+str(e)) | |
def uploadfile(): | |
try: | |
firstimg=None | |
secondimg=None | |
finalimg=None | |
val=1 | |
selection=st.radio(" ", ["Enter Image Url:link:","Upload Image File:open_file_folder:"], index=None, disabled=False, horizontal=True, label_visibility="visible") | |
if selection=="Enter Image Url:link:": | |
cols1,cols2=st.columns([5,1]) | |
url_string=st.text_input(" ", type="default", placeholder="Enter the image Url", label_visibility="collapsed") | |
if st.button("Generate"): | |
if url_string !="" and url_string[:4]=="http": | |
finalimg=process_image(url_string,"http") | |
save_image(finalimg) | |
elif url_string !=""and url_string[:4]=="data": | |
finalimg=process_image(url_string,"data") | |
save_image(finalimg) | |
else: | |
val=2 | |
if val==2: | |
st.write("Enter a valid image url") | |
elif selection=="Upload Image File:open_file_folder:": | |
uploader=st.file_uploader("Upload the image here", type=None, accept_multiple_files=False, disabled=False, label_visibility="visible") | |
if uploader is None: | |
st.write("Please upload an image") | |
else: | |
upload=uploader.read() | |
if st.button("Generate"): | |
image_np = np.array(Image.open(io.BytesIO(upload))) | |
firstimg=cv2.cvtColor(image_np,cv2.COLOR_BGR2GRAY) | |
blurs=cv2.bitwise_not(firstimg) | |
secondimg=cv2.GaussianBlur(blurs, (21, 21),sigmaX=30, sigmaY=30) | |
finalimg = cv2.divide(firstimg, 255 - secondimg, scale=256) | |
column1,column2,column3,column4=st.columns([1,4,4,1]) | |
with column1: | |
pass | |
with column2: | |
st.image(upload, caption="Original Image", width=None, use_column_width=None, clamp=False, channels="RGB", output_format="auto") | |
with column3: | |
if finalimg is not None: | |
st.image(finalimg, caption="Final Image", width=None, use_column_width=None, clamp=False, channels="RGB", output_format="auto") | |
with column4: | |
pass | |
save_image(finalimg) | |
logger.info("Program ran successfully") | |
except Exception as e: | |
logger.error("Error occured in uploadfile"+str(e)) | |
if __name__=="__main__": | |
uploadfile() | |
footer="""<style> | |
a:link , a:visited{ | |
color: #0000EE; | |
background-color: transparent; | |
text-decoration: underline; | |
} | |
a:hover, a:active { | |
color: #551A8B; | |
background-color: transparent; | |
text-decoration: underline; | |
} | |
.footer { | |
position: fixed; | |
left: 0; | |
bottom: 0; | |
width: 100%; | |
height:6%; | |
background-color: rgba(0,0,0,10); | |
color: white; | |
text-align: center; | |
border-radius:2px; | |
} | |
</style> | |
<div class="footer"> | |
<p>Developed by <a style='display: block; text-align: center; text-decoration:none;' href="https://github.com/nandakumar1052" target="_blank">Nanda Kumar.T</a><p> | |
</div> | |
""" | |
st.markdown(footer,unsafe_allow_html=True) | |