.net 通过 WebAPI 调用nsfwjs 进行视频鉴别功能

下面我会给出“通过.NET WebAPI调用NSFWJS进行视频鉴别功能”的完整攻略。该攻略分为以下几个步骤:

  1. 搭建.NET WebAPI项目

首先,我们需要搭建一个.NET WebAPI项目作为我们后续开发的基础。可以使用Visual Studio IDE来完成此操作。

选择File -> New -> Project,在弹出的“新建项目”对话框中选择.NET Web Application,然后点击“下一步”。

在弹出的“项目模板”对话框中,选择ASP.NET Core Web Application,点击“下一步”。

在弹出的“新建项目”对话框中,输入项目名称和存储路径,然后点击“创建”。

  1. 下载NSFWJS

NSFWJS是一款基于Tensorflow的成人内容过滤器。用户可以在前端或者后端使用它来检测图片或者视频是否包含成人内容。

可以通过一下两种方式下载NSFWJS:

1)从GitHub上下载NSFWJS的源代码,并使用npm build进行编译。

2)直接从npm安装NSFWJS。

这里我选择第二种方式,运行以下命令:

npm install nsfwjs
  1. 准备视频数据

我们需要准备一些视频数据,用于测试NSFWJS是否可以正确地识别出视频中的成人内容。

可以从以下两个网站下载视频:

1)https://www.pexels.com/videos/

2)https://www.videvo.net/

这里我选择在Pexels网站上下载一个视频,将其存储到本地。

  1. 在.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库进行鉴定,并根据结果返回分类信息。

  1. 测试.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技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • Pytorch中的model.train() 和 model.eval() 原理与用法解析

    当我们使用 PyTorch 训练模型时,通常会在模型训练以及模型评估的时候使用 model.train() 和 model.eval() 方法。本篇攻略将详细讲解 model.train() 和 model.eval() 的原理与用法解析。 model.train() 和 model.eval() 基本概念 在 PyTorch 中,model.train()…

    云计算 2023年5月18日
    00
  • C#基于Linq和反射实现数据持久化框架Xml4DB详解

    下面是关于“C#基于Linq和反射实现数据持久化框架Xml4DB详解”的完整攻略,包含两个示例说明。 简介 Xml4DB是一个基于Linq和反射实现的数据持久化框架,可以将对象序列化为XML格式并保存到文件中。在本攻略中,我们将介绍如何使用Xml4DB框架来实现数据持久化,包括创建数据模型、保存数据、读取数据等步骤。 步骤 在使用Xml4DB框架进行数据持久…

    云计算 2023年5月16日
    00
  • 云原生周刊:2023 年 Java 开发人员可以学习的 25 大技术技能

    文章推荐 2023 年 Java 开发人员可以学习的 25 大技术技能 这篇文章为 Java 开发人员提供了 2023 年需要学习的一些重要技能,这些技能涵盖了现代 Java 开发、大数据和人工智能、安全性、分布式系统和区块链、以及其他领域。Java 开发人员应该根据自己的需求和职业规划,选择适合自己的技能进行学习。 在 Kubernetes 上使用 Gra…

    云计算 2023年4月25日
    00
  • OpenFunction v1.0.0 发布:集成 WasmEdge,支持 Wasm 函数和更完整的 CI/CD

    OpenFunction 是一个开源的云原生 FaaS(Function as a Service,函数即服务)平台,旨在帮助开发者专注于业务逻辑的研发。今天,我们非常高兴地宣布 OpenFunction 迎来了一次重要的更新,即 v1.0.0 版本的发布! In this update, we continue to focus on providing …

    云计算 2023年4月18日
    00
  • 执行python脚本并传入json数据格式参数方式

    执行Python脚本并传入JSON数据格式的参数有多种方式,下面介绍三种常见的方式: 方法一:sys.argv获取传入的参数 通过sys.argv获取命令行输入的参数列表,根据需要解析为json数据格式。 示例一:假设Python脚本的名称为test.py,执行方式如下: python test.py ‘{"name": "张三…

    云计算 2023年5月18日
    00
  • 【云计算的1024种玩法】为喜欢的人建一个网站

    点击查看全文 曾几何时,你是不是也为不知道怎么向心爱的人表白而苦恼,书信略显古老,微信稍微有点随意,那么,从今天起,一种高大上的表白方式正式上线阿里云——“为喜欢的人建一个网站”。即使您是能够“攻城掠地”的工程师,也会苦于没有后台服务器的支撑,没关系,阿里云服务器ECS为您解忧;也许您是一个非IT行业人士,对网页一无所知,没关系,我们给您提供一整套的服务,您…

    云计算 2023年4月13日
    00
  • 作者揭秘《虚拟化和云计算》这本书

    作者序     当我们写作者序时,本书的撰写已接近尾声,整个写作历程耐人回味。本书的作者大多是长期从事分布式计算和数据中心管理的研究人员,随着对虚拟化技术认识的逐渐加深,我们更加相信虚拟化技术将会在不远的将来给数据中心管理带来深刻的变革。怀着这样一份对未来的憧憬,我们于2005年在 IBM中国研究院正式成立了虚拟化技术研究部。当时业界对虚拟化技术和大规模数据…

    云计算 2023年4月12日
    00
  • 【云计算】使用supervisor管理Docker多进程-ntpd+uwsgi+nginx示例最佳实践

    supervisor安装启动: apt-get install supervisor -y # start supervisord nodaemon /usr/bin/supervisord –nodaemon   nginx示例: [program:nginx] command = /usr/sbin/nginx -g ‘daemon off;’ pro…

    云计算 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部