|
import streamlit as st |
|
from PIL import Image |
|
from ocr_engine import extract_weight_from_image |
|
import urllib.parse |
|
from datetime import datetime |
|
|
|
st.set_page_config(page_title="βοΈ Auto Weight Logger", layout="centered") |
|
st.title("βοΈ Auto Weight Logger") |
|
|
|
img_data = st.camera_input("π· Capture the weight display") |
|
|
|
if img_data: |
|
st.success("β
Image captured successfully!") |
|
|
|
if len(img_data.getvalue()) > 5 * 1024 * 1024: |
|
st.error("β Image too large (>5MB). Please try again.") |
|
st.stop() |
|
|
|
image = Image.open(img_data) |
|
st.image(image, caption="πΈ Snapshot", use_column_width=True) |
|
|
|
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 retake the image.") |
|
if st.button("π Try Again"): |
|
st.experimental_rerun() |
|
st.stop() |
|
|
|
|
|
device_id = "BAL-001" |
|
image_url = "" |
|
captured_at = datetime.now().strftime("%Y-%m-%d %H:%M:%S") |
|
status = "Pending Submission" |
|
|
|
|
|
st.markdown("### π Record Preview (before sending to Salesforce)") |
|
st.write({ |
|
"Auto Number": "Will be generated in Salesforce", |
|
"Captured Weight": f"{weight} g", |
|
"Captured At": captured_at, |
|
"Snapshot Image": "Attached" if image_url else "Not available", |
|
"Device ID": device_id, |
|
"Status": status |
|
}) |
|
|
|
|
|
encoded_weight = urllib.parse.quote(str(weight)) |
|
encoded_device = urllib.parse.quote(device_id) |
|
encoded_image_url = urllib.parse.quote(image_url) |
|
|
|
salesforce_url = ( |
|
f"https://autoweightlogger-dev-ed.my.salesforce-sites.com/" |
|
f"weight_logger_page?WeightInput={encoded_weight}&DeviceID={encoded_device}&ImageURL={encoded_image_url}" |
|
) |
|
|
|
|
|
st.markdown("### π€ Send to Salesforce") |
|
st.markdown(f"[β
Click here to confirm and log in Salesforce]({salesforce_url})", unsafe_allow_html=True) |
|
|