Shapepuzzle / app.py
MrJShen's picture
Update app.py
d65e81b
# app.py
import sys
import time
from io import StringIO
import streamlit as st
from PIL import Image, ImageDraw, ImageColor
from canvas import *
from streamlit_ace import st_ace
import extra_streamlit_components as stx
from streamlit_image_select import image_select
from sewar.full_ref import uqi
import numpy as np
# from sqlite3 import Connection
import datetime
from lines import *
from triangle import *
def get_manager():
return stx.CookieManager()
### Manage Cookies and ajs_state ####
#time.sleep(3)
#cookie_manager = get_manager()
#ajs_id = cookie_manager.get_all()["ajs_anonymous_id"]
date_reg = datetime.date.today().strftime("%d/%m/%Y")
st.session_state['timestamp'] = datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S")
#st.session_state['conn'] = get_connection("data_drawer.db")
#user_checked = check_value_id_user(st.session_state.conn, ajs_id).values[0][0] > 0
#if not user_checked:
# user_id = str(st.text_input("Welcome! please enter your username here:)"))
# values = (ajs_id, user_id, date_reg)
# insert_value_ajs_states (st.session_state.conn, values)
## Sidebar for color picker
with st.sidebar:
color = st.color_picker('color picker', '#00f900', key='l_c')
st.write(ImageColor.getrgb(color))
st.header("Shape Puzzles")
st.write("##")
st.divider()
st.markdown("###### Write your code here")
## Code input
code = st_ace(
language="python",
theme="tomorrow_night_bright",
keybinding="vscode",
font_size=14,
tab_size=4,
show_gutter=True,
min_lines=10,
key="ace",
)
st.divider()
target = image_select(
label="Select a target image",
images=[
'image/TrianglePolygon.png',
'image/TriangleHole.png',
"image/TriangleCrash.png",
'image/archillect.png',
'image/TriangleFox.png'
],
captions=["Iterative Polygon", "Infinite traps", "One Cut", "Archillect", "Red Fox"],
use_container_width = False
)
o1, o2 = st.columns(2)
if code:
ImageDraw.Draw(img).rectangle([(0, 0), (c_length,c_height)], fill = c_color, outline = c_outline, width=2)
redirected_output = sys.stdout = StringIO()
try:
exec(code)
result = str(redirected_output.getvalue())
st.code(result)
except Exception as e:
st.code(str(e))
st.write("##")
st.divider()
with o1:
st.markdown("##### Target Shape:")
target = Image.open(target)
t2 = target.resize((c_length,c_height))
ImageDraw.Draw(img_t).rectangle([(0, 0),
(c_length,c_height)],
fill = c_color,
outline = c_outline,
width=2)
img_t.paste(t2)
st.image(img_t)
st.session_state['imt'] = np.array(img_t)
with o2:
st.markdown("##### Output Shape")
st.image(img, caption='')
st.session_state['imo'] = np.array(img)
#### Measuring Similarity
sim = round(uqi(st.session_state['imt'],st.session_state['imo']),4)
st.write(f"Similarity Score: {sim}")