import streamlit as st import numpy as np import cv2 from paddleocr import PaddleOCR from PIL import Image import re from datetime import datetime import pytz ocr = PaddleOCR(use_angle_cls=True, lang='en') def preprocess_image(image): img = np.array(image.convert("RGB")) gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) _, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY) return Image.fromarray(thresh) def extract_weight_text(image): results = ocr.ocr(np.array(image), cls=True) for line in results[0]: text = line[1][0] match = re.search(r"\d+\.\d+", text) if match: return match.group() return None st.set_page_config(page_title="Auto Weight Logger", layout="centered") st.title("📦 Auto Weight Logger (Streamlit)") st.write("Upload or capture an image of a digital weight display to extract weight.") uploaded_img = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"]) camera_img = st.camera_input("Or click an image") input_img = uploaded_img or camera_img if input_img is not None: image = Image.open(input_img) st.image(image, caption="Original Image", use_column_width=True) pre_img = preprocess_image(image) st.image(pre_img, caption="Preprocessed Image", use_column_width=True) weight = extract_weight_text(pre_img) if weight: ist_time = datetime.now(pytz.timezone("Asia/Kolkata")).strftime("%Y-%m-%d %H:%M:%S") st.success(f"✅ Weight Detected: **{weight} kg**") st.info(f"🕒 Captured At (IST): {ist_time}") else: st.error("❌ Could not detect weight. Please try with a clearer image.")