File size: 2,735 Bytes
fb1a823 c41b38b 17e765d 21a3f78 fb1a823 ae762c2 d54c470 21a3f78 82ae7fe ae762c2 21a3f78 c4b9b34 21a3f78 f970466 17e765d f970466 17e765d 21a3f78 f970466 be301b7 21a3f78 f970466 21a3f78 c4b9b34 21a3f78 f970466 21a3f78 ae762c2 21a3f78 f970466 17e765d f970466 51be189 17e765d f970466 21a3f78 51be189 ae762c2 21a3f78 51be189 ae762c2 51be189 ae762c2 51be189 ae762c2 21a3f78 51be189 21a3f78 ae762c2 51be189 ae762c2 51be189 ae762c2 51be189 21a3f78 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 logic
st.set_page_config(page_title="βοΈ Auto Weight Logger", layout="centered")
st.title("βοΈ Auto Weight Logger")
# Unique key for camera input refresh
if "camera_key" not in st.session_state:
st.session_state.camera_key = str(uuid.uuid4())
# UI - Input type selector
input_method = st.radio("πΈ Choose Input Method", ["Camera", "Upload"], horizontal=True)
# UI - Clear/reset
if st.button("π Clear / Retake"):
st.session_state.camera_key = str(uuid.uuid4())
st.experimental_rerun()
# Initialize variables
image_bytes = None
image = None
# ----------------- CAMERA -----------------
if input_method == "Camera":
cam_image = st.camera_input("π· Capture the weight display", key=st.session_state.camera_key)
if cam_image is not None:
image_bytes = cam_image.getvalue()
# ----------------- UPLOAD -----------------
elif input_method == "Upload":
uploaded_image = st.file_uploader("π Upload image (JPG, PNG)", type=["jpg", "jpeg", "png"])
if uploaded_image is not None:
image_bytes = uploaded_image.read()
# ----------------- PROCESS IMAGE -----------------
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). Try a smaller file.")
st.stop()
# OCR
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 link
device_id = "BAL-001"
image_url = "" # Optional if you host it
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 read/process the image.")
st.exception(e)
|