File size: 2,612 Bytes
fb1a823 c41b38b 17e765d 7be0446 fb1a823 7be0446 d54c470 7be0446 ae762c2 7be0446 17e765d 7be0446 51be189 7be0446 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 |
import streamlit as st
from PIL import Image
import io
import uuid
import urllib.parse
from ocr_engine import extract_weight_from_image # your OCR function
# Setup
st.set_page_config(page_title="βοΈ Auto Weight Logger", layout="centered")
st.title("βοΈ Auto Weight Logger")
# Camera refresh key
if "camera_key" not in st.session_state:
st.session_state.camera_key = str(uuid.uuid4())
# Input selector
input_mode = st.radio("πΈ Select Input Method", ["Camera", "Upload"], horizontal=True)
# Retake button
if st.button("π Clear / Retake"):
st.session_state.camera_key = str(uuid.uuid4())
st.experimental_rerun()
# Variables
image_bytes = None
image = None
# Camera mode
if input_mode == "Camera":
cam_photo = st.camera_input("π· Take a photo of the weight display", key=st.session_state.camera_key)
if cam_photo is not None:
image_bytes = cam_photo.getvalue()
# Upload mode
elif input_mode == "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()
# Show image and process
if image_bytes:
try:
image = Image.open(io.BytesIO(image_bytes))
st.image(image, caption="πΈ Preview", use_column_width=True)
if len(image_bytes) > 5 * 1024 * 1024:
st.error("β Image is too large (>5MB). Please use a smaller image.")
st.stop()
with st.spinner("π Extracting weight using OCR..."):
weight, confidence = extract_weight_from_image(image)
st.write(f"π οΈ DEBUG: Weight = {weight}, Confidence = {confidence}")
if not weight or confidence < 80:
st.error(f"β οΈ Low OCR confidence ({int(confidence)}%). Try again.")
else:
st.success(f"β
Detected Weight: {weight} g (Confidence: {int(confidence)}%)")
# Generate Salesforce URL
device_id = "BAL-001"
image_url = "" # optional if image storage is 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"[β
Confirm and Log in Salesforce]({salesforce_url})", unsafe_allow_html=True)
except Exception as e:
st.error("β Error processing the image.")
st.exception(e)
|