Sanjayraju30 commited on
Commit
5665756
·
verified ·
1 Parent(s): 1379dcc

Update ocr_engine.py

Browse files
Files changed (1) hide show
  1. ocr_engine.py +15 -13
ocr_engine.py CHANGED
@@ -3,33 +3,35 @@ import numpy as np
3
  import cv2
4
  import re
5
 
 
6
  reader = easyocr.Reader(['en'], gpu=False)
7
 
8
  def extract_weight_from_image(pil_img):
9
  try:
10
  img = np.array(pil_img)
11
 
12
- # Convert to grayscale and resize for better clarity
13
  gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
14
- gray = cv2.resize(gray, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
15
 
16
- # Histogram equalization
17
- gray = cv2.equalizeHist(gray)
18
 
19
- # Adaptive threshold to enhance text
20
- thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
21
- cv2.THRESH_BINARY, 11, 2)
22
 
23
- # Invert for LCD-like contrast
24
- thresh = cv2.bitwise_not(thresh)
25
 
26
- # OCR read
27
- result = reader.readtext(thresh, detail=0)
 
 
 
28
  combined_text = " ".join(result)
29
  print("OCR Text:", combined_text)
30
 
31
- # Regex to match weight like 25, 46.5, 75.45 etc.
32
- match = re.search(r"\b\d{2,4}\.?\d{0,2}\b", combined_text)
33
  if match:
34
  return match.group(), 95.0
35
  else:
 
3
  import cv2
4
  import re
5
 
6
+ # Initialize OCR reader once
7
  reader = easyocr.Reader(['en'], gpu=False)
8
 
9
  def extract_weight_from_image(pil_img):
10
  try:
11
  img = np.array(pil_img)
12
 
13
+ # Convert to grayscale
14
  gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
 
15
 
16
+ # Resize for better accuracy
17
+ gray = cv2.resize(gray, None, fx=2, fy=2, interpolation=cv2.INTER_LINEAR)
18
 
19
+ # Gaussian blur to reduce noise
20
+ blurred = cv2.GaussianBlur(gray, (3, 3), 0)
 
21
 
22
+ # Invert colors: useful for LCD display images
23
+ inverted = cv2.bitwise_not(blurred)
24
 
25
+ # Normalize brightness
26
+ norm_img = cv2.normalize(inverted, None, 0, 255, cv2.NORM_MINMAX)
27
+
28
+ # Perform OCR
29
+ result = reader.readtext(norm_img, detail=0)
30
  combined_text = " ".join(result)
31
  print("OCR Text:", combined_text)
32
 
33
+ # Regex to detect numbers (e.g. 25, 75.45, 100.00)
34
+ match = re.search(r"\b\d{1,4}(\.\d{1,2})?\b", combined_text)
35
  if match:
36
  return match.group(), 95.0
37
  else: