Spaces:
Runtime error
Runtime error
File size: 1,618 Bytes
ee1d691 65ed4c1 8fe1b94 a71f519 6b14fa5 ee1d691 363a646 65ed4c1 363a646 65ed4c1 1f19915 ee1d691 363a646 1f19915 ee1d691 1f19915 ee1d691 1f19915 ee1d691 1f19915 ee1d691 1f19915 e91f073 1f19915 103f82b ee1d691 103f82b ee1d691 8fe1b94 65ed4c1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import easyocr
import numpy as np
import cv2
import re
reader = easyocr.Reader(['en'], gpu=False)
def extract_weight_from_image(pil_img):
try:
img = np.array(pil_img)
# Resize and grayscale
img = cv2.resize(img, None, fx=3.5, fy=3.5, interpolation=cv2.INTER_LINEAR)
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# Denoise & Adaptive Threshold (better than OTSU for displays)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY_INV, 11, 2)
# Run OCR
results = reader.readtext(thresh)
print("OCR Results:", results) # For debugging
weight_candidates = []
for _, text, conf in results:
cleaned = text.lower()
cleaned = cleaned.replace("kg", "").replace("kgs", "")
cleaned = cleaned.replace("o", "0").replace("O", "0")
cleaned = cleaned.replace("s", "5").replace("S", "5")
cleaned = cleaned.replace("g", "9").replace("G", "6")
cleaned = re.sub(r"[^\d\.]", "", cleaned) # remove non-numeric
if re.fullmatch(r"\d{2,4}(\.\d{1,2})?", cleaned): # allow 2-4 digit weights
weight_candidates.append((cleaned, conf))
if not weight_candidates:
return "Not detected", 0.0
best_weight, best_conf = sorted(weight_candidates, key=lambda x: -x[1])[0]
return best_weight, round(best_conf * 100, 2)
except Exception as e:
return f"Error: {str(e)}", 0.0
|