Auto-weight-logger2 / src /streamlit_app.py
Sanjayraju30's picture
Update src/streamlit_app.py
17e765d verified
raw
history blame
3.12 kB
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())