Spaces:
Sleeping
Sleeping
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.") | |