From d6798ef1ee2d1d8cb486cc22fb21e4c18e013550 Mon Sep 17 00:00:00 2001 From: Odboy Date: Sun, 24 Aug 2025 21:14:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=8A=A8=E6=BC=AB?= =?UTF-8?q?=E8=89=B2=E6=83=85=E6=A3=80=E6=B5=8B(WD=20Tagger=20v3)=EF=BC=8C?= =?UTF-8?q?=E5=AA=92=E4=BD=93=E5=BA=93=E5=B1=95=E7=A4=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 anime_nsfw 模块:WD Tagger v3 模型检测动漫/二次元图片 - 修复误判:当 general 评分最高时判定为安全,避免非动漫图误判 - 数据库存储四个 rating 原始分数(JSON),无需重扫即可查看 - 媒体库新增动漫色情检测列、文件路径列(支持一键复制) - 修复预览图加载占位符显示两个点的问题 - 移动文件按钮不再限制扫描完成后才显示 --- .gitignore | 2 + application.properties | 13 +- frontend/src/views/MediaList.vue | 114 ++++++++++- frontend/src/views/Scan.vue | 3 +- internal/anime_nsfw/detector.go | 335 +++++++++++++++++++++++++++++++ internal/anime_nsfw/server.py | 319 +++++++++++++++++++++++++++++ internal/api/media_controller.go | 10 + internal/api/router.go | 1 + internal/config/config.go | 31 ++- internal/organize/organize.go | 74 ++++++- internal/service/scan.go | 27 ++- internal/store/store.go | 36 ++++ 12 files changed, 934 insertions(+), 31 deletions(-) create mode 100644 internal/anime_nsfw/detector.go create mode 100644 internal/anime_nsfw/server.py diff --git a/.gitignore b/.gitignore index fc67153..ad56879 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ .idea/ +.qwen/ media-info.db __pycache__/ +lib/anime_nsfw/ diff --git a/application.properties b/application.properties index 712e05c..9a17a73 100644 --- a/application.properties +++ b/application.properties @@ -17,8 +17,15 @@ organize.workers=8 # 模型:优先加载程序运行目录下 lib/nwfs/320n.onnx(推荐随程序分发,离线可用); # 本地没有会自动下载到该位置,下载失败再回退用 nudenet 自带模型 # NSFW是用来识别真人图片的 -nsfw.enabled=true +nsfw.enabled=false # python 可执行文件路径;留空自动在 PATH 里找 python/python3/py nsfw.python=C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python312\\python.exe -# 判定阈值 0~1,敏感部位检测分高于此才算色情(默认 0.2,实测) -nsfw.threshold=0.35 +# 判定阈值 0~1,敏感部位检测分高于此才算色情 +nsfw.threshold=0.27 +# 动漫色情图片识别(需本机安装 python 与 onnxruntime/opencv/numpy:pip install onnxruntime opencv-python numpy) +# true=开启,判定为色情的动漫图片同样移入「图片_敏感_*」目录;false=关闭(默认) +# 模型:WD Tagger v3 (eva02-large),首次启动自动从 HuggingFace 下载到 lib/anime_nsfw/(约 1.26GB) +# AnimeNSFW是用来识别动漫/二次元图片的 +anime_nsfw.enabled=true +# 判定阈值 0~1,explicit/questionable 分数高于此才算色情 +anime_nsfw.threshold=0.5 diff --git a/frontend/src/views/MediaList.vue b/frontend/src/views/MediaList.vue index 133b8f2..f85f288 100644 --- a/frontend/src/views/MediaList.vue +++ b/frontend/src/views/MediaList.vue @@ -1,7 +1,10 @@