najicreator90856's picture
Update app.py
428ea8f verified
Raw
History Blame Contribute Delete
2.95 kB
import gradio as gr
import torch
from transformers import AutoImageProcessor, AutoModelForImageClassification
from PIL import Image
import torch.nn.functional as F
# 1. Загрузка модели
model_id = "najicreator90856/is-it-nsfw_ai-moderator"
print(f"Загрузка модели {model_id}...")
processor = AutoImageProcessor.from_pretrained(model_id)
model = AutoModelForImageClassification.from_pretrained(model_id)
model.eval()
def predict_nsfw(img):
if img is None:
return "Пожалуйста, загрузите изображение."
# Подготовка
inputs = processor(images=img, return_tensors="pt")
# Предсказание
with torch.no_grad():
logits = model(**inputs).logits
probs = F.softmax(logits, dim=-1)[0]
# Формируем словарь для компонента Label
# Он автоматически покажет полоски вероятности
results = {
"SFW": float(probs[0]),
"NSFW": float(probs[1])
}
return results
# 2. Создание интерфейса через Blocks
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# 🔞 Is It NSFW? AI Moderator")
gr.Markdown("Быстрая проверка контента на базе ResNet-18 (Точность 99.44%)")
with gr.Row():
# Левая колонка - Ввод
with gr.Column(scale=1):
input_img = gr.Image(
type="pil",
label="Перетащите фото сюда",
height=400
)
submit_btn = gr.Button("Проверить", variant="primary")
# Правая колонка - Результат
with gr.Column(scale=1):
output_label = gr.Label(
num_top_classes=2,
label="Результат анализа"
)
gr.Markdown("""
### О модели:
Данная нейросеть обучена различать NSFW и SFW контент.
- **SFW**: Безопасно для работы/просмотра.
- **NSFW**: Контент 18+ (Порнография, Хентай).
""")
# Ссылки на донаты
gr.Markdown("---")
with gr.Row():
gr.Markdown("""
### Поддержать автора:
[DonationAlerts](https://www.donationalerts.com/r/najicreator) |
**USDT TON:** `UQDcC3o7u4LS07pr-cQI-Gxx3hPjXKrRrNQdGBj0WV7SADe3`
""")
# Логика работы кнопки
submit_btn.click(
fn=predict_nsfw,
inputs=input_img,
outputs=output_label
)
if __name__ == "__main__":
# Убираем примеры (examples), чтобы не было ошибок с путями файлов
demo.launch()