weightlogger / src /streamlit_app.py
Sanjayraju30's picture
Rename src/app.py to src/streamlit_app.py
8a7de0d verified
raw
history blame
1.86 kB
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
# Load OCR Model
ocr = PaddleOCR(use_angle_cls=True, lang='en') # do not reinstall paddleocr here
# Preprocess image: grayscale + threshold
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)
# Extract weight using regex
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
# Streamlit UI
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)
# Preprocess and show preprocessed image
pre_img = preprocess_image(image)
st.image(pre_img, caption="Preprocessed Image", use_column_width=True)
# Detect weight
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.")