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

相关文章

  • ECharts鼠标事件的处理方法详解

    ECharts鼠标事件的处理方法详解 ECharts是一款基于JavaScript的开源可视化库,它提供了丰富的图表类型和交互功能,可以帮助开发者快速构建交互式的数据可视化应用。其中,鼠标事件是ECharts中常用的交互方式之一,本文将详细介绍ECharts鼠标事件的处理方法。 ECharts鼠标事件类型 ECharts提供了多种鼠标事件类型,包括: cli…

    云计算 2023年5月16日
    00
  • Nodejs libuv运行原理详解

    Node.js libuv运行原理详解 Node.js是一种基于事件驱动、非阻塞I/O模型的服务器端JavaScript运行环境。在Node.js中,libuv是一个跨平台的异步I/O库,负责处理事件循环、文件I/O、网络I/O等操作。本文将详细介绍Node.js libuv的运行原理,并提供两个示例说明。 libuv的事件循环 libuv的事件循环是Nod…

    云计算 2023年5月16日
    00
  • springboot操作阿里云OSS实现文件上传,下载,删除功能

    Spring Boot操作阿里云OSS实现文件上传、下载、删除功能攻略 阿里云OSS(Object Storage Service)是一种高可用、高可靠、安全、低成本的云存储服务。本文将提供一个完整的攻略,包括如何使用Spring Boot操作阿里云OSS实现文件上传、下载、删除功能。以下是详细步骤: 步骤1:创建Spring Boot项目 首先,我们需要创…

    云计算 2023年5月16日
    00
  • 2023年企业服务行业6大CRM客户关系管理系统盘点

    本文首先分析了企业服务行业5大业务场景以及选型标准,盘点了目前适合企业服务行业的六大CRM系统服务商并进行了深入分析。希望帮到你 对于企业而言,今天的世界,唯一不变的就是变化,尤其是数字化时代,应对变化成为企业经营增长的必修课。当下,企业数字化转型已经进入深水区,单一的产品和技术创新已经越来越难以满足更加系统和复杂的转型需求,以业务经营为目标的发展诉求,使得…

    云计算 2023年4月25日
    00
  • 云计算概念与发展

    腾讯云云计算概念与发展学习笔记 https://cloud.tencent.com/edu/learning/course-1046-872 1、云计算技术和分层架构 1.1虚拟化技术                1.2上层应用保障技术   1.3云计算产品组件           1.4云产品优势      

    云计算 2023年4月12日
    00
  • 云计算需要学习哪些内容 为什么要学容器技术

      云计算需要学习哪些内容?为什么要学容器技术?云计算是一门新兴热门技术,包含的内容很多,而容器技术是其中的重点。有人好奇为什么要学习容器,它具有哪些价值?下面就给大家讲解一下。   容器的价值可以从两个角度来分析:   1、从应用架构的角度。容器技术可以方便地支持微服务架构实现应用的现代化,更加灵活的应对变化和弹性扩展。在软件生命周期管理上面,容器技术可以…

    云计算 2023年4月13日
    00
  • 基于MybatisPlus插件TenantLineInnerInterceptor实现多租户功能

    实现多租户功能可以使用MybatisPlus插件TenantLineInnerInterceptor,该插件内部通过拦截SQL语句,并在SQL语句中添加租户ID的条件,从而实现多租户数据隔离。 实现步骤 1. 添加MybatisPlus依赖 <dependency> <groupId>com.baomidou</groupId&…

    云计算 2023年5月17日
    00
  • 未来云计算如何演进?阿里云的“云钉一体”是个好思路

    现在,我们需要什么样的云计算? 技术专家说,要更快更安全的硬件和操作系统;IT工程师说,要运营和运维都简单易用的解决方案;而用户说,要能解决问题、提高效率的、实际叫不叫“云计算”都无所谓。 的确如此。从最终用户角度来说,技术只是实现手段之一。比如在过去单机时代,用户说要PC还是要MAC吗,是要Windows还是要Linux了吗? 现在被广泛定义的“基础设施架…

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