File size: 3,123 Bytes
fb1a823 c41b38b ae762c2 82ae7fe 17e765d fb1a823 ae762c2 d54c470 82ae7fe fec538c c4b9b34 82ae7fe ae762c2 17e765d c4b9b34 17e765d be301b7 17e765d be301b7 e9c0e22 c4b9b34 17e765d c4b9b34 17e765d c4b9b34 17e765d ae762c2 17e765d e9c0e22 c4b9b34 17e765d 82ae7fe ae762c2 17e765d ae762c2 17e765d ae762c2 c4b9b34 82ae7fe ae762c2 17e765d 82ae7fe 17e765d ae762c2 82ae7fe ae762c2 82ae7fe ae762c2 17e765d c4b9b34 82ae7fe |
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 81 82 83 84 85 86 |
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())
|