不良图片检测

news2024/9/22 13:44:20

OpenNSFW模型简介

OpenNSFW是一个由 Yahoo 研究院开源的深度学习模型,用于识别和区分网络上的正常内容与不适宜内容(Not Safe For Work)。

项目地址:https://github.com/yahoo/open_nsfw

OpenNSFW主要基于Caffe框架实现,采用有监督的学习方式,对不良图片和正常图片进行标识,然后投入Caffe模型进行分类学习和计算。NSFW模型先用了ImageNet 1000数据集做了预训练,然后采用“finetune”工具,对NSFW的数据集进行再训练,微调了权重值。采用ResNet 50 框架用于预训练的网络并引入残差网络对模型进行修正。

在具体的模型实现过程中,雅虎的NSFW在具体实现过程中,引入了ResNet网络改善过拟合的问题,并在执行效率与精确性之间做了取舍权衡。在训练模型过程里,从下面的一些模型和框架做了评估和取舍,选择了ResNet-50-thin模型,在每一层只选择了一半的滤波器用于模型计算,兼顾效率和精确度。

流程如图所示

系统设计

1、视频预处理功能

对视频流进行抽帧处理,抽取I帧将要检测的图片序列。

2、图片预处理功能

对所抽取的I帧图片,进行肤色比例的快速检测,对于疑似不良图片进行筛选,进入二次待检序列。

基于YCbCr皮肤颜色比例的算法简述如下:由于在不同光照环境下,RGB颜色空间会因为其不同的明暗度,影响较大,在这个空间内做肤色识别,效果不好。而在YCbCr颜色空间中,Y代表亮度,Cb代表蓝色色度向量,Cr表示红色色度向量,具有亮度与色度分离的优点,肤色类聚度较好,可以取得较好的识别效果。

根据一般经验值,设置判断条件为:97.5≤Cb≤142.5 & 134≤Cr≤176。

基本分析过程如下:

● 遍历图片中的每个像素,按照上述约束条件检测像素颜色是否为肤色;

● 将相邻的肤色像素归为一个皮肤区域,得到若干个皮肤区域;

● 去除背景或其他特殊情景识别。

不良图片判定条件为:皮肤区域的像素与图像所有像素的比值大于30%。

3、不良图片检测 

采用Caffe的不良图片预训练模型,进行图片推理。将分值高于0.85的图片列出,根据图片的标签信息(含影片ID、时间戳)​,对目标影片做标识。

程序示例

肤色检测

import cv2
import numpy as np

def is_skin_pixel(y, cb, cr):
    return 97.5 <= cb <= 142.5 and 134 <= cr <= 176

def detect_skin_areas(image):
    # 转换为 YCbCr 颜色空间
    ycbcr_image = cv2.cvtColor(image, cv2.COLOR_BGR2YCrCb)
    
    # 创建掩膜,用于标记肤色区域
    skin_mask = np.zeros(ycbcr_image.shape[:2], dtype=np.uint8)
    
    # 遍历每个像素,判断是否为肤色
    for y in range(ycbcr_image.shape[0]):
        for x in range(ycbcr_image.shape[1]):
            Y, Cb, Cr = ycbcr_image[y, x]
            if is_skin_pixel(Y, Cb, Cr):
                skin_mask[y, x] = 255
    
    return skin_mask

def calculate_skin_ratio(image, skin_mask):
    total_pixels = image.shape[0] * image.shape[1]
    skin_pixels = np.sum(skin_mask == 255)
    return skin_pixels / total_pixels

def is_nsfw(image_path):
    # 读取图片
    image = cv2.imread(image_path)
    
    # 检测皮肤区域
    skin_mask = detect_skin_areas(image)
    
    # 计算皮肤区域比例
    skin_ratio = calculate_skin_ratio(image, skin_mask)
    
    # 判断是否为不良图片
    return skin_ratio > 0.30

# 示例用法
image_path = 'example.jpg'
if is_nsfw(image_path):
    print("图片可能包含不良内容")
else:
    print("图片内容正常")

推理检测

import caffe
import numpy as np
from PIL import Image

# 设置 Caffe 为 GPU 模式或 CPU 模式
caffe.set_mode_cpu()

