开源一个色情图像(NSFW)识别方案,支持私有部署和 HTTP 调用 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
xiaoz
V2EX    分享创造

开源一个色情图像(NSFW)识别方案,支持私有部署和 HTTP 调用

  •  
  •   xiaoz
    helloxz 5 天前 2920 次点击

    起因:之前 ImgURL 一直使用雅虎的 Open NSFW 识别方案,但是 Open NSFW 这个项目 2019 年就归档且不再更新了。最近正在重构 ImgURL ,顺便准备寻找新的色情图像识别方案,结果找了一圈,没发现满足自己需求的,于是就手搓了一个,希望对开发者有帮助。

    Github 开源:https://github.com/helloxz/nsfw

    测试 API:https://nsfw.demo.mba/check?url=https://www.imgurl.org/static/images/logo.png

    只需要把 URL 参数值替换为任意可访问的图片地址即可识别,个人感觉识别率比 Open NSFW 更强一些,而且速度也不错。(识别速度非 http 下载和请求速度)

    介绍

    基于 AdamCodd/vit-base-nsfw-detector/ 实现,并封装为 HTTP API 调用,可用于识别网络色情图像( nsfw 识别),适合纯 CPU 机器推理,轻量级实现方案。

    特点

    • 纯 CPU 推理,适合大多数云服务器或 VPS
    • 支持的图片类型:jpg/png/bmp/webp
    • 支持 HTTP API 调用
    • 支持鉴权访问
    • 轻量级实现,资源占用较低
    • 识别速度较快
    • 支持 Docker 私有部署

    Docker 部署

    docker run -d \ --name nsfw \ -p 6086:6086 \ --restart always \ helloz/nsfw 

    完整的说明可以访问 Github 查看: https://github.com/helloxz/nsfw

    第 1 条附言    5 天前

    新增了WEBUI,部署的时候可通过环境变量选择是否启用。WEBUI测试地址:https://nsfw.demo.mba/

    32 条回复    2025-12-08 09:19:22 +08:00
    MIUIOS
        1
    MIUIOS  
       5 天前   2
    可以看下数据集吗,我需要人工详细标注一下
    xiaoz
        2
    xiaoz  
    OP
       5 天前
    @MIUIOS #1,模型用的是 https://huggingface.co/AdamCodd/vit-base-nsfw-detector/ 开源的,我本身并没有进行模型训练。

    所以我这里没有数据集,哈哈。
    Pantheonn
        3
    Pantheonn  
       5 天前   1
    用射了,确实不错,可以加一个识别本地图片吗
    hccsoul326
        4
    hccsoul326  
       5 天前   4
    可以反着用不,去捞一堆图片,部署上去反向过滤一下,只留下色图
    xiaoz
        5
    xiaoz  
    OP
       5 天前
    @Pantheonn #3 ,就是本地 POST 图片上去识别是吧?如果我理解得没错的话,准备近期添加。
    xiaoz
        6
    xiaoz  
    OP
       5 天前
    @hccsoul326 #4 ,你需要部署一个图床服务就可以实现了。比如我开头所说,哈哈哈。
    nicoljiang
        7
    nicoljiang  
    PRO
       5 天前   1
    这个对涉政、涉暴力 等方面没用吧?
    xiaoz
        8
    xiaoz  
    OP
       5 天前
    @nicoljiang #7 ,没用哈,底层模型只针对色情图像进行了训练,如果要更多类型的识别,需要自己训练模型。
    abel533
        9
    abel533  
       5 天前   1
    能不能识别色情、暴力、血腥等分类?
    xiaoz
        10
    xiaoz  
    OP
       5 天前
    @abel533 #9 ,不支持哦,如 8 楼所述。
    Maboroshii
        11
    Maboroshii  
       5 天前
    整蜜罐是吧
    nananqujava
        12
    nananqujava  
       5 天前   1
    我需要反向过滤
    Pantheonn
        13
    Pantheonn  
       5 天前   1
    @xiaoz #5 是的,GitHub 主页已 star ,期待更新
    xiaoz
        14
    xiaoz  
    OP
       5 天前
    @Maboroshii #11 ,没有啊,源码都在 Github 开源了,图片压根就没有保存。
    xiaoz
        15
    xiaoz  
    OP
       5 天前
    @Pantheonn #13 ,正在写代码,晚上应该就支持了。
    xiaoz
        16
    xiaoz  
    OP
       5 天前   1
    @Pantheonn #3 ,最新版已经支持 POST 上传文件识别,docker pull 更新下即可。
    slert
        17
    slert  
       5 天前   1
    和 nsfwjs 相比识别质量如何
    xiaoz
        18
    xiaoz  
    OP
       5 天前
    @slert #17 ,没有详细对比测试过,你可以试试看。
    xclrr
        19
    xclrr  
       5 天前   1
    yahoo 的模型只有 22MB ,这个 300 多 MB 不够轻量啊
    xiaoz
        20
    xiaoz  
    OP
       5 天前 via Android
    @xclrr #19 ,你拿容器镜像大小和模型大小去对比???
    1. 这个项目的模型大小大概 50MB 左右,看这里:https://github.com/helloxz/nsfw/tree/main/app/onnx ,单从模型的大小来说,雅虎模型只有 20M 左右确实更小,但是个人测试了下雅虎的效果相对更差一些。
    2. 容器包括 Python 运行环境和相关依赖,自然更大一些。
    3. 如果单纯的去对比体积,是不是镜像对比镜像更合理一些?这是第三方基于 open nsfw 的镜像:https://hub.docker.com/r/eugencepoi/nsfw_api 体积是 600M
    4. 轻量指的是相对市面上的方案实现和运行时资源占用,而不是单纯看体积。就算对比容器体积,我的镜像也是相对偏小,你可以自行去 docker 搜索 nsfw 对比。

    请辩证的看待问题,谢谢。
    gargar
        21
    gargar  
       5 天前 via iPhone
    感谢分享。有没有性能测试数据?
    gargar
        22
    gargar  
       5 天前   1
    简单测了一下,苹果 M 芯片 0.5-0.8 秒,云主机比较弱要 3-4 秒。
    xiaoz
        23
    xiaoz  
    OP
       4 天前
    @gargar #22 ,感谢反馈,代码里面强制了 CPU 运行,不同的 CPU 以及核心数有差距,M 芯片算是比较强的了。如果是 GPU 运行的话效率会更高。
    Charon2050
        24
    Charon2050  
       4 天前   2
    感谢分享,用这个 API 写了一个非色情图片屏蔽器,自动屏蔽除了色情图片以外的所有图片
    grimbedroom
        25
    grimbedroom  
       4 天前
    @Charon2050 笑毁了
    AkinoKaedeChan
        26
    AkinoKaedeChan  
       4 天前
    @Charon2050 感觉用处不在这啊 Pixiv 图片 R-18 都有标签,不知道有没有能下载大量图片而且没有打标签的地方
    xclrr
        27
    xclrr  
       4 天前   1
    @xiaoz 我并没有 pull 镜像,我是看了一眼你在 2 楼发的 hf 链接 344MB ,你如果拿 q4 量化的模型和雅虎 fp32 的模型去比,那我无话可说
    xiaoz
        28
    xiaoz  
    OP
       4 天前
    @xclrr #27 ,所以说你并没有认真的去看,然后就下结论?如果你口中的轻量是抛开运行环境和方案不谈,仅去对比模型的大小,那我也无话可说。
    xclrr
        29
    xclrr  
       4 天前   1
    @xiaoz 没有人会拿镜像和模型去比大小。你描述里写的轻量我才针对不轻量的问题发表我的观点,雅虎那个模型才是真轻量,我内置到 android app 做识别才十几 ms 。请理性地看待问题,谢谢
    xiaoz
        30
    xiaoz  
    OP
       4 天前 via Android   1
    @xclrr #29 ,我在 20 楼就指出过运行时资源占用问题,每个人对轻量的标准不一。运行环境,资源( CPU ,内存)占用,识别速度,镜像大小,准确率等。你从模型大小,又扯到识别速度有啥意义呢?而且你有对比过这两个模型吗?或许你是对的,每个人标准不一,你爱用哪个就用哪个,多说无益。
    abel533
        31
    abel533  
       3 天前
    @xiaoz #10 看到下面说反向过滤想到一个办法。。暴力、血腥不会被识别为 nsfw 吧?也就是通过识别保留 nsfw 可以排除暴力血腥内容?
    xiaoz
        32
    xiaoz  
    OP
       3 天前
    @abel533 #31,模型只支持二分类,也就是 nsfw 和非 nsfw ,暴力、血腥确实不会被识别为 nsfw 吧,理论上可以用你说的保留法排除。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3782 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:16 PVG 13:16 LAX 21:16 JFK 00:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86