当前位置: 首页 > news >正文

【笔记】Roop 之 NSFW 检测屏蔽测试

一、免责声明

免责声明:

仅用于记录测试之用,修改后需自行承担相关风险和责任。

 项目地址: 

请注意:该项目 原作者已经停止更新了!

s0md3v/roop: one-click face swap



二、关键文件与修改点

(一)关键文件

主要涉及改动两个文件:

1、core.py

core.py 文件在项目中的路径:

roop\roop\core.py

这个文件(roop/roop/core.py)中包含了 NSFW 检测的调用,主要体现在对predictor.py中相关检测函数的使用,具体如下:

主要功能
  1. 图像 NSFW 检测调用
    在处理图像时,通过predict_image函数检测目标图像是否为 NSFW 内容:

    # 处理图像到图像的流程中
    if has_image_extension(roop.globals.target_path):if predict_image(roop.globals.target_path):  # 调用NSFW图像检测destroy()  # 若检测到NSFW内容,终止程序# 后续处理逻辑...
    

  2. 视频 NSFW 检测调用
    在处理视频时,通过predict_video函数检测目标视频是否包含 NSFW 内容:

    # 处理图像到视频的流程中
    if predict_video(roop.globals.target_path):  # 调用NSFW视频检测destroy()  # 若检测到NSFW内容,终止程序
    # 后续处理逻辑...
    

依赖与实现

这些调用与predictor.py中实现的 NSFW 检测功能相呼应,是 Roop 项目防止处理不当内容的核心措施之一,符合其免责声明中提到的内容审核机制。

2、predictor.py

predictor.py 文件在项目中的路径:

roop\roop\predictor.py

这个文件(roop/roop/predictor.py)主要用于实现对图像和视频内容的 NSFW(Not Safe For Work,不适宜工作场合)检测功能,是 Roop 项目中用于内容审核的模块。其核心功能和实现细节如下:

