File size: 3,123 Bytes
fb1a823
c41b38b
ae762c2
 
82ae7fe
17e765d
fb1a823
ae762c2
 
d54c470
82ae7fe
fec538c
 
c4b9b34
 
82ae7fe
 
ae762c2
17e765d
c4b9b34
 
17e765d
be301b7
 
17e765d
 
 
 
be301b7
e9c0e22
c4b9b34
17e765d
c4b9b34
17e765d
c4b9b34
17e765d
 
ae762c2
17e765d
e9c0e22
c4b9b34
17e765d
 
 
 
 
 
 
 
 
82ae7fe
ae762c2
17e765d
 
 
ae762c2
 
17e765d
ae762c2
 
 
 
 
 
c4b9b34
82ae7fe
 
ae762c2
17e765d
82ae7fe
17e765d
ae762c2
82ae7fe
 
 
 
 
ae762c2
82ae7fe
 
ae762c2
17e765d
c4b9b34
82ae7fe
 
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
import streamlit as st
from PIL import Image
from ocr_engine import extract_weight_from_image
import urllib.parse
import uuid
import io

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

# Session state
if "image_data" not in st.session_state:
    st.session_state.image_data = None
if "input_mode" not in st.session_state:
    st.session_state.input_mode = "Camera"
if "camera_key" not in st.session_state:
    st.session_state.camera_key = str(uuid.uuid4())

# Choose input method
st.radio("πŸ“Έ Select Image Input Method:", ["Camera", "Upload"], key="input_mode", horizontal=True)

# Clear/reset image
if st.button("πŸ” Clear / Retake Photo"):
    st.session_state.image_data = None
    st.session_state.camera_key = str(uuid.uuid4())

# Get image input
uploaded_image = None

if st.session_state.image_data is None:
    if st.session_state.input_mode == "Camera":
        uploaded_image = st.camera_input("πŸ“· Capture the weight display", key=st.session_state.camera_key)
    else:
        uploaded_image = st.file_uploader("πŸ“ Upload an image of the weight display", type=["jpg", "jpeg", "png"])

    if uploaded_image:
        st.session_state.image_data = uploaded_image

# Process image
if st.session_state.image_data:
    st.success("βœ… Image received successfully!")

    # Convert to PIL image
    try:
        image_bytes = st.session_state.image_data.read() if hasattr(st.session_state.image_data, 'read') else st.session_state.image_data.getvalue()
        image = Image.open(io.BytesIO(image_bytes))
    except Exception as e:
        st.error("❌ Failed to load image.")
        st.stop()

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

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

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

        # Generate Salesforce URL
        device_id = "BAL-001"
        image_url = ""  # You can upload to S3 or Salesforce Files if needed

        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)

    # Retake or upload another
    if st.button("πŸ” Retake / Upload Another"):
        st.session_state.image_data = None
        st.session_state.camera_key = str(uuid.uuid4())