File size: 2,612 Bytes
fb1a823 c41b38b 17e765d 21a3f78 802bc88 fb1a823 802bc88 ae762c2 d54c470 802bc88 82ae7fe ae762c2 802bc88 c4b9b34 802bc88 f970466 17e765d f970466 17e765d 802bc88 f970466 be301b7 802bc88 c4b9b34 802bc88 ae762c2 802bc88 f970466 17e765d f970466 802bc88 17e765d f970466 802bc88 51be189 ae762c2 802bc88 51be189 ae762c2 802bc88 ae762c2 51be189 802bc88 51be189 ae762c2 802bc88 51be189 802bc88 ae762c2 51be189 ae762c2 51be189 802bc88 ae762c2 51be189 802bc88 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)
|