A lightweight Python library for NSFW content detection using ONNX models
Project description
nsfwpy
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/nsfwpym2模型(NSFWJS mobilenet_v2)docker run -e NSFWPY_ONNX_MODEL=/home/appuser/.cache/nsfwpy/m2model.onnx -p 8000:8000 yiminger/nsfwpyi3模型(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 CUDAtensorrt: NVIDIA TensorRTdml: DirectML (Windows)coreml: Apple CoreML (macOS/iOS)openvino: Intel OpenVINOcpu: 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。感谢原作者的贡献。
推荐资源
- 天狼星框架:https://www.siriusbot.cn/
- 镜芯API:https://api2.wer.plus/
- 林枫云_站长首选云服务器:https://www.dkdun.cn/
- 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)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
nsfwpy-0.1.4.4-py3-none-any.whl
(16.0 kB
view details)
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
265335eba3a791e150be500eb30abcd95411a745b78218feafd1cd4c4de88d25
|
|
| MD5 |
b2cfb3ee0262dc201e89a2748d343fc2
|
|
| BLAKE2b-256 |
473fd92b90c9de1ae845f38d075ca5c95b5d9c603ce06fa34a808559bf795f6e
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
381e8e9d994ddec97cf72b41f0ef29ea7061cd9b8e6fdafac8f4b5780952dc65
|
|
| MD5 |
465288a422a04696147fb4dc6f31b9e2
|
|
| BLAKE2b-256 |
5d87c2226bacecda6b922f072f18ccc0da6849f9cb075a0ffefaff1f08184f59
|