Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
2
2022-220
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
2022-220
2022-220
Commits
a6ab5950
Commit
a6ab5950
authored
Nov 13, 2022
by
Pathirana K.P.G.I
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
08ae0e7a
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
195 additions
and
0 deletions
+195
-0
api.py
api.py
+195
-0
No files found.
api.py
0 → 100644
View file @
a6ab5950
from
flask
import
Flask
,
request
from
flask_cors
import
CORS
import
json
import
werkzeug
import
cv2
from
tensorflow.keras.models
import
load_model
import
numpy
as
np
from
rome_numeric_rec.ocr
import
get_rome_number
from
rome_numeric_rec.rome_to_number
import
roman_to_int
import
base64
from
imageio
import
imread
import
io
from
equation_solver.es
import
get_ans_from_image
from
numeric_pattern_rec.LinearRegression
import
get_next_numbers_of_sequence
import
numeric_pattern_rec.ocr
as
ocr
from
keras.models
import
Sequential
from
keras.layers
import
Dense
,
Activation
,
Flatten
,
Dropout
from
keras.layers
import
Conv2D
,
MaxPooling2D
app
=
Flask
(
__name__
)
CORS
(
app
)
model
=
load_model
(
'shape_rec/model.h5'
)
data_dic
=
{
0
:
'rectangle'
,
1
:
'circle'
,
2
:
'ellipse'
,
3
:
'hexagon'
,
4
:
'trangle'
,
5
:
'square'
,
6
:
'stars'
}
@
app
.
route
(
'/equation_solver'
,
methods
=
[
'GET'
,
'POST'
])
def
equation_solver
():
# for base 64 json input
string_64
=
request
.
json
[
'image'
]
string_64
=
str
(
string_64
)
.
replace
(
'image/webp;base64,'
,
''
)
img
=
base_64_cv2
(
string_64
)
img_gray
=
cv2
.
cvtColor
(
img
,
cv2
.
COLOR_BGR2GRAY
)
answer
=
get_ans_from_image
(
img_gray
)
return_str
=
'{ "answer" : "'
+
str
(
answer
)
+
'" }'
print
(
return_str
)
return
json
.
loads
(
return_str
)
@
app
.
route
(
'/number_pattern'
,
methods
=
[
'GET'
,
'POST'
])
def
number_pattern
():
string_64
=
request
.
json
[
'image'
]
string_64
=
str
(
string_64
)
.
replace
(
'image/webp;base64,'
,
''
)
img
=
base_64_cv2
(
string_64
)
cv2
.
imwrite
(
'upload/number_pattern.png'
,
img
)
n
=
request
.
json
[
'n'
]
input_pattern
=
ocr
.
get_ocr
(
'upload/number_pattern.png'
)
input_list
=
[]
for
i
in
input_pattern
.
split
(
','
):
try
:
input_list
.
append
(
int
(
str
(
i
)
.
replace
(
','
,
''
)
.
replace
(
' '
,
''
)))
except
:
pass
y
,
img
=
get_next_numbers_of_sequence
(
5
,
input_list
)
base64_string
=
get_base_64
(
img
)
return_str
=
'{ "predict_values" : '
+
str
(
y
)
+
', "plot" : "'
+
str
(
base64_string
)
+
'" }'
print
(
return_str
)
return
json
.
loads
(
return_str
)
@
app
.
route
(
'/rome_to_number'
,
methods
=
[
'GET'
,
'POST'
])
def
rome_to_number
():
string_64
=
request
.
json
[
'image'
]
string_64
=
str
(
string_64
)
.
replace
(
'image/webp;base64,'
,
''
)
img
=
base_64_cv2
(
string_64
)
cv2
.
imwrite
(
'upload/number_pattern.png'
,
img
)
rome_text
=
get_rome_number
(
img
)
.
upper
()
.
replace
(
' '
,
''
)
.
replace
(
'
\n
'
,
''
)
print
(
rome_text
)
numeric_number
=
roman_to_int
(
rome_text
)
return_str
=
'{ "res" : '
+
str
(
numeric_number
)
+
' }'
print
(
return_str
)
return
json
.
loads
(
return_str
)
@
app
.
route
(
'/rome_to_number_new'
,
methods
=
[
'GET'
,
'POST'
])
def
rome_to_number_new
():
string_64
=
request
.
json
[
'image'
]
string_64
=
str
(
string_64
)
.
replace
(
'image/webp;base64,'
,
''
)
img
=
base_64_cv2
(
string_64
)
cv2
.
imwrite
(
'upload/number_pattern.png'
,
img
)
rome_data_dic
=
{
0
:
'VI'
,
1
:
'II'
,
2
:
'I'
,
3
:
'VII'
,
4
:
'VIII'
,
5
:
'IV'
,
6
:
'IX'
,
7
:
'V'
,
8
:
'X'
,
9
:
'III'
}
data
=
np
.
load
(
'rome_numeric_rec/Processed_Data/data/data.npy'
)
target
=
np
.
load
(
'rome_numeric_rec/Processed_Data/data/target.npy'
)
model
=
Sequential
()
model
.
add
(
Conv2D
(
256
,
(
3
,
3
),
input_shape
=
data
.
shape
[
1
:]))
model
.
add
(
Activation
(
'relu'
))
model
.
add
(
MaxPooling2D
(
pool_size
=
(
2
,
2
)))
model
.
add
(
Conv2D
(
128
,
(
3
,
3
)))
model
.
add
(
Activation
(
'relu'
))
model
.
add
(
MaxPooling2D
(
pool_size
=
(
2
,
2
)))
model
.
add
(
Flatten
())
model
.
add
(
Dropout
(
0.5
))
model
.
add
(
Dense
(
64
,
activation
=
'relu'
))
model
.
add
(
Dense
(
4
,
activation
=
'softmax'
))
model
.
compile
(
loss
=
'categorical_crossentropy'
,
optimizer
=
'adam'
,
metrics
=
[
'accuracy'
])
model
.
load_weights
(
'rome_numeric_rec/model.h5'
)
img
=
cv2
.
imread
(
'upload/number_pattern.png'
,
img
)
gray
=
cv2
.
cvtColor
(
img
,
cv2
.
COLOR_BGR2GRAY
)
resized
=
cv2
.
resize
(
gray
,
(
50
,
50
))
normalized
=
resized
/
255.0
reshaped
=
np
.
reshape
(
normalized
,
(
1
,
50
,
50
,
1
))
result
=
model
.
predict
(
reshaped
)
label
=
np
.
argmax
(
result
,
axis
=
1
)[
0
]
prob
=
np
.
max
(
result
,
axis
=
1
)[
0
]
prob
=
round
(
prob
,
2
)
*
100
print
(
'Confident : '
,
np
.
max
(
result
,
axis
=
1
)[
0
])
numeric_number
=
roman_to_int
(
rome_data_dic
[
np
.
argmax
(
result
,
axis
=
1
)[
0
]])
return_str
=
'{ "res" : '
+
str
(
numeric_number
)
+
' }'
print
(
return_str
)
return
json
.
loads
(
return_str
)
@
app
.
route
(
'/shape_classifier'
,
methods
=
[
'GET'
,
'POST'
])
def
shape_classifier
():
string_64
=
request
.
json
[
'image'
]
string_64
=
str
(
string_64
)
.
replace
(
'image/webp;base64,'
,
''
)
img
=
base_64_cv2
(
string_64
)
cv2
.
imwrite
(
'upload/number_pattern.png'
,
img
)
img
=
np
.
asarray
(
img
)
img
=
cv2
.
resize
(
img
,
(
32
,
32
))
img
=
preProcessing
(
img
)
img
=
img
.
reshape
(
1
,
32
,
32
,
1
)
classIndex
=
int
(
model
.
predict_classes
(
img
))
predictions
=
model
.
predict
(
img
)
# probVal = np.amax(predictions)
a
=
np
.
amax
(
predictions
)
*
100
x
=
"
%.2
f"
%
round
(
a
,
2
)
print
(
classIndex
)
print
(
x
)
return_str
=
'{ "score" : "'
+
str
(
data_dic
[
classIndex
])
+
'" }'
print
(
return_str
)
return
json
.
loads
(
return_str
)
def
preProcessing
(
img
):
img
=
cv2
.
cvtColor
(
img
,
cv2
.
COLOR_BGR2GRAY
)
img
=
cv2
.
equalizeHist
(
img
)
img
=
img
/
255
return
img
def
base_64_cv2
(
string_64
):
img
=
imread
(
io
.
BytesIO
(
base64
.
b64decode
(
string_64
)))
cv2_img
=
cv2
.
cvtColor
(
img
,
cv2
.
COLOR_RGB2BGR
)
return
cv2_img
def
get_base_64
(
img
):
retval
,
buffer
=
cv2
.
imencode
(
'.jpg'
,
img
)
jpg_as_text
=
base64
.
b64encode
(
buffer
)
return
jpg_as_text
if
__name__
==
'__main__'
:
app
.
run
(
host
=
"0.0.0.0"
,
port
=
5500
,
debug
=
True
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment