File size: 3,050 Bytes
fb1a823 c41b38b ae762c2 82ae7fe 17e765d fb1a823 ae762c2 d54c470 51be189 c4b9b34 82ae7fe ae762c2 51be189 c4b9b34 51be189 be301b7 51be189 17e765d 51be189 be301b7 c4b9b34 17e765d 51be189 c4b9b34 51be189 ae762c2 51be189 17e765d 51be189 17e765d 51be189 ae762c2 51be189 ae762c2 51be189 ae762c2 51be189 ae762c2 51be189 ae762c2 51be189 ae762c2 51be189 ae762c2 51be189 ae762c2 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 75 76 77 78 79 80 |
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")
# State initialization
if "image_bytes" not in st.session_state:
st.session_state.image_bytes = 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())
# Input mode selector
st.radio("πΈ Select Image Input Method:", ["Camera", "Upload"], key="input_mode", horizontal=True)
# Clear/reset
if st.button("π Clear / Retake Photo"):
st.session_state.image_bytes = None
st.session_state.camera_key = str(uuid.uuid4())
# Get image input
if st.session_state.image_bytes is None:
uploaded_image = None
if st.session_state.input_mode == "Camera":
uploaded_image = st.camera_input("π· Capture the weight display", key=st.session_state.camera_key)
if uploaded_image is not None:
st.session_state.image_bytes = uploaded_image.getvalue()
elif st.session_state.input_mode == "Upload":
uploaded_image = st.file_uploader("π Upload image of weight display", type=["jpg", "jpeg", "png"])
if uploaded_image is not None:
st.session_state.image_bytes = uploaded_image.read()
# Process and OCR
if st.session_state.image_bytes:
try:
image = Image.open(io.BytesIO(st.session_state.image_bytes))
st.image(image, caption="πΈ Snapshot", use_column_width=True)
if len(st.session_state.image_bytes) > 5 * 1024 * 1024:
st.error("β Image too large (>5MB). Please try again.")
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)}%)")
device_id = "BAL-001"
image_url = ""
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)
if st.button("π Retake / Upload Another"):
st.session_state.image_bytes = None
st.session_state.camera_key = str(uuid.uuid4())
except Exception as e:
st.error("β Failed to load or process image.")
st.exception(e)
|