opennsfw2

opennsfw2

Keras实现的开源NSFW图像视频检测工具

opennsfw2是一个基于Keras的开源图像分类模型,用于检测不适宜工作场合(NSFW)的内容。该项目提供简单API,可对图片和视频进行NSFW概率预测。支持TensorFlow和JAX后端,兼容Python 3.9-3.11。项目功能包括图像预处理、模型加载和批量推理,是一个完整的NSFW内容检测工具。

OpenNSFW 2NSFW检测图像分类Keras预训练模型Github开源项目

logo

ci License MIT 1.0

简介

检测不适合工作(NSFW)内容是计算机视觉领域的一项高需求任务。虽然NSFW内容有多种类型,但这里我们主要关注色情图像和视频。

最初由Caffe框架开发的雅虎开放-NSFW模型一直很受欢迎,但这项工作现已停止,Caffe也变得不太流行。 有关上下文、定义和模型训练细节,请参见雅虎项目页面上的描述。

这个Open-NSFW 2项目提供了雅虎模型的Keras实现,并参考了之前的第三方TensorFlow 1实现。请注意,Keras 3兼容TensorFlow、JAX和PyTorch。但目前这个模型只保证能在TensorFlow和JAX上工作。

提供了一个简单的API,用于对图像和视频进行预测。

安装

经过TensorFlow和JAX测试,适用于Python 3.9到3.12。

关于PyTorch:

OpenNSFW 2模型实际上可以在PyTorch上运行,但最大的问题是PyTorch上的推理输出与TensorFlow和JAX完全不同。原因还不清楚。另外,推理在PyTorch上可能要慢得多,因为存在这里讨论的问题,即PyTorch使用channels_first作为图像数据格式,而这个模型使用channels_last(与TensorFlow和JAX一样),因此Keras需要在每一层来回转换通道顺序。因此,目前不建议在PyTorch上使用这个模型。

从PyPI安装Open-NSFW 2及其依赖项是最好的方式:

python3 -m pip install --upgrade opennsfw2

或者从这个仓库获取最新版本:

git clone git@github.com:bhky/opennsfw2.git cd opennsfw2 python3 -m pip install .

使用

以下是一些快速入门示例。 更多详细信息,请参阅API部分。

图像

import opennsfw2 as n2 # 要获得单个图像的NSFW概率,请提供图像文件路径或PIL.Image.Image对象。 image_handle = "path/to/your/image.jpg" nsfw_probability = n2.predict_image(image_handle) # 要获得一系列图像的NSFW概率,请提供文件路径列表或PIL.Image.Image对象列表。 # 使用这个函数比使用`predict_image`循环要好,因为模型只会实例化一次,并在推理过程中进行批处理。 image_handles = [ "path/to/your/image1.jpg", "path/to/your/image2.jpg", # ... ] nsfw_probabilities = n2.predict_images(image_handles)

视频

import opennsfw2 as n2 # 视频可以是任何OpenCV支持的格式。 video_path = "path/to/your/video.mp4" # 返回两个列表,分别给出每帧的经过时间(秒)和NSFW概率。 elapsed_seconds, nsfw_probabilities = n2.predict_video_frames(video_path)

使用Keras的底层

import numpy as np import opennsfw2 as n2 from PIL import Image # 加载并预处理图像。 image_path = "path/to/your/image.jpg" pil_image = Image.open(image_path) image = n2.preprocess_image(pil_image, n2.Preprocessing.YAHOO) # 预处理后的图像是一个形状为(224, 224, 3)的NumPy数组。 # 创建模型。 # 默认情况下,这个调用会从路径`$HOME/.opennsfw2/weights/open_nsfw_weights.h5` # 搜索预训练权重文件。如果不存在,该文件将从此存储库下载。 # 模型是一个`keras_core.Model`对象。 model = n2.make_open_nsfw_model() # 进行预测。 inputs = np.expand_dims(image, axis=0) # 添加批次轴(针对单个图像)。 predictions = model.predict(inputs) # 预测结果的形状是(num_images, 2)。 # 每一行给出了一个输入图像的[安全概率,NSFW概率],例如: sfw_probability, nsfw_probability = predictions[0]

API

preprocess_image

对输入图像应用必要的预处理。

  • 参数:
    • pil_image (PIL.Image.Image): 以Pillow图像形式输入。
    • preprocessing (Preprocessing枚举, 默认Preprocessing.YAHOO): 请参见预处理详细信息
  • 返回:
    • 形状为(224, 224, 3)的NumPy数组。

Preprocessing

预处理选项的枚举类。

  • Preprocessing.YAHOO
  • Preprocessing.SIMPLE

make_open_nsfw_model

创建NSFW模型的一个实例,可选地加载来自雅虎的预训练权重。

  • 参数:
    • input_shape (Tuple[int, int, int], 默认(224, 224, 3)): 模型的输入形状,这不应该被改变。
    • weights_path (Optional[str], 默认$HOME/.opennsfw/weights/open_nsfw_weights.h5): 以HDF5格式存储的权重文件路径,模型将从中加载权重。 如果文件不存在,它将被下载。 如果为None,则不会下载或加载权重。 用户可以提供自定义路径,而不使用默认路径。 也可以使用环境变量OPENNSFW2_HOME来指示.opennsfw2/目录的位置。
    • name (str, 默认opennsfw2): 用于Keras模型对象的模型名称。
  • 返回:
    • tf.keras.Model对象。

