NSFW.js 前端使用教程
阅读原文时间:2023年07月09日阅读:2

引用js + 下载模型

先看文档 https://github.com/infinitered/nsfwjs

非常好,一点也看不懂。总之,先引js,不知道去哪里下载js就上jsdelivr搜一搜

按顺序引:

https://www.jsdelivr.com/package/npm/@tensorflow/tfjs

https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.1.0/dist/tf.min.js

https://www.jsdelivr.com/package/npm/nsfwjs

https://cdn.jsdelivr.net/npm/nsfwjs@2.4.2/dist/nsfwjs.min.js

接下来就是非常普通的引用,相信大家都会

nsfwjs有一个很吵闹的加载提示,可以自己找到位置给注释掉

再看一遍文档,emm,这次就看懂了 首先下载模型

https://github.com/GantMan/nsfw_model

他有一个链接,指向“最新的”Releases,不要信这个

周所周知 1.1 < 1.2

上这里找:https://github.com/GantMan/nsfw_model/tags

然后1.2的版本里有两个带model.json的文件夹,大的好像更准

模型有几种加载参数,最好的方法就是都试一遍

接下来是加载模型 (自己改模型地址)

let model = await nsfwjs.load("js/nsfw/mobilenet_v2_140_224/web_model/", {type: 'graph'});
// 加载模型时返回的是 `Promise`
// reslove回来的就是加载后的模型本体

// 这里就是判定,判定一般会有五个结果(看你用的什么模型,官方的一直都是五个)
let p = await model.classify(img);
if(p[0].className=="Hentai"||p.find(v => v.className == "Hentai").probability>0.1) {
    return true;
} else {
    return false;
}

model.classify里面可以放视频的节点,图片的节点,以及canvas等等,视频是你播到哪里,他取的图片就在哪里

主要是要了解每一次返回的是什么,要想真正了解就多写几个console.log

蒟蒻写的代码 (自己改模型地址)

let nsfw = {
    inited: false,
    init: async function () {
        if(!nsfw.inited) {
            nsfw.model = await nsfwjs.load("js/nsfw/mobilenet_v2_140_224/web_model/", {type: 'graph'});
        }
        nsfw.inited = true;
        return nsfw.model;
    },
    check: async function (img, type="Hentai") {
        if(!nsfw.inited) {
            await nsfw.init();
        }
        let p = await nsfw.model.classify(img);
        if(p[0].className==type||p.find(v => v.className == type).probability>0.1) {
            return true;
        } else {
            return false;
        }
    }
};
// 使用非常的简单,可以直接,会自动初始化(加载模型)
nsfw.check(img);
nsfw.check(video);
nsfw.check(canvas);
nsfw.check(imgData);
// 也可以手动初始化
nsfw.init();

大总结!

  1. 引入js
  2. 加载模型
  3. 判定图片

图片判定的非常快,完全不用担心卡死页面

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章