在.NET中调用NSFW.JS实现视频不良内容检测
本文讲解如何在.NET项目中利用NSFW.js模型对视频内容进行安全性检测。主要步骤涵盖使用Node.js构建本地WebAPI服务、通过FFmpeg处理视频获取关键帧,以及C#端调用接口获取鉴定结果的完整代码示例与配置说明。
1. 准备Node.js环境
首先需要在服务器上安装Node.js运行环境。由于@tensorflow/tfjs-node依赖Python编译原生模块,请确保系统中已安装Python并将路径添加到环境变量Path中。
第1步:安装依赖包
目的:部署NSFW.js运行所需的Express框架及TensorFlow库。
- 打开终端,进入项目目录。
- 执行以下命令安装必要的NPM包:
npm install express --save
npm install multer --save
npm install jpeg-js --save
npm install @tensorflow/tfjs-node --save
npm install nsfwjs --save
第2步:创建Server.js脚本
目的:编写提供RESTful接口的后端代码,负责接收图片数据、转换格式并返回预测概率。
在项目根目录创建server.js文件,填入以下内容:
const express = require('express')
const multer = require('multer')
const jpeg = require('jpeg-js')
const tf = require('@tensorflow/tfjs-node')
const nsfw = require('nsfwjs')
const app = express()
const upload = multer()
let _model
// 将Buffer转换为Tensor所需的Int32数组格式
const convert = async (img) => {
const image = await jpeg.decode(img, true)
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')
}
// POST /nsfw 接口定义
app.post('/nsfw', upload.single('image'), async (req, res) => {
if (!req.file) res.status(400).send('Missing image multipart/form-data')
else {
try {
const image = await convert(req.file.buffer)
const predictions = await _model.classify(image)
image.dispose() // 释放内存
res.json(predictions)
} catch (error) {
console.error(error)
res.status(500).json({ error: 'Internal Server Error' })
}
}
})
// 加载模型并启动服务
const load_model = async () => {
try {
_model = await nsfw.load()
console.log('Model loaded successfully.')
app.listen(8080, () => console.log('NSFW API server running on port 8080'))
} catch (error) {
console.error('Failed to load model:', error)
}
}
load_model()
2. 启动与测试API服务
第1步:启动服务
目的:确认Node.js服务正常跑通。
- 在终端运行:
node server.js - 观察控制台输出“Model loaded successfully”和“NSFW API server running on port 8080”即表示成功。
第2步:验证接口可用性
目的:检查图片上传与识别是否返回预期JSON数据。
可以使用Postman或命令行进行测试。Windows下推荐使用PowerShell或CMD:
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









