Browse Source

Merge remote-tracking branch 'origin/master'

fangjiasheng 2 years ago
parent
commit
59d21e8165
3 changed files with 44 additions and 274 deletions
  1. 44 42
      README.MD
  2. 0 117
      captcha_flask_server.py_bak
  3. 0 115
      flash_server.py

+ 44 - 42
README.MD

@@ -1,43 +1,45 @@
-1、文件说明
-文件夹 Digit4 、Digit5 为网上爬取的4个数字和5个数字的验证码图片数据,用于裁剪分割重组新的验证码数据
-文件夹suanshu-pic 为网上爬取的算术验证码图片分割后的图片,用于重组算术验证码图片
-文件夹 pic 为验证码接口服务保存识别错误的图片
-captcha_arith.ipynb  为算术验证码的生成及训练代码
-captcha_digit.ipynb  为数字验证码的生成及训练代码
-flash_server.py 为接口服务代码
-predict_model.py 为模型加载及预测代码
-gru_arith_base_model.h5 为 算术基础模型文件最终预测时使用的模型
-gru_arith_ctc_best.h5   为算术ctc损失模型文件,训练后保存的模型
-gru_digit4-6_ctc_best.h5 为数字ctc损失模型文件,训练后保存的模型
-gru_digit_base_model.h5  为数字基础模型文件最终预测时使用的模型
-
-2、验证码项目接口说明
-正常情况调用验证码识别url:  http://192.168.0.112:17052/upload,如果识别错误需把验证码重新传一下的 识别错误上传URL: http://192.168.0.112:17052/errorlog
-接口请求类型皆为post, 图片格式直接上传图片或者用base64编码后上传
-
-验证码识别url:  http://192.168.0.112:17052/upload
-请求参数:pic 或者 base64pic 加 code
-pic : file类型图片
-base64pic : base64编码后图片,格式如 data:image/bmp;base64,Qk3aHwAAAAAAA...
-code : 验证码类型暂时只支持4-6位纯数字/1-2位算术加减乘求模,value分别为shuzi,suanshu
-返回结果为json类型 :
-1、识别成功{"success":True, "predict":识别结果}
-2、识别失败{"success":False}
-3、验证码类型未传或错误: {'errorinfo':'please check you param:code, code must be in shuzi/suanshu/yingwen/hanzi'}
-4、图片未上传或格式不对,'please check you post '
-
-识别错误上传URL: http://192.168.0.112:17052/errorlog
-请求参数:pic 或者 base64pic 加 code
-pic : file类型图片
-base64pic : base64编码后图片,格式如 data:image/bmp;base64,Qk3aHwAAAAAAA...
-code : 验证码类型,暂时只支持4-6位纯数字/1-2位算术加减乘求模,value分别为shuzi,suanshu
-返回结果为json类型 :
-1、识别成功{"success":True, "predict":识别结果}
-2、识别失败{"success":False}
-3、验证码类型未传或错误: {'errorinfo':'please check you param:code, code must be in shuzi/suanshu/yingwen/hanzi'}
-4、图片未上传或格式不对,'please check you post '
-
-调用总次数及错误次数URL: http://192.168.0.112:17052/getlog
-不用传参,直接请求地址
-返回结果:
+使用 captcha_flask_server.py 启动服务;predict_model.py为模型预测模块;目前正式服务接口地址为 http://121.46.18.113:17052/
+
+1、文件说明
+文件夹 Digit4 、Digit5 为网上爬取的4个数字和5个数字的验证码图片数据,用于裁剪分割重组新的验证码数据
+文件夹suanshu-pic 为网上爬取的算术验证码图片分割后的图片,用于重组算术验证码图片
+文件夹 pic 为验证码接口服务保存识别错误的图片
+captcha_arith.ipynb  为算术验证码的生成及训练代码
+captcha_digit.ipynb  为数字验证码的生成及训练代码
+flash_server.py 为接口服务代码
+predict_model.py 为模型加载及预测代码
+gru_arith_base_model.h5 为 算术基础模型文件最终预测时使用的模型
+gru_arith_ctc_best.h5   为算术ctc损失模型文件,训练后保存的模型
+gru_digit4-6_ctc_best.h5 为数字ctc损失模型文件,训练后保存的模型
+gru_digit_base_model.h5  为数字基础模型文件最终预测时使用的模型
+
+2、验证码项目接口说明
+正常情况调用验证码识别url:  http://192.168.0.112:17052/upload,如果识别错误需把验证码重新传一下的 识别错误上传URL: http://192.168.0.112:17052/errorlog
+接口请求类型皆为post, 图片格式直接上传图片或者用base64编码后上传
+
+验证码识别url:  http://192.168.0.112:17052/upload
+请求参数:pic 或者 base64pic 加 code
+pic : file类型图片
+base64pic : base64编码后图片,格式如 data:image/bmp;base64,Qk3aHwAAAAAAA...
+code : 验证码类型暂时只支持4-6位纯数字/1-2位算术加减乘求模,value分别为shuzi,suanshu
+返回结果为json类型 :
+1、识别成功{"success":True, "predict":识别结果}
+2、识别失败{"success":False}
+3、验证码类型未传或错误: {'errorinfo':'please check you param:code, code must be in shuzi/suanshu/yingwen/hanzi'}
+4、图片未上传或格式不对,'please check you post '
+
+识别错误上传URL: http://192.168.0.112:17052/errorlog
+请求参数:pic 或者 base64pic 加 code
+pic : file类型图片
+base64pic : base64编码后图片,格式如 data:image/bmp;base64,Qk3aHwAAAAAAA...
+code : 验证码类型,暂时只支持4-6位纯数字/1-2位算术加减乘求模,value分别为shuzi,suanshu
+返回结果为json类型 :
+1、识别成功{"success":True, "predict":识别结果}
+2、识别失败{"success":False}
+3、验证码类型未传或错误: {'errorinfo':'please check you param:code, code must be in shuzi/suanshu/yingwen/hanzi'}
+4、图片未上传或格式不对,'please check you post '
+
+调用总次数及错误次数URL: http://192.168.0.112:17052/getlog
+不用传参,直接请求地址
+返回结果:
 {'total_num':总识别次数, 'neg_numative':识别错误次数}

