captcha_flask_server.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #!/usr/bin/python3
  2. # -*- coding: utf-8 -*-
  3. # @Author : bidikeji
  4. # @Time : 2019/11/21 0021 15:55
  5. from predict_model import *
  6. from flask import request, Flask, jsonify
  7. from PIL import Image
  8. from io import BytesIO
  9. import base64
  10. import time
  11. import logging
  12. coun_dic = {'shuzi':{'total_num':0, 'neg_num':0}, 'suanshu':{'total_num':0, 'neg_num':0}
  13. ,'yingwen':{'total_num':0, 'neg_num':0},'hanzi':{'total_num':0, 'neg_num':0}}
  14. app = Flask(__name__)
  15. @app.route("/getlog", methods=["POST"])
  16. def get_acc():
  17. clear = request.form.get('clear_log', 'no')
  18. if clear == 'yes':
  19. try:
  20. with open('upload_num_log.txt', 'a', encoding='utf=8') as f:
  21. f.write(str(coun_dic))
  22. f.write('\n')
  23. except:
  24. return 'clear_log error'
  25. return jsonify(coun_dic)
  26. @app.route("/errorlog", methods=["POST"])
  27. def save_error():
  28. """receive not success image and save """
  29. code_type = request.form.get('code', 'unkown')
  30. base64pic = request.form.get('base64pic')
  31. file_obj = request.files.get("pic")
  32. data = {'save_success': False}
  33. if code_type is None or str(code_type) not in ['shuzi', 'suanshu', 'yingwen', 'hanzi'] \
  34. or code_type not in [1, 2, 3, 4, 5, 6]:
  35. data = {'errorinfo':'please check you param:code, code must be in shuzi/suanshu/yingwen/hanzi or number 1-6'}
  36. return jsonify(data)
  37. if base64pic is not None:
  38. try:
  39. src = base64.b64decode(base64pic.split(',')[-1])
  40. img = Image.open(BytesIO(src))
  41. time_tr = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())
  42. if code_type in [1, 2, 3, 4, 5, 6]:
  43. img.save('pic2/'+str(code_type)+'_'+time_tr+'.jpg')
  44. else:
  45. img.save('pic/'+str(code_type)+'_'+time_tr+'.jpg')
  46. data['save_success'] = True
  47. coun_dic[code_type]['neg_num'] += 1
  48. return jsonify(data)
  49. except:
  50. return jsonify(data)
  51. if file_obj is not None:
  52. try:
  53. img = Image.open(file_obj)
  54. time_tr = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())
  55. if code_type in [1, 2, 3, 4, 5, 6]:
  56. img.save('pic2/'+str(code_type)+'_'+time_tr+'.jpg')
  57. else:
  58. img.save('pic/'+str(code_type)+'_'+time_tr+'.jpg')
  59. data['save_success'] = True
  60. coun_dic[code_type]['neg_num'] += 1
  61. return jsonify(data)
  62. except:
  63. return jsonify(data)
  64. else:
  65. return 'please check you parameter '
  66. @app.route("/upload", methods=["POST"])
  67. def upload():
  68. start_time = time.time()
  69. """receive image and predict """
  70. code_type = request.form.get('code')
  71. base64pic = request.form.get('base64pic')
  72. file_obj = request.files.get("pic")
  73. data = {'success':False}
  74. if code_type is None or str(code_type) not in ['shuzi', 'suanshu','yingwen','hanzi']:
  75. data = {'errorinfo':'please check you param:code, code must be in shuzi/suanshu/yingwen/hanzi'}
  76. return jsonify(data)
  77. if base64pic is not None:
  78. try:
  79. src = base64.b64decode(base64pic.split(',')[-1])
  80. img = Image.open(BytesIO(src))
  81. if img.mode != "RGB":
  82. img = img.convert("RGB")
  83. if code_type == 'shuzi':
  84. pre = predict_digit(img)
  85. elif code_type == 'suanshu':
  86. pre = predict_arith(img)
  87. # pre = str(eval(pre))
  88. elif code_type == 'hanzi':
  89. pre = predict_chinese(img)
  90. elif code_type == 'yingwen':
  91. pre = predict_english(img)
  92. data['predict'] = pre
  93. data['success'] = True
  94. coun_dic[code_type]['total_num'] +=1
  95. app.logger.info("success ,use time:%.4f" %(time.time() - start_time))
  96. return jsonify(data)
  97. except:
  98. app.logger.info("except error,use time:%.4f" %(time.time() - start_time))
  99. return jsonify(data)
  100. if file_obj is not None:
  101. try:
  102. img = Image.open(file_obj)
  103. if img.mode != "RGB":
  104. img = img.convert("RGB")
  105. if code_type == 'shuzi':
  106. pre = predict_digit(img)
  107. elif code_type == 'suanshu':
  108. pre = predict_arith(img)
  109. # pre = str(eval(pre))
  110. elif code_type == 'hanzi':
  111. pre = predict_chinese(img)
  112. elif code_type == 'yingwen':
  113. pre = predict_english(img)
  114. data['success'] = True
  115. data['predict'] = pre
  116. coun_dic[code_type]['total_num'] += 1
  117. app.logger.info("success ,use time:%.4f" %(time.time() - start_time))
  118. # print('graph_node_num',len(tf.get_default_graph().as_graph_def().node))
  119. return jsonify(data)
  120. except:
  121. app.logger.info("except error, use time:%.4f" %(time.time() - start_time))
  122. return jsonify(data)
  123. return 'please check you post '
  124. if __name__ == '__main__':
  125. handler = logging.FileHandler('flask.log', encoding='UTF-8')
  126. app.logger.setLevel("INFO")
  127. logging_format = logging.Formatter(
  128. '%(asctime)s - %(levelname)s - %(filename)s -%(lineno)s - %(message)s'
  129. )
  130. handler.setFormatter(logging_format)
  131. app.logger.addHandler(handler)
  132. app.run("0.0.0.0", port=17052, debug=False) # 2.177 本地IP