50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
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()
|