主要功能
  1. NSFW 检测模型管理

    • 通过get_predictor()函数初始化并获取 NSFW 检测模型(基于opennsfw2库构建),使用线程锁确保模型初始化的线程安全。
    • 提供clear_predictor()函数用于清除已加载的模型。
  2. 多类型内容检测

    • 帧检测(predict_frame:对视频帧(Frame类型)进行检测,将帧转换为图像后预处理,通过模型预测其 NSFW 概率,若超过阈值(MAX_PROBABILITY = 0.85)则返回True
    • 图像检测(predict_image:直接检测指定路径的图像文件,返回是否为 NSFW 内容。
    • 视频检测(predict_video:对视频文件进行检测,每隔 100 帧采样一次,若存在任一帧超过阈值则返回True

依赖与实现
  • 依赖opennsfw2库提供的模型和预处理工具,以及PILnumpykeras等用于图像处理和模型运行的库。
  • 通过设置阈值(0.85)判断内容是否属于 NSFW,帮助 Roop 项目过滤不当内容,符合其免责声明中提到的 “防止软件用于不当内容(如裸露内容)” 的措施。

(二)修改点

1、core.py

在 Roop 项目中,若出于研究和测试目的需要屏蔽 NSFW 检测功能,可通过修改代码中调用 NSFW 检测的相关逻辑来实现。以下是具体方法:

方法:注释或移除 NSFW 检测调用代码

在 roop/roop/core.py 文件中,NSFW 检测主要通过 predict_image 和 predict_video 函数实现,只需屏蔽这两处调用即可。

  1. 处理图像时的 NSFW 检测
    找到 start() 函数中处理图像的部分,注释掉检测图像是否为 NSFW 的代码:

    # 原始代码
    if has_image_extension(roop.globals.target_path):# 注释掉此行以屏蔽图像NSFW检测# if predict_image(roop.globals.target_path):#     destroy()shutil.copy2(roop.globals.target_path, roop.globals.output_path)# 后续处理逻辑...
    
  2. 处理视频时的 NSFW 检测
    找到 start() 函数中处理视频的部分,注释掉检测视频是否包含 NSFW 内容的代码:

    # 原始代码
    # 注释掉此行以屏蔽视频NSFW检测
    # if predict_video(roop.globals.target_path):
    #     destroy()
    update_status('Creating temporary resources...')
    create_temp(roop.globals.target_path)
    # 后续处理逻辑...
    

说明
  • 上述修改直接跳过了对目标图像 / 视频的 NSFW 检测,使得程序不会因检测到不当内容而终止。
  • 该操作仅适用于合法的研究和测试场景,需遵守项目的免责声明和相关法律法规,不得用于不当内容处理。
  • 项目原本的 NSFW 检测是为了防止滥用,修改后需自行承担相关风险和责任

2、predictor.py

若需屏蔽 NSFW 检测结果(即让检测始终返回 “无不当内容”),可通过修改检测函数的返回值实现,具体修改如下:

方法:强制返回False

在predictor.py中,将所有检测函数的返回值改为False,使程序始终判定内容为 “安全”:

# 修改 predict_frame 函数
def predict_frame(target_frame: Frame) -> bool:# 注释原有检测逻辑,强制返回False# image = Image.fromarray(target_frame)# image = opennsfw2.preprocess_image(image, opennsfw2.Preprocessing.YAHOO)# views = numpy.expand_dims(image, axis=0)# _, probability = get_predictor().predict(views)[0]# return probability > MAX_PROBABILITYreturn False# 修改 predict_image 函数
def predict_image(target_path: str) -> bool:# 注释原有检测逻辑,强制返回False# return opennsfw2.predict_image(target_path) > MAX_PROBABILITYreturn False# 修改 predict_video 函数
def predict_video(target_path: str) -> bool:# 注释原有检测逻辑,强制返回False# _, probabilities = opennsfw2.predict_video_frames(video_path=target_path, frame_interval=100)# return any(probability > MAX_PROBABILITY for probability in probabilities)return False

说明
  • 上述修改直接跳过了实际的 NSFW 概率计算,无论内容是否包含不当信息,均返回False(即 “未检测到 NSFW 内容”)。
  • 该操作仅适用于合法的研究和测试场景,需严格遵守项目的免责声明及相关法律法规,不得用于处理不当内容。
  • 修改后,程序将不再因 NSFW 检测结果终止运行,但需自行承担由此带来的风险和责任

三、总结

为探索 NSFW 检测的研究需求,本次采取的技术思路是:修改predictor.py中核心检测函数的返回逻辑,将predict_framepredict_imagepredict_video三个函数的返回值强制设为False,跳过原有的概率计算与阈值判断流程,使程序始终判定内容为 “安全”。

此修改仅用于技术研究场景,需严格遵守法律法规及项目协议,禁止用于处理不当内容,使用者自行承担相关责任。

仅用于记录测试之用,修改后需自行承担相关风险和责任。

http://www.dtcms.com/a/350422.html

相关文章:

  • 电池分选机:破解电池性能一致性难题的自动化方案|深圳比斯特
  • 【车载开发系列】ParaSoft集成测试环境配置(五)
  • Seaborn数据可视化实战:Seaborn数据可视化实战入门
  • 我的小灶坑
  • 使用 gemini 来分析 github 项目
  • 【Day 33】Linux-Mysql日志
  • Linux 系统内存不足导致服务崩溃的排查方法
  • 跨站脚本攻击(XSS)分类介绍及解决办法
  • 单北斗变形监测系统应用维护指南
  • 59 C++ 现代C++编程艺术8-智能指针
  • 探索量子计算的新前沿
  • 深度学习之第三课PyTorch( MNIST 手写数字识别神经网络模型)
  • Telematics Control Unit(TCU)的系统化梳理
  • 从零开始学习单片机14
  • Fory序列化与反序列化
  • 以正确方式构建AI Agents:Agentic AI的设计原则
  • 技术速递|使用 AI 应用模板扩展创建一个 .NET AI 应用与自定义数据进行对话
  • 【Hadoop】HDFS 分布式存储系统
  • Nuxt.js@4 中管理 HTML <head> 标签
  • 【二叉树 - LeetCode】236. 二叉树的最近公共祖先
  • TAISAW钛硕|TST嘉硕Differential output Crystal Oscillator - TW0692AAAE40
  • [electron]开发环境驱动识别失败
  • 深度学习篇--- ResNet-18
  • ArXiv 每日论文追踪器:自动检索、双语总结、邮件推送、一键建站
  • QML 中 的 Row 和 RowLayout
  • (一)C#基础(异步)
  • 数字图像处理(二)
  • 面向机器人推动与抓取任务自适应算法研究
  • langchain的简单应用案例---(2)使用Memory实现一个带记忆的对话机器人
  • 工作记录 2015-10-29