From f849b0fc219bf0271f8e6fb3b65cbbe66976e1c3 Mon Sep 17 00:00:00 2001 From: Odboy Date: Sat, 14 Jun 2025 21:05:23 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=9B=BE=E5=83=8F=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=88=86=E7=B1=BB+=E5=8F=8C=E9=89=B4=E9=BB=84=E6=96=B9?= =?UTF-8?q?=E6=A1=88=E8=AF=B4=E6=98=8E(x20260829.md)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- x20260829.md | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 x20260829.md diff --git a/x20260829.md b/x20260829.md new file mode 100644 index 0000000..dbecb81 --- /dev/null +++ b/x20260829.md @@ -0,0 +1,65 @@ +# 2026-08-29:图像类型分类 + 双鉴黄 方案 + +## 目标 + +区分 **真人 / 动漫 / 风景** 三类图片,分别落不同目录;真人、动漫各用一套本地离线鉴黄, +命中的敏感图按**分值档**落到对应目录。全程本地运行,不依赖在线大模型。 + +## 分类定义 + +| 类型 | 含义 | 敏感判定 | +|------|------|----------| +| 真人 | 真实照片且含人物 | NudeNet(现用,照片训练) | +| 动漫 | 二次元/插画/3D 渲染 | wd14/danbooru 动漫鉴黄 | +| 风景 | 真实照片无人物(纯场景) | 一般不做 | + +## 模型选型(全部本地 ONNX) + +| 阶段 | 模型 | 说明 | +|------|------|------| +| 真人 vs 动漫 | `dghs-imgutils` `anime_real` | 二分类,输出 real/anime 概率 | +| 真人 vs 风景 | 真人检测器 | 检测到人脸/人物 → 真人,否则风景 | +| 真人鉴黄 | NudeNet(已有 `lib/320n.onnx`) | 保持现状 | +| 动漫鉴黄 | `dghs-imgutils` `anime_rating` / `nsfw_pred` | danbooru 评级:safe/questionable/explicit 分数 | + +- `dghs-imgutils`(`pip install dghs-imgutils`)一个包覆盖「真人/动漫判定」+「动漫鉴黄」+「动漫分类」, + 纯 ONNX、CPU、离线,与现有 NudeNet 同栈。 +- 「真人 vs 风景」需真人检测器,可选: + - YOLOv8n person(COCO,约 6MB):检测整个人,更符合「真人」语义 + - RetinaFace 人脸(约 1.6MB):只认脸,快但漏掉没脸的人物照 + +## 判定流程 + +``` +图片 → ① anime_real 判定 + ├─ 动漫 → ② 动漫鉴黄(anime_rating/nsfw_pred) → 分值 + │ ├─ 正常 → 图片_动漫_方向_清晰度/明暗 + │ └─ 敏感 → 图片_敏感_动漫_<分值档> + └─ 真人 → ③ 真人检测器 + ├─ 无人物 → 风景 → 图片_风景_方向_清晰度/明暗 + └─ 有人物 → ④ NudeNet 鉴黄 + ├─ 正常 → 图片_真人_方向_清晰度/明暗 + └─ 敏感 → 图片_敏感_真人_<分值档> +``` + +## 落地改动点 + +1. **`internal/nsfw/server.py`**:升级为「类型判定 + 双鉴黄」服务,`/detect` 返回 + `{subject, isAnime, nsfwScore, nsfwType}`(或拆多个接口) +2. **`internal/classify`**:新增 subject 维度,拼目录名 + `图片__方向_清晰度/明暗` 与 `图片_敏感__<分值档>` +3. **`internal/organize`**:probe 阶段收集 subject + 分值,分流到对应目录 +4. **`internal/store` + 前端**:媒体库加「真人/动漫/风景」筛选;色情识别页面标注类型与分值 +5. **`lib/`**:新增 imgutils 各模型 + 真人检测器模型(离线分发,同 `320n.onnx` 思路, + 首次联网下载进 lib) + +## 确认点(待用户拍板) + +1. **「真人」判定标准**:检测到**人脸**就算(RetinaFace,轻量),还是要检测到**整个人** + (YOLO person)?宠物/静物照片归哪类(风景 or 单独「其他」)? +2. **动漫风景**(二次元场景图)归「动漫」还是「风景」?(默认归「动漫」) +3. **目录结构**:普通图保持 `图片_<类型>_方向_清晰度/明暗`;敏感图用 + `图片_敏感_<类型>_<分值档>`(分值档沿用 20/40/60/80/100 五档)。还是敏感图也要保留方向/明暗? +4. **动漫鉴黄阈值/等级**:`questionable`(擦边)和 `explicit`(露骨)都算敏感,还是只有 `explicit` 算? +5. **离线模型体积**:imgutils 各模型 + YOLO 合计约几十到几百 MB(wd14 动漫鉴黄模型较大), + 需首次联网下载进 `lib/` 再分发——接受吗?还是改用更小的动漫鉴黄模型(精度略降)? \ No newline at end of file