import streamlit as st from PIL import Image, ImageDraw from streamlit_image_coordinates import streamlit_image_coordinates import numpy as np from datasets import load_dataset ds = load_dataset("Circularmachines/batch_indexing_machine_100_small_imgs", split="train") #st.set_page_config( # page_title="Streamlit Image Coordinates: Image Update", # page_icon="🎯", # layout="wide", #) #"# :dart: Streamlit Image Coordinates: Image Update" if "points" not in st.session_state: st.session_state["points"] = (200,200) if "img" not in st.session_state: st.session_state["img"] = 0 if "draw" not in st.session_state: st.session_state["draw"] = False def button_click(): st.session_state["img"]=np.random.randint(100) st.session_state["draw"] = False def find(): st.image(ds[st.session_state[0]]['image']) def get_ellipse_coords(point):# tuple[int, int]) -> tuple[int, int, int, int]): center = point radius = 16 return ( center[0] - radius, center[1] - radius, center[0] + radius, center[1] + radius, ) current_image=ds[st.session_state["img"]]['image'] draw = ImageDraw.Draw(current_image) if st.session_state["draw"]: # Draw an ellipse at each coordinate in points #for point in st.session_state["points"]: point=st.session_state["points"] coords = get_ellipse_coords(point) draw.rectangle(coords, outline="green",width=2) value = streamlit_image_coordinates(current_image, key="pil") if value is not None: point = value["x"], value["y"] if point != st.session_state["points"]: st.session_state["points"]=point st.session_state["draw"]=True st.experimental_rerun() st.button('Random frame', on_click=button_click) st.button('Find simalar parts', on_click=find) st.write(st.session_state["img"]) st.write(st.session_state["points"]) st.write(st.session_state["draw"]) #st.write(value["x"], value["y"]) #else: # st.write('Gohuhuhubye')