File size: 4,084 Bytes
fb1a823
1a717ad
17e765d
7be0446
 
1a717ad
8578b51
e7f3d63
fb1a823
e7f3d63
7be0446
 
d54c470
b675cbf
7be0446
 
e667809
 
b675cbf
 
ae762c2
e7f3d63
8578b51
 
 
 
e7f3d63
7be0446
 
8578b51
7be0446
 
e667809
b675cbf
3ced6b6
7be0446
b675cbf
7be0446
8578b51
b675cbf
 
e667809
7be0446
 
e667809
b675cbf
 
e667809
3ced6b6
e7f3d63
b675cbf
17e765d
b675cbf
3ced6b6
e7f3d63
 
8578b51
e7f3d63
 
 
 
3ced6b6
7be0446
b675cbf
8578b51
7be0446
 
8578b51
7be0446
 
 
e7f3d63
 
7be0446
e7f3d63
 
7be0446
e7f3d63
3ced6b6
e7f3d63
7be0446
3ced6b6
 
 
 
 
7be0446
3ced6b6
b675cbf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7be0446
1a717ad
8578b51
51be189
e7f3d63
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import streamlit as st
from PIL import Image, UnidentifiedImageError
import io
import uuid
import urllib.parse
from datetime import datetime
import pytz
from ocr_engine import extract_weight_from_image  # This must return (weight, confidence)

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

# Session state
if "camera_key" not in st.session_state:
    st.session_state.camera_key = str(uuid.uuid4())
if "captured_time" not in st.session_state:
    st.session_state.captured_time = ""
if "image_bytes" not in st.session_state:
    st.session_state.image_bytes = None

# Function to get IST time
def get_current_ist_time():
    ist = pytz.timezone("Asia/Kolkata")
    return datetime.now(ist).strftime("%Y-%m-%d %I:%M:%S %p")

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

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

# Capture or Upload
if input_mode == "Camera":
    cam_photo = st.camera_input("πŸ“· Capture Weight Display", key=st.session_state.camera_key)
    if cam_photo:
        st.session_state.image_bytes = cam_photo.getvalue()
        st.session_state.captured_time = get_current_ist_time()

elif input_mode == "Upload":
    uploaded_file = st.file_uploader("πŸ“ Upload an image (JPG/PNG)", type=["jpg", "jpeg", "png"])
    if uploaded_file:
        st.session_state.image_bytes = uploaded_file.read()
        st.session_state.captured_time = get_current_ist_time()

# Process image
if st.session_state.image_bytes:
    try:
        image = Image.open(io.BytesIO(st.session_state.image_bytes))

        # Display bullet-point summary
        st.markdown("### πŸ“‹ Captured Information")

        st.markdown(f"""
        - πŸ•’ **Captured At (IST):** `{st.session_state.captured_time}`
        - πŸ–ΌοΈ **Snapshot Image:**  
        """)
        st.image(image, use_column_width=True)

        if len(st.session_state.image_bytes) > 5 * 1024 * 1024:
            st.error("❌ Image too large (>5MB). Please upload a smaller image.")
            st.stop()

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

        if not weight or confidence < 80:
            st.markdown(f"- ⚠️ **Low OCR Confidence:** `{int(confidence)}%` β€” Please retake or upload a clearer image.")
            st.markdown("- βš–οΈ **Detected Weight:** Not reliable")
        else:
            st.markdown(f"- βš–οΈ **Detected Weight:** `{weight} g`")
            st.markdown(f"- πŸ“Š **OCR Confidence:** `{int(confidence)}%`")

        # Salesforce 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"""
            <a href="{salesforce_url}" target="_blank">
                <button style="
                    background-color: #4CAF50;
                    border: none;
                    color: white;
                    padding: 12px 24px;
                    text-align: center;
                    text-decoration: none;
                    display: inline-block;
                    font-size: 16px;
                    border-radius: 8px;
                    cursor: pointer;
                ">πŸ“€ Log to Salesforce</button>
            </a>
            """, unsafe_allow_html=True
        )

    except UnidentifiedImageError:
        st.error("❌ Unable to process image. Please upload a valid JPG or PNG.")
    except Exception as e:
        st.error("❌ Unexpected error occurred.")
        st.exception(e)