# 加载模型
net = caffe.Net('deploy.prototxt', 'bvlc_nsfw.caffemodel', caffe.TEST)

# 加载图片
def preprocess_image(image_path):
    image = Image.open(image_path).resize((224, 224))
    image = np.array(image).astype(np.float32)
    image = image - 127.5
    image = image * 0.007843
    return image

# 进行推理
def classify_image(image_path):
    image = preprocess_image(image_path)
    net.blobs['data'].data[...] = image
    output = net.forward()
    score = output['prob'][0][1]
    return score

image_path = 'example.jpg'
score = classify_image(image_path)
print(f'NSFW score: {score}')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2057629.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

邮票孔拼版制作方法

邮票孔拼版制作方法 拼版后的局部图:(中间用连接桥的方式&#xff0c;此方式能最少程度上减少残留) 2&#xff09;拼版后的效果图 3&#xff09;邮票孔拼版规则: 拼板与板间距1.2MM或者1.6MM 等邮票孔&#xff1a;8个0.55MM的孔,孔间距0.2MM加两排&#xff0c;邮票孔伸到…

KubeSphere核心实战_kubesphere部署redis01_为redis指定配置文件_指定存储卷_配置服务---分布式云原生部署架构搭建047

然后我们再来,部署一下redis,可以看到,首先去容器官网去找到对应的redis的镜像然后 可以看到镜像中都有说的,如何启动,以及 --appendonly yes 是指定持久化.然后 /data表示数据存储的位置. 可以看到数据存储位置 然后还有配置文件的位置. 可以看到,我们首先去创建配置文件,然后…

【专题】2024全数驱动 致胜未来-数字化敏捷银行白皮书报告合集PDF分享(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p37404 政策明确发展使命&#xff0c;新时代商业银行应坚持党建引领&#xff0c;秉持高质量发展理念。数字经济已成大势&#xff0c;商业银行需构建数字基础设施能力&#xff0c;强化顶层战略规划。当前商业银行数字化发展面临诸多挑…

改变自己·心情治愈

今早起床了 看镜子里的我 忽然发现我发型睡得有点kuso 一点点改变&#xff0c;有很大的差别 你我的力量也能改变世界 最近比较烦 最近情绪很down 每天看新闻都会很想大声尖叫 但脏话没用 大家只会嫌凶 我改变自己发现大有不同 新一代的朋友我们好好地加油 大家一起大…

QT:QWebEngineView基本使用

QWebEngineView介绍 添加库 QT core gui webenginewidgets出现问题 解决 提升类 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//ui->web_widget->load(QUrl("http://www.baidu.com"));ui->…

Rimworld边缘世界使用服务器开服联机教程

订阅联机模组RimWorld Together (MULTIPLAYER)&#xff08;百度莱卡云&#xff09; 打开创意工坊搜索RimWorld Together (MULTIPLAYER) 订阅联机模组与它的依赖模组 打开游戏➡点击Mod配置 双击左边灰色的模组&#xff0c;到右边启用 还需要排一下顺序&#xff0c;顺序不对会…

iPhone变身万能钥匙,iOS 18.1让你的手机解锁一切

Apple 近日发布新闻稿宣布&#xff0c;在即将推出的 iOS 18.1 更新中&#xff0c;将开放全新的 NFC&#xff08;近场通信&#xff09;和 SE&#xff08;安全元件&#xff09;API 给第三方开发者使用。这一举措将使得开发者能够开发出更加多样化和实用的应用程序&#xff0c;如车…

Redis清空缓存

Windows环境下使用命令行进行redis缓存清理 1、redis安装目录下输入cmd 2、redis-cli -p 端口号 3、flushdb 清除当前数据库缓存 4、flushall 清除整个redis所有缓存

Dubbo源码深度解析(七)

接上一篇博客《Dubbo源码深度解析(六)》&#xff0c;上篇博客主要从服务消费方开始讲起&#xff0c;主要讲&#xff1a;如果类中的属性或者方法&#xff0c;如果被DubboReference注解所修饰&#xff0c;Dubbo是怎么处理的&#xff0c;处理逻辑类似Spring框架提供的Autowired注解…

JavaScript - Ajax

Asynchronous JavaScript And XML&#xff0c;异步的JavaScript和XML 作用: 数据交换&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据。异步交互&#xff1a;可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的技术…

Vue2 与 Vue3 生命周期对比

首先我们需要了解 Vue2 的生命周期&#xff0c;请参考我之前写的博文 Vue2-生命周期 Vue2 生命周期存在四个阶段&#xff0c;八个钩子函数&#xff0c;具体作用可以看图&#xff0c;详细解释可以参考之前的博文 Vue3 生命周期 经过对比&#xff0c;我们发现 Vue3 的生命周期也存…

Office办公软件从哪里下载

Offece下载方法有哪些&#xff1f;从哪里下载Office办公软件&#xff1f;是日常办公必不可少的常用软件。 进入正题 第一步&#xff1a;下载最新的office办公软件软件包 https://docs.qq.com/doc/DQUhtSnJxU1FxZnVF 先下载后解压&#xff0c;看到下面的文件 然后右击-以管理…

mq-work模型

work模型是什么-任务模型 会产生什么现象&#xff1f; 操作 1、新建一个队列 2、在consuner增加2个消费者 2、发送50条消息 4、消费者1和消费者2&#xff0c;一轮1次 消费能力不一致&#xff0c;还是一人一个消费50条消息&#xff0c;所以浪费了能力 总结 prefetch预获取&#…

文心快码 Baidu Comate 前端工程师观点分享:以文心快码 Baidu Comate为例,智能代码助手需要什么(一)

本系列视频来自百度工程效能部的前端研发经理杨经纬&#xff0c;她在由开源中国主办的“AI编程革新研发效能”OSC源创会杭州站105期线下沙龙活动上&#xff0c;从一款文心快码&#xff08;Baidu Comate&#xff09;前端工程师的角度&#xff0c;分享了关于智能研发工具本身的研…

单片机原理及技术(六)—— 中断系统的工作原理

目录 一、AT89S51中断技术概述 二、AT89S51中断系统结构 2.1 中断请求源 2.2 中断请求标志寄存器 2.2.1 TCON 寄存器 2.2.2 SCON 寄存器 三、中断允许与中断优先级的控制 3.1 中断允许寄存器 IE 3.2 中断优先级寄存器 IP 四、响应中断请求的条件 五、外部中断的触发…

KubeSphere核心实战_kubesphere部署redis02_创建redis现指定存储卷_配置外网访问服务---分布式云原生部署架构搭建048

然后我们再去看一下服务,这里,这里就是刚刚我们创建 redis工作负载的时候,给咱们自动生成了一个服务,可以看到这个服务, his-redis-后面有乱码是自动生成的,如果我们想弄一个有意义的,好看的,可以删除了自己创建 比如我们删除掉自动生成的服务,注意不要删除工作负载 点击确定…

文书智能助手

背景 司法、医疗等行业存在着大量的文书&#xff0c;一份文书或者卷宗少则几十页&#xff0c;多则几万页。在查看和检查这些文书时&#xff0c;会遇到大量的信息。当需要查询进一步的详细内容时&#xff0c;往往需要选择一下文字&#xff0c;然后再在各种系统中 查询详细的信息…

ES与MySQL数据同步实现方式

1.什么是数据同步: 1.Elasticsearch中的酒店数据来自于mysql数据库&#xff0c;因此mysql数据发生改变时&#xff0c;Elasticsearch也必须跟着改变&#xff0c;这个就是Elasticsearch与mysql之间的数据同步 2.数据同步实现方式&#xff1a; 常见的数据同步方案有三种&#x…

2020 位示图

假设某计算机的字长为32位&#xff0c;该计算机文件管理系统磁盘空间管理采用位示图&#xff08;bitmap&#xff09;&#xff0c;记录磁盘的使用情况。若磁盘的容量为300GB&#xff0c;物理块的大小为4MB&#xff0c;那 么位示图的大小为&#xff08; &#xff09;个字。 要计…

【SQL】仅出现一次的最大数据

目录 题目 分析 代码 题目 MyNumbers 表&#xff1a; ------------------- | Column Name | Type | ------------------- | num | int | ------------------- 该表可能包含重复项&#xff08;换句话说&#xff0c;在SQL中&#xff0c;该表没有主键&#xff09;。…