3个不稳定版本
0.2.0 | 2024年8月1日 |
---|---|
0.1.1 | 2023年11月6日 |
0.1.0 | 2023年11月5日 |
#178 in 图像
每月下载 182次
130KB
227 行
NSFW?
nsfw
是一个用于确定图像是否不适合工作环境的库。它基于 GantMan的模型。
先决条件
由于Cargo的大小限制为10MB,预训练模型不能包含在crate中。您需要从 发布页面 下载它,或者自己下载模型并将其转换为 ONNX
从 发布页面 下载(简单)
$ gh release download -R Fyko/nsfw --pattern "model.onnx"
# or naviate to the release page and download it manually
从 GantMan的模型 转换
查看我们的 GitHub Workflow
示例:静态图像
[dependencies]
image = { version = "0.24.7", default-features = false, features = ["jpeg"] }
nsfw = { version = "0.1.0", default-features = false, features = ["jpeg"] }
use nsfw::{create_model, examine};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let model = create_model(
include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/model.onnx"))
);
let image = image::open(concat!(env!("CARGO_MANIFEST_DIR"), "/might_be_porn.jpg"))?;
let result = examine(&model, &image)?;
println!("{:#?}", result);
Ok(())
}
示例:GIF
[dependencies]
image = { version = "0.24.7", default-features = false, features = ["gif"] }
nsfw = { version = "0.1.0", default-features = false, features = ["gif"] }
use nsfw::{examine, MODEL, GifParser};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let model = create_model(
include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/model.onnx"))
);
let path = concat!(env!("CARGO_MANIFEST_DIR"), "/might_be_porn.gif");
let file = BufReader::new(File::open(gif_path)?);
let frames = GifParser::new(GifDecoder::new(file)?, &model);
for frame in frames {
println!("{frame:#?}")
}
Ok(())
}
功能标志
default
-jpeg
和png
serde
- 启用使用serde
进行模型的序列化和反序列化。gif
- 启用对image
的GIF支持。jpeg
- 启用对image
的JPEG支持。png
- 启用对image
的PNG支持。webp
- 启用对image
的WEBP支持。
基准测试
名称 | 大小 | 语言 | 时间 |
---|---|---|---|
test_porn.gif | 50495726 字节 (50.49 MB) |
Rust | 22.719 秒 |
test_porn.gif | 50495726 字节 (50.49 MB) |
JavaScript | 219.96 秒 |
依赖项
~19–31MB
~516K SLoC