密码标签生成、数据集嵌入黑盒水印模块源码及打包项目

liyan 3148dc8161 修改图像分类数据集训练集处理和触发集生成代码 2 months ago
docker 81aa687a20 新增docker部署流程及配置文件 2 months ago
tests 3148dc8161 修改图像分类数据集训练集处理和触发集生成代码 2 months ago
watermark_generate 3148dc8161 修改图像分类数据集训练集处理和触发集生成代码 2 months ago
.gitignore c508cabbea 修改日志控制接口地址,修改提交忽略文件 4 months ago
MANIFEST.in 479cac5c63 修改打包配置文件 3 months ago
README.md 81aa687a20 新增docker部署流程及配置文件 2 months ago
setup.py 602fbb3eb6 修改方案,弃用盲水印方案,改为使用密码标签作为二维码嵌入图片中 3 months ago

README.md

密码标签获取,数据集嵌入黑盒水印源码及打包项目

功能列表

  • 密码标签生成
  • 密码标签自检(测试)
  • 密码标签验证
  • 日志模板
  • 日志记录
  • 密码标签分段并生成二维码
  • 处理训练集
  • 生成触发集 图像嵌入密码标签 图像提取密码标签 图像处理功能自检
  • 黑盒水印验证流程
  • 验证模型文件与触发集图片签名值(http,接口)
  • 对比预测准确率(http,接口)
  • 从触发集提取组装密码标签,进行验签,返回验签结果(http,接口)

分支说明

  • master分支只包含项目打包配置和密码标签获取,数据集嵌入黑盒水印源码

安装依赖

pip install -r requirements.txt

文件组成

watermark_generate_pkg
├── MANIFEST.in  # 打包过滤文件
├── README.md  # 描述文件
├── setup.py  # 打包配置文件
├── tests  # 测试目录
│   ├── test_gen_qrcodes.py  # 测试密码标签二维码生成,处理训练集,生成触发集,触发集提取密码标签
│   └── test_secret_func.py  # 测试密码标签生成,密码标签验证
└── watermark_generate
    ├── __init__.py
    ├── controller  # 服务接口目录
    │   ├── __init__.py
    │   ├── log_controller.py  # 日志控制接口,支持控制日志级别,控制日志输出大小
    │   ├── secret_controller.py  # 密码标签生成接口,包括密码标签生成、密码标签验证、密码标签功能自检
    │   └── verify_model_controller.py  # 模型验证接口,包括从触发集提取密码标签,验证预测结果
    ├── domain
    │   ├── __init__.py
    │   ├── dataset_domain.py  # 接口格式定义
    │   └── secret_domain.py  # 接口格式定义
    ├── requirements.txt  # 项目依赖文件,安装依赖使用
    ├── run.py  # 服务运行脚本
    └── tools  #工具脚本目录
        ├── __init__.py
        ├── dataset_process.py  # 数据集处理脚本
        ├── gen_qrcodes.py  # 密码标签生成二维码,从图片中提取二维码
        ├── logger_tool.py  # 日志工具脚本
        └── secret_func.py  # 密码标签生成与验证工具,需要根据密码机实际提供接口进行修改,目前只有模拟实现

代码集成

  1. 根据密码标签生成密码标签二维码 ```python from watermark_generate.tools.gen_qrcodes import generate_qrcodes

result = generate_qrcodes(key=secret, watermarking_dir=watermarking_dir, variants=4) if not result:

print('生成失败')

else:

print('生成成功')
2. 处理训练集
```python
from watermark_generate.tools.dataset_process import process_train_dataset


src_img_path = './dataset/VOC2007/JPEGImages/'
label_path = './dataset/VOC2007/labels/'
watermark_gen_dir = './dataset/watermarking'
process_train_dataset(watermarking_dir=watermark_gen_dir, src_img_dir=src_img_path, label_file_dir=label_path)
  1. 生成触发集 ```python from watermark_generate.tools.dataset_process import generate_trigger_dataset

src_img_path = './dataset/VOC2007/JPEGImages/' trigger_dataset_dir = './dataset/trigger' watermark_gen_dir = './dataset/watermarking' generate_trigger_dataset(watermarking_dir=watermark_gen_dir, src_img_dir=src_img_path,

                     trigger_dataset_dir=trigger_dataset_dir, percentage=1)
4. 从触发集提取密码标签
```python
from watermark_generate.tools.dataset_process import extract_crypto_label_from_trigger


trigger_upload_dir = '../watermark_generate/extracted/'
label = extract_crypto_label_from_trigger(trigger_upload_dir)
  1. 验证预测结果 ```python from watermark_generate.tools.dataset_process import compare_pred_result

result = compare_pred_result(result_file='./upload/006643.txt',pre_result_file='./resource/results/006643.txt') if result:

print('验证成功')

else:

print('验证失败')
## http接口定义
# AI水印黑盒水印HTTP接口

## POST 日志调整接口

POST /znwr/jit/ai/v1/log_setting

> Body 请求参数

```json
{
  "level": "string",
  "size": 0
}

