File size: 2,628 Bytes
fb1a823 c41b38b ae762c2 82ae7fe 17e765d fb1a823 ae762c2 d54c470 f970466 82ae7fe ae762c2 f970466 c4b9b34 f970466 17e765d f970466 17e765d f970466 be301b7 f970466 c4b9b34 f970466 ae762c2 f970466 17e765d f970466 51be189 17e765d f970466 51be189 ae762c2 51be189 ae762c2 51be189 ae762c2 51be189 ae762c2 f970466 51be189 f970466 ae762c2 51be189 ae762c2 51be189 ae762c2 51be189 f970466 51be189 |
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 |
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 for camera reload
if "camera_key" not in st.session_state:
st.session_state.camera_key = str(uuid.uuid4())
# Input method selector
input_method = st.radio("πΈ Select Input Method", ["Camera", "Upload"], horizontal=True)
# Clear button
if st.button("π Clear / Retake"):
st.session_state.camera_key = str(uuid.uuid4())
st.experimental_rerun()
image_bytes = None
image = None
# ----- CAMERA INPUT -----
if input_method == "Camera":
camera_image = st.camera_input("π· Capture the weight display", key=st.session_state.camera_key)
if camera_image is not None:
image_bytes = camera_image.getvalue()
# ----- FILE UPLOAD INPUT -----
elif input_method == "Upload":
uploaded_file = st.file_uploader("π Upload an image (JPG/PNG)", type=["jpg", "jpeg", "png"])
if uploaded_file is not None:
image_bytes = uploaded_file.read()
# ----- IMAGE PROCESSING -----
if image_bytes:
try:
image = Image.open(io.BytesIO(image_bytes))
st.image(image, caption="πΈ Snapshot", use_column_width=True)
if len(image_bytes) > 5 * 1024 * 1024:
st.error("β Image too large (>5MB). Please use a smaller one.")
st.stop()
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)}%)")
# Salesforce redirect link
device_id = "BAL-001"
image_url = "" # Optional
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)
except Exception as e:
st.error("β Failed to load or process the image.")
st.exception(e)
|