import streamlit as st from PIL import Image from ocr_engine import extract_weight_from_image import urllib.parse import uuid import io st.set_page_config(page_title="⚖️ Auto Weight Logger", layout="centered") st.title("⚖️ Auto Weight Logger") # Session state if "image_data" not in st.session_state: st.session_state.image_data = None if "input_mode" not in st.session_state: st.session_state.input_mode = "Camera" if "camera_key" not in st.session_state: st.session_state.camera_key = str(uuid.uuid4()) # Choose input method st.radio("📸 Select Image Input Method:", ["Camera", "Upload"], key="input_mode", horizontal=True) # Clear/reset image if st.button("🔁 Clear / Retake Photo"): st.session_state.image_data = None st.session_state.camera_key = str(uuid.uuid4()) # Get image input uploaded_image = None if st.session_state.image_data is None: if st.session_state.input_mode == "Camera": uploaded_image = st.camera_input("📷 Capture the weight display", key=st.session_state.camera_key) else: uploaded_image = st.file_uploader("📁 Upload an image of the weight display", type=["jpg", "jpeg", "png"]) if uploaded_image: st.session_state.image_data = uploaded_image # Process image if st.session_state.image_data: st.success("✅ Image received successfully!") # Convert to PIL image try: image_bytes = st.session_state.image_data.read() if hasattr(st.session_state.image_data, 'read') else st.session_state.image_data.getvalue() image = Image.open(io.BytesIO(image_bytes)) except Exception as e: st.error("❌ Failed to load image.") st.stop() st.image(image, caption="📸 Snapshot", use_column_width=True) # Size check if len(image_bytes) > 5 * 1024 * 1024: st.error("❌ Image too large (>5MB). Please upload a smaller image.") st.stop() # OCR Extraction with st.spinner("🔍 Extracting weight..."): weight, confidence = extract_weight_from_image(image) st.write(f"🛠️ DEBUG: weight = {weight}, confidence = {confidence}") if not weight or confidence < 80: st.error(f"⚠️ OCR confidence too low ({int(confidence)}%). Please try again.") else: st.success(f"✅ Detected Weight: {weight} g (Confidence: {int(confidence)}%)") # Generate Salesforce URL device_id = "BAL-001" image_url = "" # You can upload to S3 or Salesforce Files if needed salesforce_url = ( "https://autoweightlogger-dev-ed.my.salesforce-sites.com/" f"weight_logger_page?WeightInput={urllib.parse.quote(str(weight))}" f"&DeviceID={urllib.parse.quote(device_id)}&ImageURL={urllib.parse.quote(image_url)}" ) st.markdown("### 📤 Send to Salesforce") st.markdown(f"[✅ Click here to confirm and log in Salesforce]({salesforce_url})", unsafe_allow_html=True) # Retake or upload another if st.button("🔁 Retake / Upload Another"): st.session_state.image_data = None st.session_state.camera_key = str(uuid.uuid4())