#onnx #tensorflow #neural-network #tract

nsfw

使用神经网络检测NSFW图像的Rust库

3个不稳定版本

0.2.0 2024年8月1日
0.1.1 2023年11月6日
0.1.0 2023年11月5日

#178 in 图像

Download history 4/week @ 2024-05-18 31/week @ 2024-06-08 52/week @ 2024-06-15 19/week @ 2024-06-22 131/week @ 2024-07-27 26/week @ 2024-08-03 25/week @ 2024-08-10

每月下载 182次

MIT/Apache

130KB
227

NSFW?

crates.io Documentation Build Status Discord

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 - jpegpng
  • 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