nsfwjs
nsfwjs 用于鉴定不雅图片,结果分5种类型,所有概率的总和应该加起来等于 1 或 100%。
- 绘画(Drawing)——无害的艺术,或艺术绘画;
- 变态(Hentai)——色情艺术,不适合大多数工作环境;
- 中立(Neutral)——一般,无害的内容;
- 色情(Porn)——不雅的内容和行为,通常涉及生殖器;
- 性感(Sexy)——不合时宜的挑衅内容。
这个库不仅准确度高(约90%的小模型和93%的中等模型),而且由于开源,随着时间的推移,其准确性还在不断提高。目前可用模型有3种:
nsfwjs github 地址:https://github.com/infinitered/nsfwjs
在线nsfwjs 鉴黄 Demo:https://nsfwjs.com
目前本人测下来,Porn 为 0.7 的一定是色情图片,不过推荐大于等于 0.6 的就应该判定是色情图片了?
TensorFlow.js
sfwjs 基于 TensorFlow.js 实现,TensorFlow.js 是一个用于使用 JavaScript 进行机器学习开发的库。
使用 Node.js 让 nsfwjs 在服务器端运行
参考:https://github.com/infinitered/nsfwjs?tab=readme-ov-file#node-js-app
参考例子中提供了一个 API 服务来调用 nsfwjs。
使用 Python 执行 Node.js
方法一:使用 subprocess 调用 Node.js 脚本
假设我们有一个 Node.js 文件 example.js
,文件内容如下:
// example.js function add(a, b) { return a + b; } const args = process.argv.slice(2); // 获取传递的参数 const result = add(parseInt(args[0]), parseInt(args[1])); console.log(result); // 打印结果
使用 node 命令执行上面的js模本:node example.js 1 2
,结果等于3,1和2是参数。
在 Python 中使用 subprocess
模块执行该脚本
import subprocess def call_nodejs_method(a, b): # 调用 Node.js 并传递参数 result = subprocess.run( ['node', 'example.js', str(a), str(b)], # 使用 node 解释器运行 example.js 文件并传入参数 capture_output=True, # 捕获输出结果 text=True # 将输出解码为字符串 ) # 获取并返回输出结果 return result.stdout.strip() # 示例调用 output = call_nodejs_method(5, 3) print("Result from Node.js:", output)
解释:
subprocess.run
可以调用外部命令(这里是 Node.js),并通过capture_output=True
捕获输出。node example.js
命令执行example.js
文件,后面跟着的是参数a
和b
,它们会被传递到脚本中。result.stdout.strip()
提取并返回 Node.js 脚本输出的结果。