node实现图片鉴黄

本文介绍了如何利用nsfwjs在Windows环境下,结合Express搭建一个图片鉴黄服务。内容包括安装windows-build-tools、解决C++库和Python版本问题、安装@tensorflow/tfjs-node依赖、编写代码实现鉴黄功能,以及将模型本地化以适应非互联网环境。还提供了相关资源下载链接和参考文章。
部署运行你感兴趣的模型镜像

nsfwjs是一款强大的开源鉴黄的框架,不过搭建过程比较繁琐,今天花了一些时间试错,最后终于成功跑起来。将过程整理了下来,避免后来者踩坑。
我们结合express搭建鉴黄服务。
1、搭建express

npm install -g express
npm install express-generator -g
express  identifyimg

2、安装windows-build-tools
在windows下,nsfwjs安装需要一些C++库和python版本的支持。
我们需要用管理员身份打开cmd,然后再用npm安装。
1png
然后在cmd下安装windows-build-tools。

C:\Windows\System32> npm install --global windows-build-tools

运行画面:
2.png
3、安装相关依赖包

npm install nsfwjs -S
npm install @tensorflow/tfjs-node -S
npm install multiparty -S
npm install image-js -S

安装@tensorflow/tfjs-node插件的依赖较多,可能需要翻墙。
4、代码部分
在任意路由下实现即可。

var express = require('express');
var router = express.Router();

var multiparty = require('multiparty');
var imgJS = require("image-js");
const nsfw = require('nsfwjs');
const tf = require('@tensorflow/tfjs-node');
const safeContent = ['Drawing', 'Neutral']; // 设置图片内容安全的类型
//转换图片格式
const convert = async file => {
  const image = await imgJS.Image.load(file.path);
  const numChannels = 3;
  const numPixels = image.width * image.height;
  const values = new Int32Array(numPixels * numChannels);

  for (let i = 0; i < numPixels; i++) {
    for (let c = 0; c < numChannels; ++c) {
      values[i * numChannels + c] = image.data[i * 4 + c];
    }
  }

  return tf.tensor3d(values, [image.height, image.width, numChannels], 'int32');
};


const isSafeContent = predictions => {
  let safeProbability = 0;
  for (let index = 0; index < predictions.length; index++) {
    const item = predictions[index];
    const className = item.className;
    const probability = item.probability;
    if (safeContent.includes(className)) {
      safeProbability += probability;
    }
  }
  return safeProbability > 0.5;
};
router.post('/', function (req, res, next) {

  var form = new multiparty.Form();
  form.parse(req, async (err, fields, files) => {
    let img = await convert(files.file[0]);

    let model = await nsfw.load('file://./public/mobilenet/web_model/', {
      type: 'graph'
    });
    let predictions = await model.classify(img);
    const isSafe = isSafeContent(predictions);
    console.log('是否安全:', isSafe);

  });

});

module.exports = router;

5、model包
如果nsfw.load()不传参数的话,默认加载一个官方的模型地址,模型的大小大概几十上百兆,加载的过程会比较慢,如果你的服务部署到非互联网环境,那就直接启动不了了,所以把模型放到本地服务才是比较好的解决方案。
先去nsfw_model下载模型到本地,选择第一个nsfw_mobilenet_v2_140_224.zip
即可,然后解压zip包,web_model文件夹里面就是我们需要的模型了,我们可以将其放在public目录下。
下载不了的同学,可以去百度网盘下载。
链接:https://pan.baidu.com/s/1E00MAsQq5kLoZOG1PMJdVg
提取码:g0mh
参考文章:
https://www.jianshu.com/p/b70a0f4238ee
http://dengtongyu.com/2021/05/10/node+nsfwjs%E6%90%AD%E5%BB%BA%E5%9B%BE%E7%89%87%E9%89%B4%E9%BB%84%E6%9C%8D%E5%8A%A1/

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值