.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日

相关文章

  • 一文详解JS中的事件循环机制

    一文详解JS中的事件循环机制 JavaScript 是一门单线程语言,这意味着 JavaScript 代码只能在一个线程中执行。但是,JavaScript 又是一门非常强大的语言,它可以处理各种异步操作,例如网络请求、定时器等。这是因为 JavaScript 中有一个事件循环机制,它可以让 JavaScript 在单线程中处理异步操作。本文将详细讲解 Jav…

    云计算 2023年5月16日
    00
  • 解析OpenSSL程序概念及震惊业界的“心脏出血”漏洞

    解析OpenSSL程序概念及“心脏出血”漏洞攻略 OpenSSL程序概念 OpenSSL是一套开放源代码的加密类库,提供了多种加密算法和协议功能,能够支持SSL/TLS协议,而且应用广泛。其架构包括四层:应用程序接口层(API)、SSL/TLS层、加密层和基础支持层。其中SSL/TLS层是OpenSSL程序的核心,正是这一层实现了HTTPS协议以及其他安全协…

    云计算 2023年5月18日
    00
  • 云开发中的战斗机 Laf,让你像写博客一样写代码

    各位云原生搬砖师 and PPT 架构师,你们有没有想过像写文章一样方便地写代码呢? 怎样才能像写文章一样写代码? 理想的需求应该是可以在线编写、调试函数,不用重启服务,随时随地在 Web 上查看函数的运行日志,无需连接服务器,无需折腾数据库、对象存储、Nginx 等,可以随时随地上线应用,招之即来,挥之即去,随手发布! 这时候懂王上线了,好家伙,这不就是 …

    2023年4月9日
    00
  • 云图说丨初识华为云安全云脑——新一代云安全运营中心

    本文分享自华为云社区《【云图说】 | 第273期 初识华为云安全云脑——新一代云安全运营中心》,作者:阅识风云。 安全云脑(SecMaster)是华为云原生的新一代云安全运营中心,集华为云三十多年安全经验,基于云原生安全,提供云上资产管理、安全态势管理、安全信息和事件管理、安全编排与自动响应等能力,实现提前预防风险、感知安全事件、安全事件自动化闭环。   点…

    云计算 2023年4月18日
    00
  • .Net Core中使用ExceptionFilter过滤器的方法

    下面是关于“.Net Core中使用ExceptionFilter过滤器的方法”的完整攻略,包含两个示例说明。 简介 在.NET Core应用程序中,我们可以使用ExceptionFilter过滤器来处理应用程序中的异常。ExceptionFilter过滤器可以捕获应用程序中的异常,并对异常进行处理。在本攻略中,我们将介绍如何在.NET Core应用程序中使…

    云计算 2023年5月16日
    00
  • 第三届云计算大会 – Dell云计算: 企业的有效转型策略(转载)

    Martin Yates 的人不错,会后请他去吃了汉拿山,感觉味道还不错,聊了将近两个小时才回家,受益匪浅啊,他的讲解简单生动,如果有他的Slides就好了。 ==================================================================================== 在19日下午举行的大会主题演讲…

    云计算 2023年4月10日
    00
  • 基于MATLAB实现的云模型计算隶属度

    ”云”或者’云滴‘是云模型的基本单元,所谓云是指在其论域上的一个分布,可以用联合概率的形式(x, u)来表示 云模型用三个数据来表示其特征 期望:云滴在论域空间分布的期望,一般用符号Εx表示。 熵:不确定程度,由离散程度和模糊程度共同决定,一般用En表示。 超熵: 用来度量熵的不确定性,既熵的熵,一般用符号He表示。 云有两种发生器:正向云发生器和逆向云发生…

    云计算 2023年4月11日
    00
  • 1199Y元的纽曼纽扣手机到底怎么样?纽曼纽扣手机测评

    1199元的纽曼纽扣手机到底怎么样? 在选购手机时,有许多价格不高但性价比很高的手机品牌,其中纽曼纽扣手机就是一款相对较为出色的手机。该手机售价为1199元,具有超高的性价比。在下面的评测中,我们将对该手机进行详细的分析。 设计 该手机的设计十分独特,采用了橡胶材质,整体重量轻,手感舒适。屏幕采用了1.8英寸彩色屏幕,视觉效果非常棒。而且该手机配备了一键呼叫…

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