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