前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >学习NestJS开发小程序后台(二)检测图片敏感内容

学习NestJS开发小程序后台(二)检测图片敏感内容

原创
作者头像
一起重学前端
修改于 2024-09-23 08:52:28
修改于 2024-09-23 08:52:28
16300
代码可运行
举报
运行总次数:0
代码可运行

前言

在当今数字化时代,小程序以其便捷、高效的特点成为了人们生活和工作中不可或缺的一部分。而在小程序开发中,上传图片功能常常是关键需求之一。然而,随着网络环境的日益复杂,确保上传的图片以及相关文本不含有敏感内容变得至关重要。今天,我们就来探讨一下如何在小程序开发中实现上传图片功能中,需要关注的内容安全监测接口进行严格的校验。

小程序获取图片,未检测图片是否含有敏感内容(黄赌毒)

  • 微信公众平台建议:1.尽快排查删除小程序中已存在的违规内容,包括但不限于平台验证时发布的测试文字、图片等;2.调用内容安全监测接口校验文本/图片是否含有敏感内容,降低被恶意利用导致传播恶意内容的风险。
小程序信息安全风险
小程序信息安全风险

第一版express版本 调用微信小程序官方img_sec_check接口(官方废弃),也没有通过官方代码审核。。。后面发现nsfwjs,一个JavaScript 库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const wxImgCheck = async (token, file) => {
    const url = `https://api.weixin.qq.com/wxa/img_sec_check?access_token=${token}`;
    const stream = fs.createReadStream(file.path);
    const form = new FormData();
    form.append('media', stream);

    const getHeaders = form => {
        return new Promise((resolve, reject) => {
            form.getLength((err, len) => {
                if (err) { reject(err); };
                const headers = Object.assign({ 'Content-Length': len, }, form.getHeaders());
                resolve(headers);
            });
        })
    }

    try {
        const headers = await getHeaders(form);
        const res = await axios.post(url, form, { headers });
        if (res.data.errcode === 40001 || res.data.errcode === 40013) {
            global.AccessToken.flag = true;
            const newToken = await getToken();
            await wxImgCheck(newToken, file);
        }
        
        return res.data;
    } catch (err) {
        return {
            errcode: 500,
            message: err.message
        }
    }
}

今天要介绍的是 nsfwjs

nsfwjs 库,基于 TensorFlow.js 构建。 是一个用于检测图像是否包含不适当内容(Not Safe For Work,NSFW)的 JavaScript 库。

nsfwjs 的工作原理主要基于深度学习中的卷积神经网络(Convolutional Neural Network,CNN)技术来对图像进行分类,以判断图像是否属于不适当内容。

1. 前端项目直接使用

nsfwjs有三个model库:MobileNetV2、MobileNetV2Mid、InceptionV3

我们也能使用自己的匹配库

代码语言:ts
AI代码解释
复制
const model = nsfwjs.load("/path/to/model/directory/");
代码语言:ts
AI代码解释
复制
import * as nsfwjs from 'nsfwjs';


const imgbody = document.getElementById('img');
const img = new Image();
img.crossOrigin = 'anonymous';
img.src =
'https://xxxxxxxx.jpg';
imgbody?.appendChild(img);
if (img) {
  const model = await nsfwjs.load('MobileNetV2');
  const predictions = await model.classify(img);
  console.log('Predictions: ', predictions);
}

下图百分比就是鉴别结果,主要区分如下:

  • Drawing 绘图 – 安全的工作图纸(包括动漫)
  • Hentai – 变态和色情图纸
  • Neutral – 工作中性图像安全
  • Porn – 色情图片,性行为
  • Sexy – 色情图片,而不是色情内容
2. 通过nestjs后台调用nsfwjs

类似前端直接使用,需要注意的是,model.classify img参数类型

代码语言:bash
AI代码解释
复制
nsfwjs.classify(img: tf.Tensor3D | ImageData | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement, topk?: number): Promise<Array<nsfwjs.predictionType>>
代码语言:ts
AI代码解释
复制
import {
  Controller,
  Post,
  UploadedFile,
  UseInterceptors,
} from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import * as nsfwjs from 'nsfwjs';
import * as tf from '@tensorflow/tfjs-node';
import { readFileSync } from 'fs';
import jpeg from 'jpeg-js';

const convert = async (img) => {
  // Decoded image in UInt8 Byte array
  const image = await jpeg.decode(img, { useTArray: true });

  const numChannels = 3;
  const numPixels = image.width * image.height;
  const values = new Int32Array(numPixels * numChannels);

  for (let i = 0; i < numPixels; i++)
    for (let c = 0; c < numChannels; ++c)
      values[i * numChannels + c] = image.data[i * 4 + c];

  return tf.tensor3d(values, [image.height, image.width, numChannels], 'int32');
};

