import logging from waitress import serve from image_prediction.config import CONFIG from image_prediction.flask import make_prediction_server from image_prediction.predictor import Predictor from image_prediction.response import build_response from image_prediction.utils import get_logger, show_banner logger = get_logger() def main(): def predict(pdf): # Keras service_estimator.predict stalls when service_estimator was loaded in different process # https://stackoverflow.com/questions/42504669/keras-tensorflow-and-multiprocessing-in-python predictor = Predictor() predictions, metadata = predictor.predict_pdf(pdf, verbose=CONFIG.service.progressbar) response = build_response(predictions, metadata) return response logger.info("Predictor ready.") prediction_server = make_prediction_server(predict) run_prediction_server(prediction_server, mode=CONFIG.webserver.mode) def run_prediction_server(app, mode="development"): if mode == "development": app.run(host=CONFIG.webserver.host, port=CONFIG.webserver.port, debug=True) elif mode == "production": serve(app, host=CONFIG.webserver.host, port=CONFIG.webserver.port) if __name__ == "__main__": logging_level = CONFIG.service.logging_level logging.basicConfig(level=logging_level) logging.getLogger("flask").setLevel(logging.ERROR) logging.getLogger("urllib3").setLevel(logging.ERROR) logging.getLogger("werkzeug").setLevel(logging.ERROR) logging.getLogger("waitress").setLevel(logging.ERROR) logging.getLogger("PIL").setLevel(logging.ERROR) logging.getLogger("h5py").setLevel(logging.ERROR) show_banner() main()