File size: 2,628 Bytes
fb1a823
c41b38b
ae762c2
 
82ae7fe
17e765d
fb1a823
ae762c2
 
d54c470
f970466
82ae7fe
 
ae762c2
f970466
 
c4b9b34
f970466
 
17e765d
f970466
17e765d
f970466
 
be301b7
f970466
 
 
 
 
c4b9b34
f970466
 
 
 
 
ae762c2
f970466
 
17e765d
f970466
51be189
17e765d
f970466
 
51be189
ae762c2
51be189
 
ae762c2
51be189
ae762c2
51be189
 
 
 
ae762c2
f970466
51be189
f970466
ae762c2
51be189
 
 
 
 
ae762c2
51be189
 
ae762c2
51be189
f970466
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
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 for camera reload
if "camera_key" not in st.session_state:
    st.session_state.camera_key = str(uuid.uuid4())

# Input method selector
input_method = st.radio("πŸ“Έ Select Input Method", ["Camera", "Upload"], horizontal=True)

# Clear button
if st.button("πŸ” Clear / Retake"):
    st.session_state.camera_key = str(uuid.uuid4())
    st.experimental_rerun()

image_bytes = None
image = None

# ----- CAMERA INPUT -----
if input_method == "Camera":
    camera_image = st.camera_input("πŸ“· Capture the weight display", key=st.session_state.camera_key)
    if camera_image is not None:
        image_bytes = camera_image.getvalue()

# ----- FILE UPLOAD INPUT -----
elif input_method == "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()

# ----- IMAGE PROCESSING -----
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). Please use a smaller one.")
            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)}%)")

            # Salesforce redirect link
            device_id = "BAL-001"
            image_url = ""  # Optional

            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 load or process the image.")
        st.exception(e)