
检测不适合工作(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)
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]
preprocess_image对输入图像应用必要的预处理。
pil_image (PIL.Image.Image): 以Pillow图像形式输入。preprocessing (Preprocessing枚举, 默认Preprocessing.YAHOO):
请参见预处理详细信息。(224, 224, 3)的NumPy数组。Preprocessing预处理选项的枚举类。
Preprocessing.YAHOOPreprocessing.SIMPLEmake_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.MEANAggregation.MEDIANAggregation.MAXAggregation.MINpredict_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
实现相同。主要步骤为:
(256, 256)。(224, 224)。[104, 117, 123]。SIMPLE: 也提供了一个更简单、更直观的预处理选项,
但请注意,模型输出概率会有所不同。
主要步骤为:
(224, 224)。[104, 117, 123]。

免费创建高清无水印Sora视频
Vora是一个免费创建高清无水印Sora视频的AI工具


最适合小白的AI自动化工作流平台
无需编码,轻松生成可复用、可变现的AI自动化工作流

大模型驱动的Excel数据处理工具
基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。


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


AI论文写作指导平台
AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

