File size: 2,735 Bytes
fb1a823
c41b38b
17e765d
21a3f78
 
 
fb1a823
ae762c2
 
d54c470
21a3f78
82ae7fe
 
ae762c2
21a3f78
 
c4b9b34
21a3f78
f970466
17e765d
f970466
17e765d
21a3f78
f970466
 
be301b7
21a3f78
f970466
21a3f78
 
 
c4b9b34
21a3f78
f970466
21a3f78
 
 
ae762c2
21a3f78
f970466
17e765d
f970466
51be189
17e765d
f970466
21a3f78
51be189
ae762c2
21a3f78
51be189
 
ae762c2
51be189
ae762c2
51be189
 
 
 
ae762c2
21a3f78
51be189
21a3f78
ae762c2
51be189
 
 
 
 
ae762c2
51be189
 
ae762c2
51be189
21a3f78
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
import streamlit as st
from PIL import Image
import io
import uuid
import urllib.parse
from ocr_engine import extract_weight_from_image  # Your OCR logic

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

# Unique key for camera input refresh
if "camera_key" not in st.session_state:
    st.session_state.camera_key = str(uuid.uuid4())

# UI - Input type selector
input_method = st.radio("πŸ“Έ Choose Input Method", ["Camera", "Upload"], horizontal=True)

# UI - Clear/reset
if st.button("πŸ” Clear / Retake"):
    st.session_state.camera_key = str(uuid.uuid4())
    st.experimental_rerun()

# Initialize variables
image_bytes = None
image = None

# ----------------- CAMERA -----------------
if input_method == "Camera":
    cam_image = st.camera_input("πŸ“· Capture the weight display", key=st.session_state.camera_key)
    if cam_image is not None:
        image_bytes = cam_image.getvalue()

# ----------------- UPLOAD -----------------
elif input_method == "Upload":
    uploaded_image = st.file_uploader("πŸ“ Upload image (JPG, PNG)", type=["jpg", "jpeg", "png"])
    if uploaded_image is not None:
        image_bytes = uploaded_image.read()

# ----------------- PROCESS IMAGE -----------------
if image_bytes:
    try:
        image = Image.open(io.BytesIO(image_bytes))
        st.image(image, caption="πŸ“Έ Snapshot", use_column_width=True)

        if len(image_bytes) > 5 * 1024 * 1024:
            st.error("❌ Image too large (>5MB). Try a smaller file.")
            st.stop()

        # OCR
        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)}%)")

            # Salesforce link
            device_id = "BAL-001"
            image_url = ""  # Optional if you host it

            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)

    except Exception as e:
        st.error("❌ Failed to read/process the image.")
        st.exception(e)