mirror of
https://git.boykissers.com/pawkey/pawkey-sk.git
synced 2025-12-20 12:14:18 +00:00
* feat: auto nsfw detection * ✌️ * Update ja-JP.yml * Update ja-JP.yml * ポルノ判定のしきい値を高めに * エラーハンドリングちゃんとした * Update ja-JP.yml * 感度設定を強化 * refactor * feat: add video support for auto nsfw detection * rename: image -> media * .js * fix: add missing error handling * fix: use valid pathname instead of using filename due to invalid usage * perf(nsfw-detection): decode frames * disable detection of video for some reasons * perf(nsfw-detection): streamify detection process for video * disable disallowUploadWhenPredictedAsPorn option * fix(nsfw-detection): improve reliability * fix(nsfw-detection): use Math.ceil instead of Math.round * perf(nsfw-detection): delete tmp frames after used * fix(nsfw-detection): FSWatcher does not emit ready event * perf(nsfw-detection): skip black frames * refactor: strip exists check * Update package.json * めっちゃ変えた * lint * Update COPYING * オプションで動画解析できるように * Update yarn.lock * Update CHANGELOG.md Co-authored-by: Acid Chicken (硫酸鶏) <root@acid-chicken.com>
29 lines
803 B
TypeScript
29 lines
803 B
TypeScript
import * as fs from 'node:fs';
|
|
import { fileURLToPath } from 'node:url';
|
|
import { dirname } from 'node:path';
|
|
import * as nsfw from 'nsfwjs';
|
|
import * as tf from '@tensorflow/tfjs-node';
|
|
|
|
const _filename = fileURLToPath(import.meta.url);
|
|
const _dirname = dirname(_filename);
|
|
|
|
let model: nsfw.NSFWJS;
|
|
|
|
export async function detectSensitive(path: string): Promise<nsfw.predictionType[] | null> {
|
|
try {
|
|
if (model == null) model = await nsfw.load(`file://${_dirname}/../../nsfw-model/`, { size: 299 });
|
|
|
|
const buffer = await fs.promises.readFile(path);
|
|
const image = await tf.node.decodeImage(buffer, 3) as tf.Tensor3D;
|
|
try {
|
|
const predictions = await model.classify(image);
|
|
return predictions;
|
|
} finally {
|
|
image.dispose();
|
|
}
|
|
} catch (err) {
|
|
console.error(err);
|
|
return null;
|
|
}
|
|
}
|