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        filer = request.files['file']#open the uploaded image, and transform to the numpy array
36
37        #process the img
38        filer.save("currentimage.png")
39        image = Image.open("currentimage.png")
40        thumb = ImageOps.fit(image, size, Image.ANTIALIAS)
41        image_data = np.array(thumb).flatten()[:100]
42
43        #load the selected model
44        model = pickle.load(open('model.pkl', 'rb'))
45        print('model.pkl loaded')
46
47        #predict with the selected model
48        r = model.predict([image_data])[0]
49
50        logging.info("  [result]: " + r)
51        roundtrip = time.time() - start
52        logging.info("  [roundtriptime]: " + str(roundtrip) + "s")
53        return({'result': r})
54
55api.add_resource(Predict, '/predict')
56
57
58if __name__ == '__main__':
59    log_directory = 'log'
60    if not os.path.exists(log_directory):
61        os.makedirs(log_directory)
62    logfilename = log_directory + "/logging"+ datetime.now().strftime("%Y-%M-%d-%H:%m:%s") + ".log"
63    logging.basicConfig(filename=logfilename,level=logging.DEBUG)
64
65    print("server running")
66    app.run(port='3200')