File size: 3,194 Bytes
fb1a823 1a717ad 17e765d 7be0446 1a717ad e667809 fb1a823 e667809 7be0446 d54c470 e667809 7be0446 e667809 ae762c2 e667809 7be0446 e667809 7be0446 e667809 3ced6b6 7be0446 e667809 7be0446 e667809 7be0446 e667809 3ced6b6 7be0446 e667809 7be0446 e667809 7be0446 e667809 3ced6b6 e667809 3ced6b6 e667809 7be0446 17e765d 7be0446 3ced6b6 7be0446 e667809 7be0446 e667809 7be0446 e667809 3ced6b6 e667809 7be0446 e667809 7be0446 e667809 7be0446 e667809 3ced6b6 7be0446 3ced6b6 7be0446 3ced6b6 7be0446 1a717ad e667809 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 |
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 # This must return (weight, confidence)
# Page setup
st.set_page_config(page_title="βοΈ Auto Weight Logger", layout="centered")
st.title("βοΈ Auto Weight Logger")
# Store keys/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 = ""
# Select input type
input_mode = st.radio("πΈ Select Input Method", ["Camera", "Upload"], horizontal=True)
# Clear/reset
if st.button("π Clear / Retake"):
st.session_state.camera_key = str(uuid.uuid4())
st.session_state.captured_time = ""
st.rerun()
# Init
image_bytes = None
image = None
# Capture time (IST)
def get_current_ist_time():
ist = pytz.timezone("Asia/Kolkata")
return datetime.now(ist).strftime("%Y-%m-%d %I:%M:%S %p")
# Handle camera
if input_mode == "Camera":
cam_photo = st.camera_input("π· Take a photo", key=st.session_state.camera_key)
if cam_photo:
image_bytes = cam_photo.getvalue()
st.session_state.captured_time = get_current_ist_time()
# Handle upload
elif input_mode == "Upload":
uploaded_file = st.file_uploader("π Upload an image (JPG/PNG)", type=["jpg", "jpeg", "png"])
if uploaded_file:
image_bytes = uploaded_file.read()
st.session_state.captured_time = get_current_ist_time()
# Process if image exists
if image_bytes:
try:
image = Image.open(io.BytesIO(image_bytes))
st.subheader("πΌοΈ Snapshot Image")
st.image(image, use_column_width=True)
if len(image_bytes) > 5 * 1024 * 1024:
st.error("β Image is too large (>5MB).")
st.stop()
with st.spinner("π Running OCR..."):
weight, confidence = extract_weight_from_image(image)
# Show captured time
st.markdown(f"### π Captured At (IST): `{st.session_state.captured_time}`")
# Show weight
if not weight or confidence < 80:
st.markdown(f"### π¦ Captured Weight: `Not Detected`")
st.warning(f"β οΈ OCR Confidence too low ({int(confidence)}%)")
else:
st.markdown(f"### π¦ Captured Weight: `{weight} g`")
st.success(f"β
OCR Confidence: {int(confidence)}%")
# Generate Salesforce URL
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 file.")
except Exception as e:
st.error("β Unexpected error.")
st.exception(e)
|