Skip to main content

A lightweight Python library for NSFW content detection using ONNX models

Project description

nsfwpy

English | 简体中文

nsfwpy

一个轻量级Python库,使用深度学习模型进行图像内容分析,可以识别图像是否包含不适宜内容。支持常见图片格式以及GIF,支持常见视频格式。

特性

  • 轻量级实现,依赖少,易于部署
  • 支持多种图像格式输入(几乎所有常见格式)
  • 支持GIF、视频输入
  • 提供命令行工具、Python API和HTTP API接口
  • 支持Windows和其他操作系统
  • 自动下载和缓存模型文件
  • 提供预编译版本
  • 支持硬件加速(CUDA、TensorRT、DirectML、CoreML、OpenVINO)
  • 智能检测中国境内用户并自动使用镜像加速下载

安装

  • 通过pip安装

    pip install nsfwpy
    
  • 从源码安装

    git clone https://github.com/HG-ha/nsfwpy.git
    cd nsfwpy
    pip install -e .
    
  • Docker(默认使用模型:model.onnx)

    • docker run -p 8000:8000 yiminger/nsfwpy
    • 使用指定模型启动
      • d 默认模型
        docker run -e NSFWPY_ONNX_MODEL=/home/appuser/.cache/nsfwpy/model.onnx -p 8000:8000 yiminger/nsfwpy
        
      • m2 模型(NSFWJS mobilenet_v2)
        docker run -e NSFWPY_ONNX_MODEL=/home/appuser/.cache/nsfwpy/m2model.onnx -p 8000:8000 yiminger/nsfwpy
        
      • i3 模型(NSFWJS inception_v3),速度比其他模型慢一倍
        docker run -e NSFWPY_ONNX_MODEL=/home/appuser/.cache/nsfwpy/i3model.onnx -p 8000:8000 yiminger/nsfwpy
        
  • 使用预编译版本(开箱即用)

    • 请前往 Release 下载对应平台的预编译版本。
    • windows:在cmd中输入 nsfwpy.exe
    • linux:chmod +x nsfwpy && ./nsfwpy
  • Termux

    pkg install -y build-essential cmake ninja patchelf python3 git python-pip python-onnxruntime python-pillow rust
    git clone https://github.com/HG-ha/nsfwpy.git && cd nsfwpy
    pip install -e .
    nsfwpy --help
    

编译其他平台版本

  • 参考 build.bat | build.sh

使用方法

硬件加速支持

nsfwpy 支持多种硬件加速选项以提升推理性能:

from nsfwpy import NSFW

# 自动选择最佳可用设备(推荐)
detector = NSFW(device='auto')

# 使用特定设备
detector_cuda = NSFW(device='cuda')      # NVIDIA GPU (CUDA)
detector_tensorrt = NSFW(device='tensorrt')  # NVIDIA GPU (TensorRT)
detector_dml = NSFW(device='dml')        # Windows DirectML
detector_coreml = NSFW(device='coreml')  # Apple CoreML (macOS/iOS)
detector_openvino = NSFW(device='openvino')  # Intel OpenVINO
detector_cpu = NSFW(device='cpu')        # CPU only

支持的加速后端:

  • auto: 自动选择最佳设备(默认)
  • cuda: NVIDIA CUDA
  • tensorrt: NVIDIA TensorRT
  • dml: DirectML (Windows)
  • coreml: Apple CoreML (macOS/iOS)
  • openvino: Intel OpenVINO
  • cpu: CPU(无加速)

环境变量配置

# 模型路径配置
NSFWPY_ONNX_MODEL=/path/to/model.onnx  # 自定义模型路径
NSFW_ONNX_MODEL=/path/to/model.onnx    # 备用环境变量

# 中国境内镜像加速(自动检测,也可手动配置)
NSFWPY_USE_CHINA_MIRROR=1              # 强制使用国内镜像(1/true/yes)
NSFWPY_GITHUB_MIRROR=https://ghproxy.cn  # 自定义镜像地址

Python API

from nsfwpy import NSFW

# 初始化检测器(首次运行会自动下载模型)
detector = NSFW()

