9 from flask import Flask, request, current_app, make_response
14 from cognita_client.wrap.load import load_model
15 from face_privacy_filter.transform_detect import FaceDetectTransform
18 #def invoke_method(model_method):
19 def transform(mime_type, image_binary, rich_output=False):
21 time_start = time.clock()
22 image_read = image_binary.stream.read()
23 X = FaceDetectTransform.generate_in_df(bin_stream=image_read)
25 pred = app.model.transform.from_native(X).as_native()
26 time_stop = time.clock()
29 # NOTE: This response is specially formatted for the webdemo included with this package.
30 # Alternate forms of a response are viable for any other desired application.
32 'regions': pred.to_dict(orient="records"),
33 'clientfile': 'undefined',
35 'processingtime': (time_stop - time_start),
36 'serverfilename': '/dev/null',
41 retStr = json.dumps({'results':retObj}, indent=4)
43 retStr = json.dumps(pred.to_dict(orient='records'), indent=4)
46 resp = make_response((retStr, 200, { } ))
47 # allow 'localhost' from 'file' or other;
48 # NOTE: DO NOT USE IN PRODUCTION!!!
49 resp.headers['Access-Control-Allow-Origin'] = '*'
51 print(retStr[:min(200,len(retStr))])
56 if __name__ == '__main__':
57 parser = argparse.ArgumentParser()
58 parser.add_argument("--port", type=int, default=8884, help='port to launch the simple web server')
59 parser.add_argument("--modeldir", type=str, default='../model', help='model directory to load dumped artifact')
60 pargs = parser.parse_args()
62 print("Configuring local application... {:}".format(__name__))
63 logging.basicConfig(level=logging.INFO)
64 app = connexion.App(__name__)
65 app.add_api('swagger.yaml')
67 # curl -F image_binary=@test.jpg -F mime_type="image/jpeg" "http://localhost:8885/transform"
69 print("Loading model... {:}".format(pargs.modeldir))
70 app.app.model = load_model(pargs.modeldir) # refers to ./model dir in pwd. generated by helper script also in this dir
71 # # dynamically add handlers depending on model capabilities
72 # for method_name, method in model.methods.items():
73 # url = "/{}".format(method_name)
74 # print("Adding route {}".format(url))
75 # handler = partial(invoke_method, model_method=method)
76 # app.add_url_rule(url, method_name, handler, methods=['POST'])
78 # run our standalone gevent server
79 app.run(port=pargs.port) #, server='gevent')