wangzhibo
2025-07-30 203e571aba6b93b58801857df04e90a785ce365c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import threading
import numpy as np
from PIL import Image
from keras import Model
import opennsfw2
 
from .typing import Frame  # 你已有定义
 
MAX_PROBABILITY = 0.85
 
class NSFWPredictor:
    def __init__(self):
        self._predictor = opennsfw2.make_open_nsfw_model()
 
    def predict_frame(self, frame: Frame) -> bool:
        image = Image.fromarray(frame)
        image = opennsfw2.preprocess_image(image, opennsfw2.Preprocessing.YAHOO)
        views = np.expand_dims(image, axis=0)
        _, probability = self._predictor.predict(views)[0]
        return probability > MAX_PROBABILITY
 
    def predict_image(self, image_path: str) -> bool:
        probability = opennsfw2.predict_image(image_path)
        return probability > MAX_PROBABILITY
 
    def predict_video(self, video_path: str, frame_interval: int = 100) -> bool:
        _, probabilities = opennsfw2.predict_video_frames(video_path, frame_interval=frame_interval)
        return any(prob > MAX_PROBABILITY for prob in probabilities)