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)
|