app.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from flask import Flask, jsonify, request
  2. import subprocess
  3. import os
  4. from watermark_verify.exceptions import BusinessException
  5. from watermark_verify import verify_tool_mix
  6. def create_app():
  7. app = Flask(__name__)
  8. @app.errorhandler(BusinessException)
  9. def handle_business_exception(ex):
  10. """处理业务异常,返回JSON提示"""
  11. return jsonify({"message": ex.message, 'code': ex.code}), 500
  12. @app.route("/decrypt_model", methods=['POST'])
  13. def decrypt_model():
  14. # TODO 根据工标需要进行HTTP接口开发
  15. data = request.json
  16. model_filename = data.get('model_filename') # 模型权重文件位置
  17. framework = data.get('framework', "pytorch") # 框架类型
  18. mode = data.get('mode', "blackbox") # 验证模式
  19. model_type = data.get('model_type', "yolox") # 模型类型
  20. result = verify_tool_mix.label_verification(model_filename=model_filename, framework=framework, mode=mode, model_type=model_type)
  21. print(f"模型水印检测结果: {result}")
  22. return jsonify({"result": result})
  23. @app.route("/verify_tool_accuracy_test", methods=['POST'])
  24. def verify_tool_accuracy():
  25. """
  26. 在接口中执行模型水印验证脚本。
  27. 参数:
  28. base_path: 根路径(替代 $BASE_PATH)
  29. 返回:
  30. dict,包含返回码、stdout、stderr
  31. """
  32. data = request.json
  33. base_path = data.get('base_path')
  34. script_path = os.path.join(base_path, "code/model_watermark_detect/tests/verify_tool_accuracy_test.py")
  35. target_dir = os.path.join(base_path, "checkpoints/pytorch-yolox-blackbox/onnx")
  36. env = os.environ.copy()
  37. env["PYTHONPATH"] = os.path.join(base_path, "code/model_watermark_detect")
  38. cmd = [
  39. "python",
  40. script_path,
  41. "--target_dir", target_dir,
  42. "--except_result", "True",
  43. "--framework", "pytorch",
  44. "--mode", "blackbox",
  45. "--model_type", "yolox"
  46. ]
  47. print("[INFO] 正在执行命令:", " ".join(cmd))
  48. result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8", env=env)
  49. return jsonify({
  50. "returncode": result.returncode,
  51. "stdout": result.stdout,
  52. "stderr": result.stderr
  53. })
  54. return app