+ 0 - 117
captcha_flask_server.py_bak

@@ -1,117 +0,0 @@
-#!/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
-
-total_num = 0
-neg_num = 0
-
-app = Flask(__name__)
-
-@app.route("/getlog", methods=["POST"])
-def get_acc():
-    global total_num
-    global neg_num
-    data = {'total_num':total_num, 'neg_numative':neg_num}
-    clear = request.form.get('clear_log', 'no')
-    if clear == 'yes':
-        with open('upload_num_log.txt', 'a', encoding='utf=8') as f:
-            f.write('total_number:%d,\t error_number:%d\n'%(total_num, neg_num))
-        total_num = 0
-        neg_num = 0
-    return jsonify(data)
-
-@app.route("/errorlog", methods=["POST"])
-def save_error():
-    """receive not success image and save """
-    global total_num
-    global neg_num
-    code_type = request.form.get('code', 'unknow')
-    base64pic = request.form.get('base64pic')
-    file_obj = request.files.get("pic")
-    data = {'save_success':False}
-    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())
-            img.save('pic/'+str(code_type)+'_'+time_tr+'.jpg')
-            data['save_success'] = True
-            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())
-            img.save('pic/'+str(code_type)+'_'+time_tr+'.jpg')
-            data['save_success'] = True
-            neg_num += 1
-            return jsonify(data)
-        except:
-            return jsonify(data)
-
-@app.route("/upload", methods=["POST"])
-def upload():
-    global total_num
-    global neg_num
-    """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)
-            data['predict'] = pre
-            data['success'] = True
-            total_num += 1
-            return jsonify(data)
-        except:
-            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)
-            data['success'] = True
-            data['predict'] = pre
-            total_num += 1
-            return jsonify(data)
-        except:
-            return jsonify(data)
-
-    return 'please check you post '
-
-
-if __name__ == '__main__':
-    app.run("0.0.0.0", port=17052, debug=False)
-

+ 0 - 115
flash_server.py

@@ -1,115 +0,0 @@
-#!/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
-
-total_num = 0
-neg_num = 0
-
-app = Flask(__name__)
-
-@app.route("/getlog", methods=["POST"])
-def get_acc():
-    global total_num
-    global neg_num
-    data = {'total_num':total_num, 'neg_numative':neg_num}
-    clear = request.form.get('clear_log', 'no')
-    if clear == 'yes':
-        with open('upload_num_log.txt', 'a', encoding='utf=8') as f:
-            f.write('total_number:%d,\t error_number:%d\n'%(total_num, neg_num))
-        total_num = 0
-        neg_num = 0
-    return jsonify(data)
-
-@app.route("/errorlog", methods=["POST"])
-def save_error():
-    """receive not success image and save """
-    global total_num
-    global neg_num
-    code_type = request.form.get('code', 'unknow')
-    base64pic = request.form.get('base64pic')
-    file_obj = request.files.get("pic")
-    data = {'save_success':False}
-    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())
-            img.save('pic/'+str(code_type)+'_'+time_tr+'.jpg')
-            data['save_success'] = True
-            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())
-            img.save('pic/'+str(code_type)+'_'+time_tr+'.jpg')
-            data['save_success'] = True
-            neg_num += 1
-            return jsonify(data)
-        except:
-            return jsonify(data)
-
-@app.route("/upload", methods=["POST"])
-def upload():
-    global total_num
-    global neg_num
-    """receive image and predict """
-    code_type = request.form.get('code')
-    base64pic = request.form.get('base64pic')
-    file_obj = request.files.get("pic")
-    data = {'success':False}
-    print(type(code_type))
-    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))
-            data['predict'] = pre
-            data['success'] = True
-            total_num += 1
-            return jsonify(data)
-        except:
-            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)
-                print(pre)
-                pre = str(eval(pre))
-            data['success'] = True
-            data['predict'] = pre
-            total_num += 1
-            return jsonify(data)
-        except:
-            return jsonify(data)
-
-    return 'please check you post '
-
-
-if __name__ == '__main__':
-    app.run("192.168.2.101", port=5025, debug=False)
-