import gradio as gr import numpy as np from PIL import Image def get_pixel_value(img: np.ndarray, evt: gr.SelectData): """ Получает значение яркости пикселя по координатам клика. """ if img is None: return "Сначала загрузите карту глубины." # evt.index содержит кортеж (x, y) координат клика x, y = evt.index # img - это массив NumPy. Получаем значение пикселя. # Для черно-белого изображения значение R, G и B будут одинаковыми, # поэтому можно взять любое из них (например, img[y, x, 0]). # Если изображение уже в градациях серого, у него может не быть 3-го измерения. if img.ndim == 3: pixel_value = img[y, x, 0] # Берем R-канал else: pixel_value = img[y, x] # Для одноканального серого изображения return f"Координаты (X, Y): ({x}, {y})\nЗначение глубины (яркость 0-255): {pixel_value}" # --- Создание интерфейса Gradio --- with gr.Blocks(title="Измеритель Карты Глубины") as demo: gr.Markdown("# Интерактивный измеритель карты глубины") gr.Markdown( "Загрузите вашу черно-белую карту глубины. " "Кликните в любой точке на изображении, чтобы узнать значение яркости (условную глубину)." ) with gr.Row(): with gr.Column(): # Компонент для загрузки изображения input_image = gr.Image(type="numpy", label="Загрузите вашу карту глубины") with gr.Column(): # Текстовое поле для вывода результата output_text = gr.Textbox(label="Результат измерения", interactive=False) # Привязка события клика на изображении к функции # `.select()` - это событие клика/выделения input_image.select(get_pixel_value, [input_image], output_text) # Запуск приложения if __name__ == "__main__": demo.launch()