Spaces:
Sleeping
Sleeping
import streamlit as st | |
from PIL import Image | |
from ocr_engine import extract_weight_from_image | |
import urllib.parse | |
st.set_page_config(page_title="βοΈ Auto Weight Logger", layout="centered") | |
st.title("βοΈ Auto Weight Logger") | |
# ------------------------------ | |
# β Setup session state for clearing | |
# ------------------------------ | |
if "reset" not in st.session_state: | |
st.session_state.reset = False | |
# ------------------------------ | |
# π If reset is active, clear and rerun once | |
# ------------------------------ | |
if st.session_state.reset: | |
st.session_state.reset = False # clear the flag | |
st.rerun() | |
# ------------------------------ | |
# π Clear Photo Button | |
# ------------------------------ | |
if st.button("π Clear Photo"): | |
st.session_state.reset = True | |
st.rerun() | |
# ------------------------------ | |
# π· Capture Image from Webcam | |
# ------------------------------ | |
img_data = st.camera_input("π· Capture the weight display") | |
if img_data: | |
st.success("β Image captured successfully!") | |
# β Optional: check file size | |
if len(img_data.getvalue()) > 5 * 1024 * 1024: | |
st.error("β Image too large (>5MB). Please try again.") | |
st.stop() | |
# Open and display image | |
image = Image.open(img_data) | |
st.image(image, caption="πΈ Snapshot", use_column_width=True) | |
# -------------------------- | |
# π§ Extract weight via OCR | |
# -------------------------- | |
with st.spinner("π Extracting weight..."): | |
weight, confidence = extract_weight_from_image(image) | |
st.write(f"π οΈ DEBUG: weight = {weight}, confidence = {confidence}") | |
# -------------------------- | |
# β Retry if confidence low | |
# -------------------------- | |
if not weight or confidence < 80: | |
st.error(f"β οΈ OCR confidence too low ({int(confidence)}%). Please retake the image.") | |
if st.button("π Retry"): | |
st.session_state.reset = True | |
st.rerun() | |
st.stop() | |
# -------------------------- | |
# β Success β show result | |
# -------------------------- | |
st.success(f"β Detected Weight: {weight} g (Confidence: {int(confidence)}%)") | |
# Salesforce parameters | |
device_id = "BAL-001" | |
image_url = "" # Optional: set if you host the image | |
encoded_weight = urllib.parse.quote(str(weight)) | |
encoded_device = urllib.parse.quote(device_id) | |
encoded_image_url = urllib.parse.quote(image_url) | |
# β Salesforce VF Page URL | |
salesforce_url = ( | |
"https://autoweightlogger-dev-ed.my.salesforce-sites.com/" | |
f"weight_logger_page?WeightInput={encoded_weight}&DeviceID={encoded_device}&ImageURL={encoded_image_url}" | |
) | |
# -------------------------- | |
# π Display Salesforce link | |
# -------------------------- | |
st.markdown("### π€ Send to Salesforce") | |
st.markdown(f"[β Click here to confirm and log in Salesforce]({salesforce_url})", unsafe_allow_html=True) | |