File size: 2,916 Bytes
fb1a823 1a717ad 17e765d 7be0446 1a717ad 3ced6b6 fb1a823 7be0446 d54c470 3ced6b6 7be0446 ae762c2 1a717ad 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 17e765d 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 1a717ad 3ced6b6 51be189 3ced6b6 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 |
import streamlit as st
from PIL import Image, UnidentifiedImageError
import io
import uuid
import urllib.parse
import pytz
from datetime import datetime
from ocr_engine import extract_weight_from_image # Make sure this returns (weight, confidence)
# Setup
st.set_page_config(page_title="βοΈ Auto Weight Logger", layout="centered")
st.title("βοΈ Auto Weight Logger")
# Session states
if "camera_key" not in st.session_state:
st.session_state.camera_key = str(uuid.uuid4())
# Input method
input_mode = st.radio("πΈ Select Input Method", ["Camera", "Upload"], horizontal=True)
# Clear button
if st.button("π Clear / Retake"):
st.session_state.camera_key = str(uuid.uuid4())
st.rerun()
# Image bytes and capture
image_bytes = None
image = None
if input_mode == "Camera":
cam_photo = st.camera_input("π· Capture weight display", key=st.session_state.camera_key)
if cam_photo:
image_bytes = cam_photo.getvalue()
elif input_mode == "Upload":
uploaded_file = st.file_uploader("π Upload Image (JPG/PNG)", type=["jpg", "jpeg", "png"])
if uploaded_file:
image_bytes = uploaded_file.read()
# Process image
if image_bytes:
try:
image = Image.open(io.BytesIO(image_bytes))
# Timestamp
ist = pytz.timezone("Asia/Kolkata")
captured_time = datetime.now(ist).strftime("%Y-%m-%d %I:%M:%S %p")
st.subheader("πΌοΈ Snapshot Image")
st.image(image, use_column_width=True)
if len(image_bytes) > 5 * 1024 * 1024:
st.error("β Image too large (>5MB). Please use a smaller image.")
st.stop()
with st.spinner("π Extracting weight..."):
weight, confidence = extract_weight_from_image(image)
# Output regardless of confidence
st.markdown(f"### π¦ Captured Weight: `{weight if weight else 'Not Detected'}`")
st.markdown(f"### π Captured At (IST): `{captured_time}`")
if not weight or confidence < 80:
st.warning(f"β οΈ Low OCR Confidence ({int(confidence)}%). You may retry.")
else:
st.success(f"β
High Confidence: {int(confidence)}%")
# Salesforce redirect 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"[π€ Click to Log Weight in Salesforce]({salesforce_url})", unsafe_allow_html=True)
except UnidentifiedImageError:
st.error("β Invalid image format.")
except Exception as e:
st.error("β Something went wrong while processing the image.")
st.exception(e)
|