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

相关文章

  • 搭建自己的云计算平台

    1. Enomalism (http://www.enomaly.com/) 云计算平台。Enomalism 是一个开放源代码项目,它提供了一个功能类似于 EC2 的云计算框架。Enomalism 基于 Linux,同时支持 Xen 和 Kernel Virtual Machine(KVM)。Enomalism 提供了一个基于 TurboGears Web …

    云计算 2023年4月10日
    00
  • 云计算:产业链合纵掘金企业级市场

    众多实践已经帮助企业从云计算中获得巨大收益。“云计算将是企业IT化的新核心”,正如IDC首席分析师Frank Gens所说,“云端将会发现功能最丰富的IT产品。” 六大加速器推进增长 与美国等成熟市场相比,国内云计算市场在2013-2014年增速已经高于全球平均水平,但是由于起步较晚,累计体量仍处于比较初级的阶段。目前,国内公有云的市场规模仅相当于美国201…

    云计算 2023年4月13日
    00
  • 《云计算核心技术剖析》读书笔记之一

    http://book.douban.com/subject/6382788/ 通过2周的时间,阅读完了由吴朱华编著的《云计算核心技术剖析》一书。同时国内由CSDN协办的第四届云计算大会要开幕,我在这里把自己写下这本书的读书笔记。这本书是2011年出版,但是在这本书上对微软的Windows Azure云平台都没有单独放出来编写,这应该算是其中最大的不足。同时…

    云计算 2023年4月11日
    00
  • 一波低价日本VPS主机乱谈与推荐

    一波低价日本VPS主机乱谈与推荐 低价VPS主机的优缺点 低价VPS主机的优点:价格便宜,适合个人或小型团队使用,可以自己搭建网站或者进行二次开发。低价VPS主机的缺点:配置不高,硬件资源较少,安全性不高,维护需要自己解决等问题。 日本VPS主机的特点 日本VPS主机的特点:地理位置相对中国来说比较近,一般有千兆网络,可以适应对速度有比较高要求的用户。 推荐…

    云计算 2023年5月17日
    00
  • 计算机组成原理 — 输入输出系统 – 云物互联

    计算机组成原理 — 输入输出系统 2019-07-24 19:11 云物互联 阅读(658) 评论(0) 编辑 收藏 举报 目录 文章目录 目录 前言列表 输入输出系统 设备控制器 设备控制器的组成 外部设备的编址方式 数据传输控制方式 程序直接控制 程序中断控制 直接存储器存取(DMA)控制 I/O 通道控制 外围处理机控制 外设接口 磁盘控制器接口类型 …

    2023年4月9日
    00
  • JQuery的Ajax跨域请求原理概述及实例

    JQuery是一款优秀的JS框架,可以方便地进行Ajax请求。但是在跨域请求方面,要特别注意相关的规则。 Ajax跨域请求原理概述 跨域请求的定义 所谓跨域请求,是指在发送Ajax请求的过程中,请求的地址和当前页面的地址不在同一个域下。 跨域请求的限制 浏览器出于安全性考虑,限制了Ajax请求所能请求的范围,即同源策略。同源策略限制了Ajax请求只能请求同一…

    云计算 2023年5月17日
    00
  • 云计算与虚拟化的区别

          1、传统数据中心面临的问题 在讲云计算和虚拟化之前,在没有云计算之前我们传统统数据中心面临的问题。 1.1、传统IDC托管 1 2 3 4 买台机器-放到IDC-安装系统-部署应用-买个域名-绑定上去-对外访问-ICP备案-ICP证(电子商务)—文网文(文化部备案)–公安局备案-接入备案(机房接入备案,备案现在机房管 ) 注销备案 — 各种坑…

    云计算 2023年4月13日
    00
  • 机械硬盘还需要吗?什么人还需要一块机械硬盘?

    机械硬盘还需要吗? 机械硬盘是电脑存储数据的最基本和最常见的存储设备之一,但是随着固态硬盘在性能、价格方面的逐渐提升,机械硬盘是否还有存在的必要呢?下面我们来深入探究这个话题。 机械硬盘的优点 存储容量大:机械硬盘的存储容量一般比同等价位的固态硬盘要大得多,对于一些需要大量储存数据的用户来说,机械硬盘仍然是一个不错的选择。 耐用:机械硬盘的优缺点之一就是机械…

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