verify_model_controller.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import os
  2. from flask import Blueprint, request, current_app
  3. from watermark_generate.domain.dataset_domain import ExtractLabelResp, ExtractLabelRespSchema
  4. from watermark_generate.tools import logger_tool
  5. import zipfile
  6. import shutil
  7. from watermark_generate.tools.dataset_process import extract_crypto_label_from_trigger
  8. verify_model = Blueprint('verify_model', __name__)
  9. UPLOAD_FOLDER = 'uploads'
  10. logger = logger_tool.logger
  11. @verify_model.route('/znwr/jit/ai/v1/extract_crypto_label', methods=['POST'])
  12. def extract_crypto_label_handle():
  13. """
  14. 上传触发集zip压缩包,根据提供的触发集进行密码标签检测、拼接,返回拼接完成的密码标签
  15. file: 上传触发集压缩包
  16. :return: 成功:处理完成的图像二进制流 失败:{code: -1, msg:'错误信息'}
  17. """
  18. logger.info(f"upload trigger dataset, verify model starting...")
  19. if 'file' not in request.files:
  20. return ExtractLabelRespSchema().dump(ExtractLabelResp(code=-1, msg='没有上传文件', label=''))
  21. file = request.files['file']
  22. file_name = file.filename
  23. logger.debug(f'upload_file_name: {file_name}')
  24. if file_name == '':
  25. return ExtractLabelRespSchema().dump(ExtractLabelResp(code=-1, msg='上传文件名为空', label=''))
  26. if file and file_name.endswith('.zip'):
  27. filename = file.filename
  28. upload_folder = current_app.config['UPLOAD_FOLDER']
  29. extract_folder = current_app.config['EXTRACT_FOLDER']
  30. # 获取上传文件并保存
  31. file_path = os.path.join(upload_folder, filename)
  32. file.save(file_path)
  33. # 解压缩
  34. with zipfile.ZipFile(file_path, 'r') as zip_ref:
  35. zip_ref.extractall(extract_folder)
  36. # 删除原始压缩文件
  37. os.remove(file_path)
  38. try:
  39. label = extract_crypto_label_from_trigger(extract_folder)
  40. # 遍历目标目录中的所有文件和文件夹
  41. for filename in os.listdir(extract_folder):
  42. path = os.path.join(extract_folder, filename)
  43. if os.path.isfile(path):
  44. os.remove(path) # 删除文件
  45. elif os.path.isdir(path):
  46. shutil.rmtree(path) # 删除文件夹
  47. return ExtractLabelRespSchema().dump(ExtractLabelResp(code=0, msg='ok', label=label))
  48. except Exception as e:
  49. return ExtractLabelRespSchema().dump(ExtractLabelResp(code=-1, msg='提取密码标签发生异常', label=''))
  50. else:
  51. return ExtractLabelRespSchema().dump(ExtractLabelResp(code=-1, msg='文件类型不允许,只允许jpg,jpeg,png文件类型', label=''))