import streamlit as st from PIL import Image import model import asyncio try: asyncio.get_running_loop() except RuntimeError: asyncio.set_event_loop(asyncio.new_event_loop()) image_url_input = st.text_input("Enter the image URL:") k_value_input = st.number_input("Enter k_value:", min_value=1, value=5) if st.button("Get Results"): results = model.get_top_k_results(image_url_input, int(k_value_input)) st.json({"results": [{"metadata": r["metadata"], "score": r["score"]} for r in results]}) if 'metadata_inputs' not in st.session_state: st.session_state['metadata_inputs'] = {} uploaded_files = st.file_uploader("Choose images...", type=["jpg", "jpeg", "png"], accept_multiple_files=True) if uploaded_files: for uploaded_file in uploaded_files: file_key = uploaded_file.name image = Image.open(uploaded_file) st.session_state['metadata_inputs'][file_key] = st.text_input( f"Metadata for {uploaded_file.name}", value=st.session_state['metadata_inputs'].get(file_key, ""), key=f"metadata_{file_key}" ) if st.button("Upload Images"): for uploaded_file in uploaded_files: metadata = st.session_state['metadata_inputs'][uploaded_file.name] if metadata: image = Image.open(uploaded_file) cropped_image = model.process_image_embedding(image) feature = model.get_image_features(cropped_image) model.save_image_in_index(feature, metadata) st.success("Images uploaded successfully.")