先看文档 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();
大总结!
图片判定的非常快,完全不用担心卡死页面
手机扫一扫
移动阅读更方便
你可能感兴趣的文章