verify_model_controller.py 2.6 KB

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