Spaces:
Runtime error
Runtime error
File size: 2,126 Bytes
5d670ae da9f292 5d670ae da9f292 5d670ae da9f292 363a646 65ed4c1 363a646 da9f292 ddf8948 3ca006e ddf8948 ee1d691 ddf8948 78e8bf3 ddf8948 78e8bf3 ddf8948 477d4fe ddf8948 78e8bf3 ddf8948 acddb2f 103f82b ddf8948 292bc54 ddf8948 103f82b ddf8948 8fe1b94 65ed4c1 2132698 |
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
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)
max_dim = 1000
height, width = img.shape[:2]
if max(height, width) > max_dim:
scale = max_dim / max(height, width)
img = cv2.resize(img, None, fx=scale, fy=scale, interpolation=cv2.INTER_AREA)
results = reader.readtext(img)
print("DEBUG OCR RESULTS:", results)
raw_texts = []
weight_candidates = []
fallback_weight = None
fallback_conf = 0.0
for box, (text, conf) in results: # β
THIS LINE IS CORRECT
original = text
cleaned = text.lower().strip()
cleaned = cleaned.replace(",", ".")
cleaned = cleaned.replace("o", "0").replace("s", "5").replace("g", "9")
cleaned = cleaned.replace("kg", "").replace("kgs", "")
cleaned = re.sub(r"[^0-9\.]", "", cleaned)
raw_texts.append(f"{original} β {cleaned} (conf: {round(conf, 2)})")
if cleaned.replace(".", "").isdigit() and not fallback_weight:
fallback_weight = cleaned
fallback_conf = conf
if cleaned.count(".") <= 1 and re.fullmatch(r"\d{2,4}(\.\d{1,3})?", cleaned):
weight_candidates.append((cleaned, conf))
if weight_candidates:
best_weight, best_conf = sorted(weight_candidates, key=lambda x: -x[1])[0]
elif fallback_weight:
best_weight, best_conf = fallback_weight, fallback_conf
else:
return "Not detected", 0.0, "OCR returned nothing useful"
if "." in best_weight:
int_part, dec_part = best_weight.split(".")
int_part = int_part.lstrip("0") or "0"
best_weight = f"{int_part}.{dec_part}"
else:
best_weight = best_weight.lstrip("0") or "0"
return best_weight, round(best_conf * 100, 2), "\n".join(raw_texts)
except Exception as e:
return f"Error: {str(e)}", 0.0, "OCR failed"
|