@Controller('image-check')
export class ImageCheckController {
  @Post('detect')
  @UseInterceptors(FileInterceptor('image'))
  async detectImage(@UploadedFile() file) {
    if (!file) {
      return { error: 'No image uploaded.' };
    }
    const model = await nsfwjs.load('InceptionV3');
    const buffer = readFileSync(file.path);
    const image = await convert(buffer);
    const predictions = await model.classify(image);
    return predictions;
  }
}
判断图片非法业务逻辑

假设如果色情概率超过一定阈值则认为非法,看业务需要,根据预测结果中成人内容(pornhentai)的概率是否超过一定阈值(这里假设为 0.5)来判断图片是否非法,并返回判断结果。你可以根据实际情况调整阈值和具体的判断逻辑。(宁可错杀一千,也不放过一个! 哈哈哈)

代码语言:ts
AI代码解释
复制
let isImageIllegal = false;
if (predictions[0].probability > 0.5 && predictions[0].className === 'Porn') {
  isImageIllegal = true;
}
后续

本文只是给大家提供一个可行性思路,具体方案可以根据实际业务来处理。(腾讯云、阿里云也提供了图片检测云api,当然需要收钱~)ps:因为nsfwjs的准确率官方模型的准确率小型模型的准确率约为 90%,中型模型约为 93%,实际使用也存在一些误差,主要是可以白嫖。

最后大家可以试试,nsfwjs在线地址

nsfwjs在线地址
nsfwjs在线地址

参考

https://nsfwjs.com/

https://github.com/infinitered/nsfwjs

腾讯技术创作特训营s9

学习NestJS的第一个接口(一)

