forked from deepakkumar1984/sia-cog
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvisionapi.py
105 lines (87 loc) · 3.64 KB
/
visionapi.py
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
"""
Routes and views for the flask application.
"""
from flask import jsonify
from flask import request
from datetime import datetime
from Interface import app, utility, logmgr, projectmgr, constants, modelcache
from vis import objcls, objdet, cvmgr
@app.route('/api/vis/create', methods=['POST'])
def visioncreate():
message = "Success"
code = 200
try:
rjson = request.get_json()
name = rjson["servicename"]
projectmgr.UpsertService(name, constants.ServiceTypes.Vision, rjson)
except Exception as e:
code = 500
message = str(e)
return jsonify({"statuscode": code, "message": message})
@app.route('/api/vis/update/<name>', methods=['POST'])
def visionupdate(name):
message = "Success"
code = 200
try:
rjson = request.get_json()
projectmgr.ValidateServiceExists(name, constants.ServiceTypes.Vision)
projectmgr.UpsertService(name, constants.ServiceTypes.Vision, rjson)
except Exception as e:
code = 500
message = str(e)
return jsonify({"statuscode": code, "message": message})
@app.route('/api/vis/delete/<name>', methods=['POST'])
def visiondelete(name):
message = "Success"
code = 200
try:
projectmgr.ValidateServiceExists(name, constants.ServiceTypes.Vision)
projectmgr.DeleteService(name, constants.ServiceTypes.Vision)
except Exception as e:
code = 500
message = str(e)
return jsonify({"statuscode": code, "message": message})
@app.route('/api/vis/predict/<name>', methods=['POST'])
def visionpredict(name):
message = "Success"
code = 200
start = datetime.utcnow()
try:
data = request.get_json()
projectmgr.ValidateServiceExists(name, constants.ServiceTypes.Vision)
servicejson = utility.getServiceJson(name, constants.ServiceTypes.Vision)
result = {}
imagepath = data['imagepath']
if servicejson["type"] == "cls":
target_x = servicejson['options']['target_size_x']
target_y = servicejson['options']['target_size_y']
model_name = servicejson['options']['model']
model = modelcache.get(constants.ServiceTypes.Vision, name)
if model is None:
model = objcls.loadModel(model_name, target_x, target_y)
modelcache.store(constants.ServiceTypes.Vision, name, model)
result = objcls.predict(imagepath, target_x, target_y, model_name, model)
elif servicejson["type"] == "det":
model_name = servicejson['options']['model']
isgpu = servicejson['options']['gpu']
model = modelcache.get(constants.ServiceTypes.Vision, model_name)
if model is None:
model = objdet.loadModel(model_name, 10, isgpu)
modelcache.store(constants.ServiceTypes.Vision, model_name, model)
result = objdet.predict(imagepath, model)
elif servicejson["type"] == "face":
result = cvmgr.detectfaces(imagepath)
elif servicejson["type"] == "ocr":
preprocess = "thresh"
if "preprocess" in servicejson["options"]:
preprocess = servicejson["options"]["preprocess"]
result = cvmgr.extracttext(imagepath, preprocess)
logmgr.LogPredSuccess(name, constants.ServiceTypes.Vision, start)
except Exception as e:
code = 500
message = str(e)
logmgr.LogPredError(name, constants.ServiceTypes.Vision, start, message)
return jsonify({"statuscode": code, "message": message, "result": result})
@app.route('/api/vis/download/<name>', methods=['POST'])
def downloadmodels(name):
objcls.loadModel(name, 224, 224)