File size: 3,050 Bytes
fb1a823
c41b38b
ae762c2
 
82ae7fe
17e765d
fb1a823
ae762c2
 
d54c470
51be189
 
 
c4b9b34
 
82ae7fe
 
ae762c2
51be189
c4b9b34
 
51be189
be301b7
51be189
17e765d
 
 
51be189
 
be301b7
c4b9b34
17e765d
51be189
 
c4b9b34
51be189
 
 
 
ae762c2
51be189
 
17e765d
51be189
 
17e765d
51be189
 
 
ae762c2
51be189
 
ae762c2
51be189
ae762c2
51be189
 
 
 
ae762c2
51be189
 
ae762c2
51be189
 
 
 
 
ae762c2
51be189
 
ae762c2
51be189
 
 
ae762c2
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
77
78
79
80
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")

# State initialization
if "image_bytes" not in st.session_state:
    st.session_state.image_bytes = 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())

# Input mode selector
st.radio("πŸ“Έ Select Image Input Method:", ["Camera", "Upload"], key="input_mode", horizontal=True)

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

# Get image input
if st.session_state.image_bytes is None:
    uploaded_image = None

    if st.session_state.input_mode == "Camera":
        uploaded_image = st.camera_input("πŸ“· Capture the weight display", key=st.session_state.camera_key)
        if uploaded_image is not None:
            st.session_state.image_bytes = uploaded_image.getvalue()

    elif st.session_state.input_mode == "Upload":
        uploaded_image = st.file_uploader("πŸ“ Upload image of weight display", type=["jpg", "jpeg", "png"])
        if uploaded_image is not None:
            st.session_state.image_bytes = uploaded_image.read()

# Process and OCR
if st.session_state.image_bytes:
    try:
        image = Image.open(io.BytesIO(st.session_state.image_bytes))
        st.image(image, caption="πŸ“Έ Snapshot", use_column_width=True)

        if len(st.session_state.image_bytes) > 5 * 1024 * 1024:
            st.error("❌ Image too large (>5MB). Please try again.")
            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)}%)")

            device_id = "BAL-001"
            image_url = ""

            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)

        if st.button("πŸ” Retake / Upload Another"):
            st.session_state.image_bytes = None
            st.session_state.camera_key = str(uuid.uuid4())

    except Exception as e:
        st.error("❌ Failed to load or process image.")
        st.exception(e)