3 unstable releases
0.2.0 | Aug 1, 2024 |
---|---|
0.1.1 | Nov 6, 2023 |
0.1.0 | Nov 5, 2023 |
#252 in Images
130KB
227 lines
NSFW?
nsfw
is a library for determining the not-safe-for-work-ness of images.
It is based off of GantMan's model.
Prerequisites
Because Cargo has a size limit of 10mb, the pre-trained model cannot be included in the crate. You will need to download it from the release page or download the model yourself and convert it into ONNX
Downloading from the release page (easy)
$ gh release download -R Fyko/nsfw --pattern "model.onnx"
# or naviate to the release page and download it manually
Convering from GantMan's model
See our GitHub Workflow
Example: Static Images
[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(())
}
Example: 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(())
}
Feature Flags
default
-jpeg
andpng
serde
- Enables serialization and deserialization of the model usingserde
.gif
- Enables GIF support forimage
.jpeg
- Enables JPEG support forimage
.png
- Enables PNG support forimage
.webp
- Enables WEBP support forimage
.
Benchmarking
Name | Size | Language | Time |
---|---|---|---|
test_porn.gif | 50495726 bytes (50.49 MB) |
Rust | 22.719 seconds |
test_porn.gif | 50495726 bytes (50.49 MB) |
JavaScript | 219.96 seconds |
Dependencies
~20–32MB
~544K SLoC