Spaces:
Runtime error
Runtime error
| 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() |