# 预测单个图像
result = detector.predict_image("path/to/image.jpg")
print(result)

    # 预测PIL图像
    from PIL import Image
    img = Image.open("path/to/image.jpg")
    result = detector.predict_pil_image(img)
    print(result)

    # 批量预测目录中的图像
    results = detector.predict_batch("path/to/image/directory")
    print(results)

    # 预测视频文件
    result = detector.predict_video(
        "path/to/video.mp4",
        sample_rate=0.1,  # 采样率,表示每10帧取1帧
        max_frames=100    # 最大处理帧数
    )
    print(result)
    ```

- 命令行工具

    ```bash
    # 基本用法
    nsfwpy --input path/to/image.jpg

    # 指定自定义模型路径
    nsfwpy --model path/to/model.onnx --input path/to/image.jpg

    # 指定模型类型 (d: 默认模型, m2: mobilenet_v2, i3: inception_v3)
    nsfwpy --type m2 --input path/to/image.jpg

    # 启动Web API服务
    nsfwpy -w [--host 127.0.0.1] [--port 8080]
    ```

命令行参数说明
- `--input`: 要检测的图像或视频文件路径
- `--model`: 自定义模型文件路径指定此参数时将忽略--type
- `--type`: 模型类型选择可选值d(默认), m2, i3
- `-w, --web`: 启用Web API服务
- `--host`: API服务器主机名默认0.0.0.0
- `--port`: API服务器端口默认8000
- `-s, --sample-rate`: 视频采样率范围0-1默认0.1
- `-f, --max-frames`: 视频最大处理帧数默认100

### Web API服务(完全兼容 nsfwjs-api)

- 启动API服务器

    ```bash
    # 基本用法
    nsfwpy -w

    # 指定主机和端口
    nsfwpy -w --host 127.0.0.1 --port 8080

    # 指定自定义模型
    nsfwpy -w --model path/to/model.onnx
    ```

- API端点
    - `POST /classify`: 分析单张图片支持图片和GIF
    - `POST /classify-many`: 批量分析多张图片
    - `POST /classify-video`: 分析视频文件

- API文档
    - [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)

- 请求
    - /classify
        ```
        curl --location --request POST 'http://127.0.0.1:8000/classify' \
        --form 'image=@"image.jpeg"'
        ```
    - /classify-many
        ```
        curl --location --request POST 'http://127.0.0.1:8000/classify-many' \
        --form 'images=@"image.jpeg"' \
        --form 'images=@"image2.jpeg"'
        ```
    - /classify-video
        ```
        curl --location --request POST 'http://127.0.0.1:8000/classify-video' \
        --form 'video=@"video.mp4"' \
        --form 'sample_rate=0.1' \
        --form 'max_frames=100'
        ```

### 预测结果格式

返回包含以下类别概率值的字典
```python
{
    "drawing": 0.1,    # 绘画/动画
    "hentai": 0.0,     # 动漫色情内容(変態)
    "neutral": 0.8,    # 中性/安全内容
    "porn": 0.0,       # 色情内容
    "sexy": 0.1        # 性感内容
}

致谢

本项目的模型基于 nsfw_model 以及 nsfwjs。感谢原作者的贡献。

推荐资源

  1. 天狼星框架:https://www.siriusbot.cn/
  2. 镜芯API:https://api2.wer.plus/
  3. 林枫云_站长首选云服务器:https://www.dkdun.cn/
  4. ICP备案查询:https://icp.show/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nsfwpy-0.1.4.4.tar.gz (16.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nsfwpy-0.1.4.4-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file nsfwpy-0.1.4.4.tar.gz.

File metadata

  • Download URL: nsfwpy-0.1.4.4.tar.gz
  • Upload date:
  • Size: 16.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for nsfwpy-0.1.4.4.tar.gz
Algorithm Hash digest
SHA256 265335eba3a791e150be500eb30abcd95411a745b78218feafd1cd4c4de88d25
MD5 b2cfb3ee0262dc201e89a2748d343fc2
BLAKE2b-256 473fd92b90c9de1ae845f38d075ca5c95b5d9c603ce06fa34a808559bf795f6e

See more details on using hashes here.

File details

Details for the file nsfwpy-0.1.4.4-py3-none-any.whl.

File metadata

  • Download URL: nsfwpy-0.1.4.4-py3-none-any.whl
  • Upload date:
  • Size: 16.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for nsfwpy-0.1.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 381e8e9d994ddec97cf72b41f0ef29ea7061cd9b8e6fdafac8f4b5780952dc65
MD5 465288a422a04696147fb4dc6f31b9e2
BLAKE2b-256 5d87c2226bacecda6b922f072f18ccc0da6849f9cb075a0ffefaff1f08184f59

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page