File size: 2,594 Bytes
fb1a823
c41b38b
ae762c2
 
fb1a823
ae762c2
 
d54c470
fec538c
 
 
 
 
ae762c2
fec538c
ae762c2
fec538c
 
 
ae762c2
fec538c
 
 
ae762c2
fec538c
 
 
 
ae762c2
fec538c
 
ae762c2
 
fec538c
 
ae762c2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fec538c
 
 
ae762c2
 
 
 
fec538c
ae762c2
 
 
 
 
 
 
 
 
 
 
 
 
 
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 retake and image
if "image_captured" not in st.session_state:
    st.session_state.image_captured = False
if "image_data" not in st.session_state:
    st.session_state.image_data = None

# πŸ”˜ Retake / Clear Button
if st.button("πŸ” Clear / Retake Photo"):
    st.session_state.image_captured = False
    st.session_state.image_data = None
    st.experimental_rerun()

# βœ… Show camera only if no image captured
if not st.session_state.image_captured:
    img_data = st.camera_input("πŸ“· Capture the weight display")

    if img_data:
        st.session_state.image_data = img_data
        st.session_state.image_captured = True
        st.experimental_rerun()

# βœ… If image is already captured
if st.session_state.image_captured and st.session_state.image_data:
    st.success("βœ… Image captured successfully!")

    img_data = st.session_state.image_data

    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)

    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 retake the photo.")
        if st.button("πŸ” Retake Photo"):
            st.session_state.image_captured = False
            st.session_state.image_data = None
            st.experimental_rerun()
        st.stop()

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

    # 🌐 Salesforce link logic
    device_id = "BAL-001"
    image_url = ""  # Optional

    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)