学习NestJS开发小程序后台(一)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
算法警告!该图片涉嫌违规不予显示
导读:一般看到这张图,“老司机”立马心领神会,就会猜到这篇文章的主题大致与什么相关。
IT阅读排行榜
2019/03/12
1.9K0
算法警告!该图片涉嫌违规不予显示
一网打尽“小黄图”!手把手教你造一只AI鉴黄神器(内附代码及数据集)
机器学习和深度学习发展到了今天,造出的AI已经可以在下棋方面狂虐人类。设计个识别不雅图片的算法也不难实现。
大数据文摘
2019/04/26
4.3K0
一网打尽“小黄图”!手把手教你造一只AI鉴黄神器(内附代码及数据集)
Nest.js 实战 (五):如何实现文件本地上传
为了处理文件上传,Nest 提供了一个内置的基于 multer 中间件包的 Express 模块。Multer 处理以 multipart/form-data 格式发送的数据,该格式主要用于通过 HTTP POST 请求上传文件。
白雾茫茫丶
2024/07/30
2550
Nest.js 实战 (五):如何实现文件本地上传
2022最新更新,图片和文字内容安全审查
在应用中,所有由用户生产的内容(UGC),而又有可能被其他用户访问到时,都应该经过内容安全审查。在微信小程序内,UGC的内容如果没有安全审查,小程序是不允许上架的。完全依靠人来审核成本巨大,本小节就来教大家使用微信提供的内容安全审查接口,可以审查图片,音频,文本的内容是否合规。
大帅老猿
2022/06/06
1.8K0
学习NestJS开发小程序后台(一)
前一篇写NestJS的特点,使用NestJS,开启我们的Hello World! 以及NestJS各种热更新方法,本篇会写NestJS在实际项目中的应用。(ORM、参数校验、全局错误处理等等)
一起重学前端
2024/09/12
3770
敲敲级简单的鉴别H图片的小程序
首先,来看一下程序运行结果的截图 功能实现 一、下载SDK pip install qcloud_image 先贴出官方给的实例代码: #!/usr/bin/env python — coding:
小歪
2018/04/04
8910
敲敲级简单的鉴别H图片的小程序
用云开发CloudBase,实现小程序多图片内容安全检测
随笔川迹: 一个靠前排的90后具有情怀的技匠,路上正追逐斜杠青年的践行者,人人领读发起人。
腾讯云开发TCB
2020/06/09
1.4K0
从人工智能鉴黄模型,尝试TensorRT优化
随着互联网的快速发展,越来越多的图片和视频出现在网络,特别是UCG产品,激发人们上传图片和视频的热情,比如微信每天上传的图片就高达10亿多张。每个人都可以上传,这就带来监管问题,如果没有内容审核,色情图片和视频就会泛滥。前不久,一向以开放著称的tumblr,就迫于压力,开始限制人们分享色情图片。更别提国内,内容审核是UCG绕不过去的坎。还记得前几年出现的职业鉴黄师这一职业么?传说百万年薪,每天看黄片看得想吐,但最近又很少有人提及这一职业,这个应监管而生的职业,因人工智能的出现又快速消亡。(当然也不是完全消亡,毕竟判断是否色情是一个主观的事情,有些艺术和色情之间的边界比较模糊,需要人工加以判断)
云水木石
2019/07/02
2K0
从人工智能鉴黄模型,尝试TensorRT优化
【机器学习】Tensorflow.js:在浏览器中使用机器学习实现图像分类
使用 JavaScript 和 Tensorflow.js 等框架是入门和了解更多机器学习的好方法。 在本文中,我会介绍当前使用 Tensorflow.js 可用的三个主要功能,并阐明在前端使用机器学习的局限性。
前端修罗场
2023/10/07
4150
微信小程序内容安全检测(敏感词、敏感图)
推荐使用 EasyWechat: https://www.easywechat.com/docs/4.x/basic-services/content_security
很酷的站长
2023/01/02
5.8K0
微信小程序内容安全检测(敏感词、敏感图)
Nest + Sharp 实现了一个 gif 压缩工具,帮我省不少钱
animated 设为 true 是读取所有的帧,不然默认只会读取 gif 的第一帧。
神说要有光zxg
2023/08/29
4420
Nest + Sharp 实现了一个 gif 压缩工具,帮我省不少钱
利用人工智能检测色情图片
色情内容在中国一直处于严格的监管,即使这样,互联网上还是很容易就能访问到色情内容。还记得曾经的“绿坝-花季护航”软件么?由于其识别效果差、软件不稳定,最后不了了之,浪费了大量的人力和金钱。
云水木石
2019/07/02
3.2K1
利用人工智能检测色情图片
快速打开 Nestjs 的世界
src目录是主要的源码目录,主要由入口文件 main.ts 和 一组 module,service,controller构成。
前端小鑫同学
2023/12/04
6710
快速打开 Nestjs 的世界
小程序-云开发-如何对敏感词进行过滤即内容安全的检测(上)
无论是小程序还是自行开发的一些类似社交,带有用户自行产生内容的软件应用,例如:即时通讯,社群,论坛,音视频直播等,对于接入内容安全的检测是非常有必要的
itclanCoder
2020/10/28
3.8K0
小程序-云开发-如何对敏感词进行过滤即内容安全的检测(上)
NestJS学习总结篇
完整版本,点击此处查看 http://blog.poetries.top/2022/05/25/nest-summary
前端进阶之旅
2022/05/27
2.4K0
小程序-云开发-如何对敏感词进行过滤即内容安全的检测(下)
在前面一文小程序-云开发-如何对敏感词进行过滤即内容安全的检测(上)中通过在小程序端请求云函数msgSecCheck1,通过request,request-promise请求微信提供的内容安全接口以及获取access_token,实现了对小程序端输入文本内容安全的检测
itclanCoder
2020/10/28
3.2K0
小程序-云开发-如何对敏感词进行过滤即内容安全的检测(下)
unicloud云函数开发微信客服消息自动回复图片消息(完整步骤)
此时点击提交,会提示你Token校验失败,请检查确认,不要慌,只是云函数里面没有写而已。这个时候就可以去写云函数的代码了~~
猿来是前端
2022/09/19
1.5K0
unicloud云函数开发微信客服消息自动回复图片消息(完整步骤)
WSGI服务器部署Python-Flask项目
本文详细介绍了如何通过WSGI方式部署一个基于TensorFlow图像识别的Flask项目。首先简要介绍了Flask框架的基本概念及其特点,其次详细阐述了Flask项目的部署流程,涵盖了服务器环境配置、Flask应用的创建与测试、WSGI服务器的安装与配置等内容。本文旨在帮助读者掌握Flask项目的部署方法,解决在部署过程中可能遇到的问题,确保项目能够稳定高效地运行。
Damon小智
2024/07/15
3000
WSGI服务器部署Python-Flask项目
Python进阶-部署Flask项目
本文详细介绍了如何通过WSGI方式部署一个基于TensorFlow图像识别的Flask项目。首先简要介绍了Flask框架的基本概念及其特点,其次详细阐述了Flask项目的部署流程,涵盖了服务器环境配置、Flask应用的创建与测试、WSGI服务器的安装与配置等内容。本文旨在帮助读者掌握Flask项目的部署方法,解决在部署过程中可能遇到的问题,确保项目能够稳定高效地运行。
Damon小智
2024/06/13
3250
Python进阶-部署Flask项目
TensorFlow.js 入门指南:让你的JavaScript应用拥有机器学习能力
随着机器学习技术的普及,不再仅限于Python和数据科学专家。通过TensorFlow.js,你可以将强大的机器学习能力带入你的JavaScript应用中。不论是网页、移动端还是桌面应用,集成机器学习都能显著提升功能性和用户体验。在本指南中,我们将探讨如何设置TensorFlow.js,构建和训练模型,并实现实际应用。
前端达人
2024/07/10
7370
TensorFlow.js 入门指南:让你的JavaScript应用拥有机器学习能力
推荐阅读
相关推荐
算法警告!该图片涉嫌违规不予显示
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验