Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Aniket025
GitHub Repository: Aniket025/Medical-Prescription-OCR
Path: blob/master/Model-4/main.py
427 views
1
import preprocess as pp
2
3
import numpy as np
4
import pandas as pd
5
import matplotlib.pyplot as plt
6
import cv2
7
from ocr.helpers import implt, resize, ratio
8
import word_detection as wd
9
import glob
10
import word_classification as wc
11
12
image = cv2.cvtColor(cv2.imread("test1.jpeg"), cv2.COLOR_BGR2RGB)
13
14
15
## Preprocess image
16
17
# Edge detection ()
18
imageEdges = pp.edgesDet(image, 200, 250)
19
20
# Close gaps between edges (double page clouse => rectangle kernel)
21
closedEdges = cv2.morphologyEx(imageEdges, cv2.MORPH_CLOSE, np.ones((5, 11)))
22
23
24
pageContour = pp.findPageContours(closedEdges, resize(image))
25
26
# Recalculate to original scale
27
pageContour = pageContour.dot(ratio(image))
28
29
30
newImage = pp.perspImageTransform(image, pageContour)
31
32
# cv2.imwrite("2_1.jpg", cv2.cvtColor(newImage, cv2.COLOR_BGR2RGB))
33
34
35
## Detect words and bounding boxes
36
37
38
# Image pre-processing - blur, edges, threshold, closing
39
blurred = cv2.GaussianBlur(newImage, (5, 5), 18)
40
edgeImg = wd.edgeDetect(blurred)
41
ret, edgeImg = cv2.threshold(edgeImg, 50, 255, cv2.THRESH_BINARY)
42
bwImage = cv2.morphologyEx(edgeImg, cv2.MORPH_CLOSE, np.ones((20,20), np.uint8))
43
44
bBoxes1 = wd.textDetect(bwImage, newImage)
45
46
## TO DO
47
## Reject bounding boxes with large size
48
49
# or
50
51
wbBoxes = wd.textDetectWatershed(bwImage, newImage)
52
53
54
55
file = open("output/words/watershed/detection.txt","w")
56
list = glob.glob("output/words/watershed/*.jpg")
57
for i in range(0,len(list)):
58
image_filename = list[i]
59
img = cv2.imread(image_filename)
60
img = wc.imageNorm(img,60,border=False,tilt=True,hystNorm=True)
61
img = cv2.copyMakeBorder(img,0,0,30,30,cv2.BORDER_CONSTANT, value=[0,0,0])
62
gaps = wc.segmentation(img, step=2, RNN=True, debug=False)
63
chars = []
64
for i in range(0,(len(gaps)-1)):
65
char = img[0:60,gaps[i]:gaps[i+1]]
66
char, dim = wc.letterNorm(char, is_thresh=True, dim=True)
67
if dim[0]>4 and dim[1]>4:
68
chars.append(char.flatten())
69
70
71
chars = np.array(chars)
72
word = ''
73
74
if len(chars) != 0:
75
pred = wc.charClass.run(chars)
76
for c in pred:
77
word += wc.idx2char(c)
78
79
print word
80
81
82
83
84
85
86
87
88
89
90
91
92
93
for file in list:
94
remove(file)
95
96
97
98
99
100
101