File size: 2,550 Bytes
fb1a823
c41b38b
 
844e1ad
fb1a823
7a171bf
7aa5221
 
04384ee
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a26d1e2
b985185
fa29632
1f1d6d4
fa29632
04384ee
844e1ad
 
 
 
aba4a6b
 
 
04384ee
844e1ad
 
 
f038ea6
7a171bf
04384ee
844e1ad
09d2cb1
e789af9
04384ee
 
844e1ad
 
04384ee
f352fb7
 
04384ee
844e1ad
04384ee
f352fb7
844e1ad
 
 
 
 
f352fb7
844e1ad
 
aba4a6b
844e1ad
 
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
import streamlit as st
from PIL import Image
from ocr_engine import extract_weight_from_image
import urllib.parse

st.set_page_config(page_title="βš–οΈ Auto Weight Logger", layout="centered")
st.title("βš–οΈ Auto Weight Logger")

# --------------------------------
# βœ… Session state to manage reset
# --------------------------------
if "clear" not in st.session_state:
    st.session_state.clear = False

# πŸ”˜ Clear / Retake Photo Button
if st.button("πŸ” Clear / Retake Photo"):
    st.session_state.clear = True
    st.experimental_rerun()  # or st.rerun() if supported

# 🧼 Skip camera input for one run if clearing
if st.session_state.clear:
    st.session_state.clear = False
    st.stop()  # skip rest, rerun will show fresh input

# --------------------------------
# πŸ“· Camera Input
# --------------------------------
img_data = st.camera_input("πŸ“· Capture the weight display")

if img_data:
    st.success("βœ… Image captured successfully!")

    # ⚠️ Optional: file size check
    if len(img_data.getvalue()) > 5 * 1024 * 1024:
        st.error("❌ Image too large (>5MB). Please try again.")
        st.stop()

    image = Image.open(img_data)
    st.image(image, caption="πŸ“Έ Snapshot", use_column_width=True)

    # πŸ” Run OCR
    with st.spinner("πŸ” Extracting weight..."):
        weight, confidence = extract_weight_from_image(image)

    st.write(f"πŸ› οΈ DEBUG: weight = {weight}, confidence = {confidence}")

    # ⚠️ If confidence too low, allow retake
    if not weight or confidence < 80:
        st.error(f"⚠️ OCR confidence too low ({int(confidence)}%). Please retake the photo.")
        if st.button("πŸ” Retake Photo"):
            st.session_state.clear = True
            st.experimental_rerun()
        st.stop()

    # βœ… Successful result
    st.success(f"βœ… Detected Weight: {weight} g (Confidence: {int(confidence)}%)")

    # πŸ”— Salesforce redirection setup
    device_id = "BAL-001"
    image_url = ""  # Optional: you can later host image here

    encoded_weight = urllib.parse.quote(str(weight))
    encoded_device = urllib.parse.quote(device_id)
    encoded_image_url = urllib.parse.quote(image_url)

    salesforce_url = (
        "https://autoweightlogger-dev-ed.my.salesforce-sites.com/"
        f"weight_logger_page?WeightInput={encoded_weight}&DeviceID={encoded_device}&ImageURL={encoded_image_url}"
    )

    st.markdown("### πŸ“€ Send to Salesforce")
    st.markdown(f"[βœ… Click here to confirm and log in Salesforce]({salesforce_url})", unsafe_allow_html=True)