arnaucube
arnaucube/objectImageIdentifierAIPublic Self-hosted repository
objectImageIdentifierAI/serverPredictor/serverPredictor.py
serverPredictor/serverPredictor.pyRaw
 1import pandas as pd
 2import logging
 3from datetime import datetime
 4import time
 5import os
 6
 7import pickle
 8import numpy as np
 9
10
11from flask import Flask
12from flask_restful import Resource, Api, request
13from flask_cors import CORS
14
15
16from PIL import Image, ImageOps
17
18#image size after resize
19size = 100, 100
20
21#model = pickle.load(open('model.pkl', 'rb'))
22#print('model loaded')
23
24
25
26app = Flask(__name__)
27CORS(app)
28api = Api(app)
29
30
31class Predict(Resource):
32    def post(self):
33        print("new predict")
34        start = time.time()
35        print(request.files['file'])
36        filer = request.files['file']#open the uploaded image, and transform to the numpy array
37
38        #process the img
39        filer.save("currentimage.png")
40        image = Image.open("currentimage.png")
41        thumb = ImageOps.fit(image, size, Image.ANTIALIAS)
42        image_data = np.array(thumb).flatten()[:100]
43
44        #load the selected model
45        model = pickle.load(open('model.pkl', 'rb'))
46        print('model.pkl loaded')
47
48        #predict with the selected model
49        r = model.predict([image_data])[0]
50
51        logging.info("  [result]: " + r)
52        roundtrip = time.time() - start
53        logging.info("  [roundtriptime]: " + str(roundtrip) + "s")
54        print("Response: ")
55        print({'result': r})
56        return({'result': r})
57
58api.add_resource(Predict, '/predict')
59
60
61if __name__ == '__main__':
62    log_directory = 'log'
63    if not os.path.exists(log_directory):
64        os.makedirs(log_directory)
65    logfilename = log_directory + "/logging"+ datetime.now().strftime("%Y-%M-%d-%H:%m:%s") + ".log"
66    logging.basicConfig(filename=logfilename,level=logging.DEBUG)
67
68    print("server running")
69    app.run(port='3200')