
检测流程:
如下图所示为8个模型(Our、ERNIE、Inception_v3、Densenet161、Resnet50、Squeeze net_0、VGG16、Alexnet)在准确性、精确度、召回率和F1分数上的对比结果.

| Model Name | Accuracy | Precision | Recall | F1 Score |
|---|---|---|---|---|
| Our | 0.9244 | 0.9389 | 0.9136 | 0.926 |
| ERNIE | 0.6703 | 0.7434 | 0.6703 | 0.6672 |
| Inception_v3 | 0.8775 | 0.8803 | 0.8775 | 0.8757 |
| Densenet161 | 0.8853 | 0.8879 | 0.8853 | 0.8843 |
| Resnet50 | 0.8542 | 0.8568 | 0.8542 | 0.8531 |
| Squeezenet1_0 | 0.8416 | 0.8421 | 0.8416 | 0.841 |
| VGG16 | 0.8069 | 0.8079 | 0.8069 | 0.8023 |
| Alexnet | 0.6618 | 0.6264 | 0.6618 | 0.5648 |
以下为7个模型(Our、Inception_v3、Densenet161、Resnet50、Squeezenet_0、VGG16、Alexnet)的P-R曲线对比图。

如下图为7个模型(Our、Inception_v3、Densenet161、Resnet50、Squeeze net_0、VGG16、Alexnet)的ROC曲线和对应的AUC面积对比图。

train目录为训练代码ocr.py 为图片 OCR 预处理代码final_train.py 为训练代码,train_log 为其产生的训练日志export_onnx.py 为导出模型为 onnx 脚本val.py 为验证代码docker目录为镜像 build 工作文件夹,内含推理 API 代码及所有模型onnx_run.py 为推理 API 代码final_model_v2.onnx 为多模态特征融合分类模型Resnet18_search.onnx 为图片检索特征提取模型easyocr 为 OCR 相关模型deploy 目录为部署文件夹,内含 QQ API 接入脚本.conf.json 为 QQ API 配置文件main.py 为 QQ API 接入程序result.json 为模型推理返回结果样例start.bat 为 docker 启动容器参考命令可直接使用 Docker 环境运行此系统,如果需直接运行可参考 docker/Dockerfile 文件配置环境。
如需构建镜像,请先从 Releases 中下载 model_main.onnx 与 model_search.onnx 模型文件到 docker 目录,在 docker 目录下执行 docker build -t image_violation_detection .。
API POST /check_img
base64 与 url 参数二选一,分别表示图片的 base64 编码和图片的 url 地址,推荐使用 base64,从 url 抓取图片可能失败。
img: 图片编号white_result: 白名单检测结果black_result: 黑名单检测结果imgclass_result:正常、涉黄、敏感图片的预测概率malicious_detect: 二维码检测结果sensitive_detect: 敏感词检测结果ocr_result: OCR 识别结果{
"code": 0,
"data": {
"img": "tmp/41d96af188e8640fe730bd2aebb344dd",
"white_result": {"filename": "a.png", "sim": 0.96},
"black_result": {"filename": "b.png", "sim": 0.52},
"imgclass_result": [
{
"label": "normal",
"prob": 0.9997885823249817
},
{
"label": "porn",
"prob": 0.00018990205717273057
},
{
"label": "sensitive",
"prob": 2.1459745767060667e-05
}
],
"malicious_detect": [
{
"Wording": "该网站发布了违反国家相关法律规定的内容,已为您拦截。",
"WordingTitle": "网站含有违规内容",
"code": 201,
"detect_time": "2023-04-14 16:41:02",
"msg": "域名拦截",
"url": "https://aaa.com"
}
],
"ocr_result": "测试",
"sensitive_detect": {
"category": "None",
"keyword": "None"
}
},
"msg": "success"
}
ocr_type=baidu 或 easyocr,表示 OCR 识别方法,easyocr则为本地识别,baidu 则为调用百度 API 识别,需开通 通用文字识别 API。若不包含此环境变量则表示不进行 OCR 识别ocr_client_id=填写百度 API key(仅 OCR 方法为 baidu 时需要)ocr_client_secret=填写百度 API secret(仅 OCR 方法为 baidu 时需要)sensitive_detect_type=remote/local,表示敏感词检测方法,是本地词库匹配还是调用 API,若不设置此环境变量则不进行敏感词检测sen_api_key=仅敏感词检测为 remote 需要,请前往 该网站 获取 API keymal_api_key=二维码域名检测需要,若不设置此环境变量则不进行二维码域名检测,请前往 该网站 获取 API keyknn_query_k=黑白名单最大返回个数,若不设置默认为 1,最大不超过 50docker run --env-file env.list -p 5500:5500 --name image_violation_detection -v img_data:/app/img_data --restart=always tuxiaobei/image_violation_detection
env.list 即为环境变量列表,格式为
key1=value1
key2=value2
...
宿主机 img_data 目录即存储黑白名单图片,其中 img_data/white 下存储白名单图片,其中 img_data/black 下存储白名单图片
$ claude mcp add Image-Violation-Detection \
-- python -m otcore.mcp_server <graph>