Sanjayraju30's picture
Update app.py
8b5815c verified
raw
history blame
1.89 kB
import gradio as gr
from PIL import Image, ImageEnhance, ImageOps
import torch
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from datetime import datetime
import pytz
import re
# Load model and processor
processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-stage1")
model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-stage1")
# Enhance image before OCR
def enhance_image(image):
image = image.convert("L") # grayscale
image = ImageOps.invert(image) # invert colors
image = ImageEnhance.Contrast(image).enhance(2) # boost contrast
image = ImageEnhance.Sharpness(image).enhance(2) # sharpen
image = image.resize((image.width * 2, image.height * 2)) # enlarge
return image
# Extract weight
def detect_weight(image):
try:
processed_image = enhance_image(image)
pixel_values = processor(images=processed_image, return_tensors="pt").pixel_values
generated_ids = model.generate(pixel_values)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
# Extract number
match = re.search(r"(\d{1,4}(?:\.\d{1,2})?)", generated_text)
weight = match.group(1) if match else "Not detected"
# Timestamp
ist = pytz.timezone('Asia/Kolkata')
current_time = datetime.now(ist).strftime("%Y-%m-%d %H:%M:%S")
return f"Weight: {weight} kg\nCaptured At: {current_time}", image
except Exception as e:
return f"Error: {str(e)}", image
# Gradio UI
interface = gr.Interface(
fn=detect_weight,
inputs=gr.Image(type="pil", label="Upload or Capture Image"),
outputs=[gr.Textbox(label="Weight Info"), gr.Image(label="Snapshot")],
title="⚖️ Auto Weight Detector (No Tesseract)",
description="Detects weight from digital scale image using Hugging Face TrOCR."
)
interface.launch()