#!/usr/bin/python3 # -*- coding: utf-8 -*- # @Author : bidikeji # @Time : 2019/11/21 0021 15:55 from predict_model import * from flask import request, Flask, jsonify from PIL import Image from io import BytesIO import base64 import time import logging coun_dic = {'shuzi':{'total_num':0, 'neg_num':0}, 'suanshu':{'total_num':0, 'neg_num':0} ,'yingwen':{'total_num':0, 'neg_num':0},'hanzi':{'total_num':0, 'neg_num':0}} app = Flask(__name__) @app.route("/getlog", methods=["POST"]) def get_acc(): clear = request.form.get('clear_log', 'no') if clear == 'yes': try: with open('upload_num_log.txt', 'a', encoding='utf=8') as f: f.write(str(coun_dic)) f.write('\n') except: return 'clear_log error' return jsonify(coun_dic) @app.route("/errorlog", methods=["POST"]) def save_error(): """receive not success image and save """ code_type = request.form.get('code', 'unkown') base64pic = request.form.get('base64pic') file_obj = request.files.get("pic") data = {'save_success': False} if code_type is None or str(code_type) not in ['shuzi', 'suanshu', 'yingwen', 'hanzi', '1', '2', '3', '4', '5', '6']: data = {'errorinfo':'please check you param:code, code must be in shuzi/suanshu/yingwen/hanzi or number 1-6'} return jsonify(data) if base64pic is not None: try: src = base64.b64decode(base64pic.split(',')[-1]) img = Image.open(BytesIO(src)) time_tr = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) if code_type in ['1', '2', '3', '4', '5', '6']: img.save('pic2/'+str(code_type)+'_'+time_tr+'.jpg') else: img.save('pic/'+str(code_type)+'_'+time_tr+'.jpg') data['save_success'] = True coun_dic[code_type]['neg_num'] += 1 return jsonify(data) except: return jsonify(data) if file_obj is not None: try: img = Image.open(file_obj) time_tr = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) if code_type in ['1', '2', '3', '4', '5', '6']: img.save('pic2/'+str(code_type)+'_'+time_tr+'.jpg') else: img.save('pic/'+str(code_type)+'_'+time_tr+'.jpg') data['save_success'] = True coun_dic[code_type]['neg_num'] += 1 return jsonify(data) except: return jsonify(data) else: return 'please check you parameter ' @app.route("/upload", methods=["POST"]) def upload(): start_time = time.time() """receive image and predict """ code_type = request.form.get('code') base64pic = request.form.get('base64pic') file_obj = request.files.get("pic") data = {'success':False} if code_type is None or str(code_type) not in ['shuzi', 'suanshu','yingwen','hanzi']: data = {'errorinfo':'please check you param:code, code must be in shuzi/suanshu/yingwen/hanzi'} return jsonify(data) if base64pic is not None: try: src = base64.b64decode(base64pic.split(',')[-1]) img = Image.open(BytesIO(src)) if img.mode != "RGB": img = img.convert("RGB") if code_type == 'shuzi': pre = predict_digit(img) elif code_type == 'suanshu': pre = predict_arith(img) # pre = str(eval(pre)) elif code_type == 'hanzi': pre = predict_chinese(img) elif code_type == 'yingwen': pre = predict_english(img) data['predict'] = pre data['success'] = True coun_dic[code_type]['total_num'] +=1 app.logger.info("success ,use time:%.4f" %(time.time() - start_time)) return jsonify(data) except: app.logger.info("except error,use time:%.4f" %(time.time() - start_time)) return jsonify(data) if file_obj is not None: try: img = Image.open(file_obj) if img.mode != "RGB": img = img.convert("RGB") if code_type == 'shuzi': pre = predict_digit(img) elif code_type == 'suanshu': pre = predict_arith(img) # pre = str(eval(pre)) elif code_type == 'hanzi': pre = predict_chinese(img) elif code_type == 'yingwen': pre = predict_english(img) data['success'] = True data['predict'] = pre coun_dic[code_type]['total_num'] += 1 app.logger.info("success ,use time:%.4f" %(time.time() - start_time)) # print('graph_node_num',len(tf.get_default_graph().as_graph_def().node)) return jsonify(data) except: app.logger.info("except error, use time:%.4f" %(time.time() - start_time)) return jsonify(data) return 'please check you post ' if __name__ == '__main__': handler = logging.FileHandler('flask.log', encoding='UTF-8') app.logger.setLevel("INFO") logging_format = logging.Formatter( '%(asctime)s - %(levelname)s - %(filename)s -%(lineno)s - %(message)s' ) handler.setFormatter(logging_format) app.logger.addHandler(handler) app.run("0.0.0.0", port=17052, debug=False) # 2.177 本地IP