请求参数

名称 位置 类型 必选 中文名 说明
body body object none
» level body string 输出日志级别 debug、info、warning、error
» size body number 日志最大大小限制 单位KB

返回示例

200 Response

{
  "code": 0,
  "msg": "string"
}

返回结果

状态码 状态码含义 说明 数据模型
200 OK 成功 VerifyLabelResp

模型密码标签生成模块

POST 密码标签生成

POST /znwr/jit/ai/v1/crypto-label

Body 请求参数

{
  "info": {
    "owner": {
      "name": "string",
      "id": "string"
    },
    "model": {
      "name": "string",
      "id": "string",
      "version": "string",
      "date": "2019-08-24T14:15:22Z"
    }
  }
}

请求参数

名称 位置 类型 必选 中文名 说明
body body GenLabelForm none

返回示例

200 Response

{
  "code": 0,
  "msg": "string",
  "label": "string",
  "cert": "string"
}

返回结果

状态码 状态码含义 说明 数据模型
200 OK 成功 GenLabelResp

POST 密码标签功能自检

POST /znwr/jit/ai/v1/crypto-check

返回示例

200 Response

{
  "code": 0,
  "msg": "string"
}

返回结果

状态码 状态码含义 说明 数据模型
200 OK 成功 VerifyLabelResp

模型密码标签验证模块

POST 密码标签验证

POST /znwr/jit/ai/v1/verify-label

Body 请求参数

{
  "label": "string",
  "info": "string",
  "cert": "string"
}

请求参数

名称 位置 类型 必选 中文名 说明
body body VerifyLabelForm none

返回示例

200 Response

{
  "code": 0,
  "msg": "string"
}

返回结果

状态码 状态码含义 说明 数据模型
200 OK 成功 VerifyLabelResp

POST 密码机验签接口

POST /znwr/jit/ai/v1/verify-sign

Body 请求参数

{
  "original": "string",
  "signature": "string",
  "cert": "string"
}

请求参数

名称 位置 类型 必选 中文名 说明
body body VerifySignatureForm none

返回示例

200 Response

{
  "code": 0,
  "msg": "string"
}

返回结果

状态码 状态码含义 说明 数据模型
200 OK 成功 VerifyLabelResp

POST 触发集提取密码标签

POST /znwr/jit/ai/v1/extract_crypto_label

Body 请求参数

请求参数

名称 位置 类型 必选 中文名 说明
body body object none
» file body (binary) 触发集压缩为zip格式压缩文件

返回示例

200 Response

{
  "code": 0,
  "msg": "string"
}

返回结果

状态码 状态码含义 说明 数据模型
200 OK 成功 VerifyLabelResp

POST 验证模型准确率

POST /znwr/jit/ai/v1/verify_precision

Body 请求参数

名称 位置 类型 必选 中文名 说明
body body object none
» file body (binary) 模型预测结果输出文件

返回示例

200 Response

{
  "code": 0,
  "msg": "string"
}

返回结果

状态码 状态码含义 说明 数据模型
200 OK 成功 VerifyLabelResp

数据模型

VerifySignatureForm

{
  "original": "string",
  "signature": "string",
  "cert": "string"
}

属性

名称 类型 必选 约束 中文名 说明
original string true none 原文 none
signature string true none 签名 none
cert string true none 签名证书 none

GenLabelResp

{
  "code": 0,
  "msg": "string",
  "label": "string",
  "cert": "string"
}

属性

名称 类型 必选 约束 中文名 说明
code integer true none 错误码 none
msg string true none 错误信息 none
label string true none 生成标签 base64格式
cert string true none 签名证书 base64格式

GenLabelForm

{
  "info": {
    "owner": {
      "name": "string",
      "id": "string"
    },
    "model": {
      "name": "string",
      "id": "string",
      "version": "string",
      "date": "2019-08-24T14:15:22Z"
    }
  }
}

属性

名称 类型 必选 约束 中文名 说明
info object true none 生成标签信息 none
» owner object true none 模型所有者信息 none
»» name string true none 所有者 none
»» id string true none id none
» model object true none 模型信息 none
»» name string true none 模型名 none
»» id string true none 模型id none
»» version string true none 模型版本 none
»» date string(date-time) true none 创建日期 none

VerifyLabelResp

{
  "code": 0,
  "msg": "string"
}

属性

名称 类型 必选 约束 中文名 说明
code integer true none 错误码 none
msg string true none 错误信息 none

VerifyLabelForm

{
  "label": "string",
  "info": "string",
  "cert": "string"
}

属性

名称 类型 必选 约束 中文名 说明
label string true none 密码标签 none
info string true none 模型信息 none
cert string true none 签名证书 none

模块打包

python setup.py sdist

项目目录会生成dist目录,其中watermark_generate-1.0.tar.gz即为发布包

安装模块

pip install watermark_codec-1.0.tar.gz

docker容器部署

确保已经安装docker和docker-compose

cd docker
docker-compose up -d