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')