predict_image

从输入图像到预测NSFW概率的端到端管道函数。

  • 参数:
    • image_handle (Union[str, PIL.Image.Image]): Pillow支持的输入图像文件路径,或PIL.Image.Image对象。
    • preprocessing: 与preprocess_image中的相同。
    • weights_path: 与make_open_nsfw_model中的相同。
    • grad_cam_path (Optional[str], 默认None): 如果不是None,例如cam.jpg, 将保存一个Gradient-weighted Class Activation Mapping (Grad-CAM) 叠加图,突出显示导致预测的(预处理后的)输入图像的重要区域。 请注意,该功能目前仅支持TensorFlow后端。
    • alpha (float, 默认0.8): Grad-CAM层在图像上的不透明度, 仅在grad_cam_path不为None时有效。
  • 返回:
    • nsfw_probability (float): 图像的预测NSFW概率。 这是一个从英文到中文的翻译,请提供该源文本的中文翻译。 不要提供任何解释或文本,除了翻译本身。 注意:翻译需要符合中文语序、流程和通顺。 需要翻译的源文本被包裹在XML标签中,如下:

predict_images

从输入图像到预测NSFW概率的端到端管道函数。

  • 参数:
    • image_handles (Union[Sequence[str], Sequence[PIL.Image.Image]]): 支持Pillow格式的输入图像文件路径列表, 或PIL.Image.Image对象列表。
    • batch_size (int, 默认8): 模型推理使用的批量大小。 选择一个最合适你设备资源的值。
    • preprocessing: 与preprocess_image中的一致。
    • weights_path: 与make_open_nsfw_model中的一致。
    • grad_cam_paths (Optional[Sequence[str]], 默认None): 如果不为None, 相应的输入图像的Grad-CAM图将被保存。 参见predict_image中的描述。 注意,此功能目前仅支持TensorFlow后端。
    • alpha: 与predict_image中的一致。
  • 返回:
    • nsfw_probabilities (List[float]): 图像的预测NSFW概率。

Aggregation

视频帧预测聚合选项的枚举类。

  • Aggregation.MEAN
  • Aggregation.MEDIAN
  • Aggregation.MAX
  • Aggregation.MIN

predict_video_frames

从输入视频到预测的端到端管道函数。

  • 参数:
    • video_path (str): 输入视频源的路径。 视频格式必须被OpenCV支持。
    • frame_interval (int, 默认8): 预测将在每隔这么多帧进行,从第1帧开始, 即如果这个值是8,那么预测将只在第1、9、17帧等进行。
    • aggregation_size (int, 默认8): 需要聚合预测NSFW概率的帧数。 例如,如果一个预测将在第9帧进行(由frame_interval决定), 那实际上是在从第9帧开始的aggregation_size个帧上进行预测, 例如如果大小是8,则是从第9帧到第16帧。 预测概率将被聚合。聚合后,该间隔内的每个帧都将被假定为相同的聚合概率。
    • aggregation (Aggregation 枚举, 默认Aggregation.MEAN): 聚合方法。
    • batch_size (int, 默认8, 上限为aggregation_size): 模型推理使用的批量大小。选择一个最合适你设备资源的值。
    • output_video_path (Optional[str], 默认None): 如果不为None,例如out.mp4, 将通过OpenCV保存一个与输入视频具有相同帧大小和帧率的输出MP4视频。 每帧的预测NSFW概率将打印在左上角。 请注意,输出文件大小可能远大于输入文件大小。 此输出视频仅供参考。
    • preprocessing: 与preprocess_image中的一致。
    • weights_path: 与make_open_nsfw_model中的一致。
    • progress_bar (bool, 默认True): 是否显示进度条。
  • 返回:
    • 两个List[float]组成的元组,长度等于视频帧数。
      • elapsed_seconds: 每帧的视频经过时间,单位为秒。
      • nsfw_probabilities: 每帧的NSFW概率。 对于任何frame_interval > 1, 未预测的帧将被假定为前一个预测帧的NSFW概率。

预处理细节

该实现提供以下预处理选项。

  • YAHOO: 默认选项,与原始Yahoo's Caffe 和后来的TensorFlow 1 实现相同。主要步骤为:
    • 将输入Pillow图像调整为(256, 256)
    • 将图像以JPEG格式存储在内存中,然后重新加载为NumPy图像 (这一步很神奇,但确实会产生影响)。
    • 裁剪NumPy图像的中心部分,大小为(224, 224)
    • 将颜色通道调整为BGR。
    • 减去训练数据集每个通道的平均值:[104, 117, 123]
  • SIMPLE: 也提供了一个更简单、更直观的预处理选项, 但请注意,模型输出概率会有所不同。 主要步骤为:
    • 将输入Pillow图像调整为(224, 224)
    • 转换为NumPy图像。
    • 将颜色通道调整为BGR。
    • 减去训练数据集每个通道的平均值:[104, 117, 123]

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多