File size: 4,148 Bytes
fb1a823
1a717ad
17e765d
7be0446
 
1a717ad
8578b51
0eb7d0a
fb1a823
8578b51
7be0446
 
d54c470
b675cbf
7be0446
 
e667809
 
b675cbf
 
ae762c2
8578b51
 
 
 
 
b675cbf
7be0446
 
8578b51
7be0446
 
e667809
b675cbf
3ced6b6
7be0446
b675cbf
7be0446
8578b51
b675cbf
 
e667809
7be0446
 
e667809
b675cbf
 
e667809
3ced6b6
b675cbf
 
17e765d
b675cbf
3ced6b6
b675cbf
8578b51
 
b675cbf
8578b51
3ced6b6
7be0446
b675cbf
 
8578b51
7be0446
 
8578b51
7be0446
 
b675cbf
8578b51
7be0446
8578b51
 
7be0446
8578b51
 
7be0446
b675cbf
3ced6b6
 
7be0446
3ced6b6
 
 
 
 
7be0446
3ced6b6
b675cbf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7be0446
1a717ad
8578b51
51be189
e667809
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
114
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  # Ensure this function returns (weight, confidence)

# Set up page
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

# 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 method
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 and Display (if image is available)
if st.session_state.image_bytes:
    try:
        image = Image.open(io.BytesIO(st.session_state.image_bytes))

        # 1. Show captured time
        st.markdown(f"### πŸ•’ Captured At (IST): `{st.session_state.captured_time}`")

        # 2. Show image
        st.markdown("### πŸ–ΌοΈ Snapshot Image")
        st.image(image, use_column_width=True)

        # 3. OCR processing
        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)

        # 4. Display OCR result
        st.markdown("### βš–οΈ Captured Weight & OCR Confidence")
        if not weight or confidence < 80:
            st.error(f"⚠️ Low OCR Confidence ({int(confidence)}%). Please retake or upload a clearer image.")
            st.markdown("**Detected Weight:** Not reliable")
        else:
            st.success(f"βœ… Detected Weight: `{weight} g`")
            st.markdown(f"**Confidence:** `{int(confidence)}%`")

        # 5. Send to Salesforce
        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.")
        st.exception(e)