File size: 2,518 Bytes
fb1a823 c41b38b 844e1ad fb1a823 7a171bf 7aa5221 45d41b6 a26d1e2 45d41b6 a26d1e2 44fd5b1 a26d1e2 e789af9 f352fb7 a26d1e2 45d41b6 fb1a823 09d2cb1 a26d1e2 b985185 09d2cb1 a26d1e2 09d2cb1 fa29632 1f1d6d4 fa29632 844e1ad aba4a6b a26d1e2 844e1ad f038ea6 7a171bf a26d1e2 844e1ad 09d2cb1 e789af9 a26d1e2 e789af9 844e1ad 09d2cb1 f352fb7 a26d1e2 844e1ad a26d1e2 f352fb7 844e1ad f352fb7 844e1ad aba4a6b 844e1ad |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
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 reset
# ------------------------------
if "reset" not in st.session_state:
st.session_state.reset = False
# π Handle reset if needed (immediately rerun and then show camera again)
if st.session_state.reset:
st.session_state.reset = False # Clear flag
st.rerun()
# π Clear / Retake button
if st.button("π Clear / Retake Photo"):
st.session_state.reset = True
st.rerun()
# ------------------------------
# π· Show camera input
# ------------------------------
img_data = st.camera_input("π· Capture the weight display")
# ------------------------------
# β
Handle image if captured
# ------------------------------
if img_data:
st.success("β
Image captured successfully!")
if len(img_data.getvalue()) > 5 * 1024 * 1024:
st.error("β Image too large (>5MB). Please try again.")
st.stop()
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}")
# β If low confidence, ask to retake
if not weight or confidence < 80:
st.error(f"β οΈ OCR confidence too low ({int(confidence)}%). Please retake the photo.")
if st.button("π Retake Photo"):
st.session_state.reset = True
st.rerun()
st.stop()
# β
Success
st.success(f"β
Detected Weight: {weight} g (Confidence: {int(confidence)}%)")
# Salesforce parameters
device_id = "BAL-001"
image_url = "" # Optional image hosting URL
encoded_weight = urllib.parse.quote(str(weight))
encoded_device = urllib.parse.quote(device_id)
encoded_image_url = urllib.parse.quote(image_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}"
)
st.markdown("### π€ Send to Salesforce")
st.markdown(f"[β
Click here to confirm and log in Salesforce]({salesforce_url})", unsafe_allow_html=True)
|