下面我会给出“通过.NET WebAPI调用NSFWJS进行视频鉴别功能”的完整攻略。该攻略分为以下几个步骤:
- 搭建.NET WebAPI项目
首先,我们需要搭建一个.NET WebAPI项目作为我们后续开发的基础。可以使用Visual Studio IDE来完成此操作。
选择File -> New -> Project,在弹出的“新建项目”对话框中选择.NET Web Application,然后点击“下一步”。
在弹出的“项目模板”对话框中,选择ASP.NET Core Web Application,点击“下一步”。
在弹出的“新建项目”对话框中,输入项目名称和存储路径,然后点击“创建”。
- 下载NSFWJS
NSFWJS是一款基于Tensorflow的成人内容过滤器。用户可以在前端或者后端使用它来检测图片或者视频是否包含成人内容。
可以通过一下两种方式下载NSFWJS:
1)从GitHub上下载NSFWJS的源代码,并使用npm build进行编译。
2)直接从npm安装NSFWJS。
这里我选择第二种方式,运行以下命令:
npm install nsfwjs
- 准备视频数据
我们需要准备一些视频数据,用于测试NSFWJS是否可以正确地识别出视频中的成人内容。
可以从以下两个网站下载视频:
1)https://www.pexels.com/videos/
2)https://www.videvo.net/
这里我选择在Pexels网站上下载一个视频,将其存储到本地。
- 在.NET WebAPI中使用NSFWJS
我们需要编写.NET WebAPI代码来调用NSFWJS库,对视频数据进行鉴定。下面是代码实现过程:
a. 在API controller中添加以下代码:
[HttpPost]
public async Task<IActionResult> Post()
{
var file = Request.Form.Files[0];
if (file.Length > 0)
{
using (var ms=new MemoryStream())
{
await file.CopyToAsync(ms);
var bytes = ms.ToArray();
var model = await EvaluateAsync(bytes);
return Ok(model);
}
}
return BadRequest();
}
private static async Task<ModelOutput> EvaluateAsync(byte[] imagesBytes = null)
{
imagesBytes ??= await _httpClient.GetByteArrayAsync("https://storage.googleapis.com/nsfwjs/optimized/nsfw_mobilenet_v2_224_quant_edgetpu.tflite");
try
{
var prediction = await _s_model.EvaluateAsync(imagesBytes);
if (prediction.ClassProbabilities[1] > 0.7)
{
return new ModelOutput { Prediction = "This video contains adult content." };
}
return new ModelOutput { Prediction = "This video is safe for work." };
}
catch (Exception ex)
{
// log exception
return new ModelOutput { Prediction = "There was an error processing the video." };
}
}
b. 在NSFWJS模型中引用以下代码:
// Load model and labels
var model = await NSFWJS.LoadAsync(NSFWJS_MODEL_FILE, NSFWJS_LABELS_FILE);
c. 在API controller中添加以下声明用于模型和HTTP访问:
private static readonly HttpClient _httpClient = new HttpClient();
private static readonly string NSFWJS_MODEL_FILE = "nsfw_mobilenet_v2_224_quant_edgetpu.tflite";
private static readonly string NSFWJS_LABELS_FILE = "labels.txt";
private static NSFWJS _s_model;
当请求到达API控制器时,我们将视频数据作为输入参数并将其随时传递给EvaluateAsync方法。在该方法中,我们将视频数据传递给NSFWJS库进行鉴定,并根据结果返回分类信息。
- 测试.NET WebAPI
最后,我们需要对WebAPI进行测试以确保其正常工作。可以使用工具POSTMAN或CURL向API控制器发出POST请求,并传递视频文件作为输入参数。根据下图所示,我们可以看到WebAPI返回了预测结果。
POST http://localhost:xxxx/api/nasfw-file-upload HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------------acebdf13572468
User-Agent: Fiddler
Host: localhost:xxxx
Content-Length: 122464
-----------------------------acebdf13572468
Content-Disposition: form-data; name="file"; filename="xxx.mp4"
Content-Type: application/octet-stream
(Binary data)
-----------------------------acebdf13572468--
完整的代码实现请参考以下示例:
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using NSFWJS;
using WebAPI.Models;
namespace WebAPI.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class NsfwFileUploadController : ControllerBase
{
private static readonly HttpClient _httpClient = new HttpClient();
private static readonly string NSFWJS_MODEL_FILE = "nsfw_mobilenet_v2_224_quant_edgetpu.tflite";
private static readonly string NSFWJS_LABELS_FILE = "labels.txt";
private static NSFWJS _s_model;
static NsfwFileUploadController()
{
Task.Run(async () =>
{
_s_model = await NSFWJS.LoadAsync(NSFWJS_MODEL_FILE, NSFWJS_LABELS_FILE);
}).Wait();
}
[HttpPost]
public async Task<IActionResult> Post()
{
var file = Request.Form.Files[0];
if (file.Length > 0)
{
using (var ms=new MemoryStream())
{
await file.CopyToAsync(ms);
var bytes = ms.ToArray();
var model = await EvaluateAsync(bytes);
return Ok(model);
}
}
return BadRequest();
}
private static async Task<ModelOutput> EvaluateAsync(byte[] imagesBytes = null)
{
imagesBytes ??= await _httpClient.GetByteArrayAsync("https://storage.googleapis.com/nsfwjs/optimized/nsfw_mobilenet_v2_224_quant_edgetpu.tflite");
try
{
var prediction = await _s_model.EvaluateAsync(imagesBytes);
if (prediction.ClassProbabilities[1] > 0.7)
{
return new ModelOutput { Prediction = "This video contains adult content." };
}
return new ModelOutput { Prediction = "This video is safe for work." };
}
catch (Exception ex)
{
// log exception
return new ModelOutput { Prediction = "There was an error processing the video." };
}
}
}
}
这样,使用.NET WebAPI调用NSFWJS进行视频鉴别功能的操作就完成了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.net 通过 WebAPI 调用nsfwjs 进行视频鉴别功能 - Python技术站