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