Spaces:
Sleeping
Sleeping
| import os | |
| import sys | |
| import tensorflow as tf | |
| import numpy as np | |
| from tensorflow.keras import layers, models | |
| import requests | |
| from PIL import Image | |
| from io import BytesIO | |
| import gradio as gr | |
| #Класс для нейросети | |
| class FoodQualityAI: | |
| def __init__(self): | |
| self.model = None | |
| self.image_size = (256, 256) | |
| self.train_dir = "./classes" | |
| def test(self, image_url): | |
| if self.model is None: | |
| raise Exception("Модель не загрузилась.") | |
| try: | |
| response = requests.get(image_url) | |
| response.raise_for_status() | |
| except Exception as ex: | |
| raise Exception("Ошибка при скачивании изображения: " + str(ex)) | |
| try: | |
| img = Image.open(BytesIO(response.content)).convert("RGB") | |
| except Exception as e: | |
| raise Exception("Ошибка при обработке изображения: " + str(e)) | |
| img = img.resize(self.image_size) | |
| img_array = np.array(img) / 255.0 | |
| img_array = np.expand_dims(img_array, axis=0) | |
| prediction = self.model.predict(img_array) | |
| file_names = [f for f in os.listdir(self.train_dir) | |
| if os.path.isfile(os.path.join(self.train_dir, f))] | |
| class_names = list(set([os.path.splitext(f)[0].split('_')[0] for f in file_names])) | |
| predicted_class = class_names[np.argmax(prediction)] | |
| confidence = float(np.max(prediction)) | |
| return predicted_class, confidence | |
| #загрузка модели | |
| def load(self, filename='food_quality_model.h5'): | |
| try: | |
| self.model = models.load_model(filename) | |
| except Exception as e: | |
| raise Exception(f"Не удалсь загрузить модель ИИ {filename}: {str(e)}") | |
| food_quality_ai = FoodQualityAI() | |
| try: | |
| food_quality_ai.load('food_quality_model.h5') | |
| print("Model loaded successfully.") | |
| except Exception as e: | |
| print("Error loading model:", e) | |
| sys.exit(1) | |
| # Основная функция | |
| def classify_image_url(image_url): | |
| try: | |
| predicted_class, confidence = food_quality_ai.test(image_url) | |
| return f"Модель думает что это: {predicted_class}\nС вероятностю в: {confidence:.2f}" | |
| except Exception as err: | |
| return f"Ошибка: {err}" | |
| #Запуск интерфейса gradio | |
| interface = gr.Interface( | |
| fn=classify_image_url, | |
| inputs=gr.Textbox(label="Ссылка на тестовую картинку", placeholder="Введите ссылку..."), | |
| outputs=gr.Textbox(label="Мнение модели"), | |
| title="ИИ для определения состояния еды.", | |
| description="Вставьте ссылку чтобы проверить как работает модель." | |
| ) | |
| if __name__ == "__main__": | |
| interface.launch() |