File size: 1,186 Bytes
6b14fa5
65ed4c1
8fe1b94
a71f519
6b14fa5
 
65ed4c1
363a646
65ed4c1
363a646
65ed4c1
1379dcc
363a646
a71f519
701d11a
a71f519
 
33069a9
1379dcc
a71f519
 
33069a9
1379dcc
a71f519
33069a9
1379dcc
a71f519
 
 
33069a9
1379dcc
a71f519
65ed4c1
 
 
 
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
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)

        # Convert to grayscale and resize for better clarity
        gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
        gray = cv2.resize(gray, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)

        # Histogram equalization
        gray = cv2.equalizeHist(gray)

        # Adaptive threshold to enhance text
        thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                       cv2.THRESH_BINARY, 11, 2)

        # Invert for LCD-like contrast
        thresh = cv2.bitwise_not(thresh)

        # OCR read
        result = reader.readtext(thresh, detail=0)
        combined_text = " ".join(result)
        print("OCR Text:", combined_text)

        # Regex to match weight like 25, 46.5, 75.45 etc.
        match = re.search(r"\b\d{2,4}\.?\d{0,2}\b", combined_text)
        if match:
            return match.group(), 95.0
        else:
            return "No weight detected", 0.0

    except Exception as e:
        return f"Error: {str(e)}", 0.0