Screph: визуальная среда разработки программ компьютерного зрения

Настроить обработку на изображении, увидеть результат каждого шага и перенести эту работу в программу с возможностью вернуться из кода к изображению.

English version on Reddit

Я разрабатываю настольную среду Screph для создания программ компьютерного зрения. Она помогает решить постоянно возникающую задачу: перейти от удачного эксперимента к программе, которую можно развивать и поддерживать. Выбор областей интереса, настройка параметров и проверка промежуточных результатов требуют работы с исходными изображениями. При этом изображения, настройки обработки, скрипты и пояснения часто хранятся раздельно, и связь между ними приходится поддерживать вручную.

Screph объединяет эту работу в одном проекте. OpenCV служит одним из её ключевых базовых компонентов: поверх выбранных методов библиотеки Screph предоставляет визуальные средства настройки и объединения операций в схемы обработки. В среду также интегрированы OCR на основе Tesseract, модели компьютерного зрения и запросы к языковым и визуально-языковым моделям. В той же рабочей области, на одном изображении можно размечать области для обучающего датасета и настраивать классические алгоритмы обработки и связи между ними без переключения в отдельный редактор. Разметка, графы обработки и встроенная кодовая среда связывают эти инструменты с контекстом изображения. Поддерживаемую обработку можно настроить и проверить, не изучая предварительно Python. Разработчик при этом может посмотреть полученный код и дополнить его собственной прикладной логикой.

Дальнейшая цель проекта состоит в развитии агентной среды разработки, специализированной на компьютерном зрении. Ниже расскажу, как это устроено в текущей версии разработки и какие границы важно учитывать при переносе результата в свою программу.

Ознакомительный фильм: «Screph: от изображения к работающей программе: компьютерное зрение» · 10:37. В нём показан путь от обработки изображений деталей до программы пакетного подсчёта, а затем показана подготовка разметки для обучения.

Начать с изображения и смысла задачи

На Canvas можно отметить объект, задать область интереса, выделить характерный признак и добавить связи между размеченными объектами. Для разных задач доступны прямоугольники, эллипсы, полигоны и свободное выделение. Текстовые и голосовые описания сохраняют рядом с изображением то, что должна делать будущая программа.

Такой контекст полезен и человеку, и агенту. Задача «найти круглые втулки в этой области, исключив прямоугольные пластины» становится точнее, когда область и примеры видны. Разметка и её настройки обработки остаются в проекте: к ним можно вернуться, когда изменятся камера, освещение или сама задача.

Можно использовать файлы изображений, кадры видео, потоки с камер и другие поддерживаемые источники изображений. Обработку можно настраивать для выбранного участка, не собирая заново отдельный скрипт подготовки полного кадра для каждого эксперимента.

Визуальная настройка выбранных методов OpenCV

В панели обработки доступны, например, преобразование в оттенки серого, коррекция яркости и гаммы, фильтры Gaussian и Median, CLAHE, пороговая обработка, цветовые маски HSV, морфология, границы Canny, поиск контуров и сегментация GrabCut. Поиск по шаблону и сопоставление признаков дают другие подходы, когда одного цвета или формы недостаточно. Это интерфейс к поддерживаемому набору операций, а не обещание охватить весь API OpenCV.

Пользователь выбирает операцию, меняет параметры, запускает расчёт и сравнивает результат с исходником. По маске видно, попала ли тень в передний план и не исчезла ли небольшая деталь. Раздельные представления Canvas позволяют видеть исходное изображение и результат рядом, а галерея результатов позволяет рассматривать промежуточные изображения и доступные измерения.

Выбранная втулка и её маска GrabCut в панели обработки. Настоящий кадр приложения из английского обзора; исходное изображение деталей синтетическое.

Иллюстрация 1. Выбранная втулка и её маска GrabCut в панели обработки. Настоящий кадр приложения из английского обзора; исходное изображение деталей синтетическое.

Например, поиск контуров может сначала выделить и круглые втулки, и прямоугольные пластины. Просмотр геометрии подсказывает конкретный следующий шаг: попробовать фильтр по площади или круглости и проверить новый результат. Вместо одного необъяснимого ответа «получилось или нет» появляется понятный способ уточнить решение.

Последовательность Median Blur → Contours: рассчитанные контуры с номерами и измерениями площади, периметра и круглости. На синтетическом учебном изображении найдено восемь контуров. Английский интерфейс.

Иллюстрация 2. Последовательность Median Blur → Contours: рассчитанные контуры с номерами и измерениями площади, периметра и круглости. На синтетическом учебном изображении найдено восемь контуров. Английский интерфейс.

OpenCV, Tesseract и модели в одной среде

Для разных задач нужны разные инструменты. В Screph предусмотрено несколько видов интеграции:

  • Tesseract OCR для чтения текста: выбор языка распознавания, подготовка изображения, просмотр распознанного текста и его рамок.
  • Обнаружение и сегментация на основе YOLO, а также сегментация по подсказкам с такими интеграциями, как MobileSAM и EfficientSAM, при наличии необходимых весов и компонентов среды.
  • Подключения LLM/VLM для работы агента, подбора обработки и пользовательских операций «Запрос к ИИ». Для передачи изображения нужна модель, которая умеет его обрабатывать.
  • Пользовательские операции Python для дополнительных алгоритмов и связующей логики с объявленными входами и выходами, которые можно включать в граф.

Так можно разрабатывать процессы, в которых классическая подготовка изображения сочетается с OCR или результатами моделей. Типы данных по-прежнему важны: например, структурированный результат OCR нужно явно преобразовать, если следующая операция принимает обычный текст. Веса моделей, языковые данные OCR и необходимые зависимости должны быть доступны; наличие названия в каталоге ещё не означает готовность модели на любой установке.

У языковой модели при этом две разные роли: помогать человеку настраивать обработку или писать программу, а также непосредственно выполнять отдельный шаг обработки. В первом случае повторный запуск сохранённой классической схемы не требует снова обращаться к модели. Операция «Запрос к ИИ» выполняет собственный настроенный модельный запрос.

Последовательности и графы вместо отдельных фильтров

Одна операция служит началом схемы обработки. Шаги можно объединить в последовательность, например Median Blur → Canny → контуры, либо перейти к графу, когда обработка ветвится или требует нескольких входов и выходов. Связи описывают, какие данные получает и возвращает каждый шаг. Изображение, бинарная маска, набор контуров и числовой результат представляют разные виды данных, которые не следует считать взаимозаменяемыми картинками.

Например, одна ветвь может выделять материал по цвету, а другая может искать границы на том же изображении. Их результаты можно проверить отдельно, прежде чем решать, как использовать их в задаче. Повторное использование фрагментов схемы сокращает одинаковую настройку. При этом граф операций обработки и граф размеченных объектов и связей на Canvas представляют разные сущности.

Рабочая область «Варианты» позволяет сравнивать разные настройки на фиксированном наборе изображений, сохранять базовый вариант и смотреть, что изменяется при исключении шага. Проверка на кадрах применяет одну конфигурацию к нескольким примерам. Это помогает ответить на вопрос «работает ли подход при другом освещении?», а не только подобрать красивый результат для одного изображения. Карта различий и меньшее время исполнения сами по себе ещё не означают более точное распознавание.

Агент работает с визуальным контекстом

Агенту можно поручить предложить области, выбрать операцию, подобрать параметры или собрать последовательность, используя выбранное изображение и доступные инструменты. Предложение остаётся проверяемым: можно посмотреть рамки, маску, контуры и настройки, а затем поправить их обычными средствами интерфейса. Это позволяет человеку, который понимает свою задачу, начать работу без знания названий всех алгоритмов.

Для специальных задач предусмотрены пользовательские операции Python с объявленными входами и поддерживаемыми типами результатов. Агент может помочь написать такую операцию, а разработчик может отредактировать её самостоятельно. Есть и операции запросов к ИИ, но это другой способ обработки, чем исполнение сохранённой схемы OpenCV. Обычная классическая обработка выполняется локально и не требует обращения к языковой модели на каждом кадре. Работа агента зависит от настроенного подключения к модели и условий доступа или оплаты её сервиса.

Рабочая область изображений связана с кодовой областью

Screph Code содержит редактор, файлы проекта, беседу с агентом, управление запуском и просмотр вывода. Кодовый агент получает выбранные материалы проекта: изображения, разметку, описания и сведения об обработке. На их основе он может создать прикладную логику вокруг уже проверенного решения.

Связь работает и в направлении возврата к визуальной задаче. Вкладка «Объекты» и поддерживаемые ссылки из кода соединяют участки программы с объектами Canvas или сохранёнными настройками обработки. Можно перейти по ссылке Canvas, открыть нужную область, поправить рамку, параметры или граф обработки, пересчитать результат и сформировать обновлённый поддерживаемый экспорт кода из сохранённого результата. Изменения связей между объектами также остаются в контексте проекта.

Именно этот цикл Screph должен сделать удобнее: изображение → обработка → проверенный результат → код → возврат к изображению. Сейчас автоматические связи охватывают сгенерированный код и поддерживаемые конструкции Python; для других случаев доступны ручные привязки. Это не универсальный обратный компилятор, способный восстановить граф из произвольно изменённого Python. Правки существующего кода также нужно сохранять и учитывать при обновлении обработки.

Screph Code объединяет файлы проекта, редактор, вывод и переписку с агентом. Открыта записанная программа пакетной обработки из демонстрации подсчёта деталей. Интерфейс английский; комментарии исходной программы на русском.

Иллюстрация 3. Screph Code объединяет файлы проекта, редактор, вывод и переписку с агентом. Открыта записанная программа пакетной обработки из демонстрации подсчёта деталей. Интерфейс английский; комментарии исходной программы на русском.

Перенести в программу именно проверенную обработку

Здесь есть две разные задачи. Агент может написать окружающую программу: обход каталога, работу с входами, формирование отчёта или интеграцию с другой системой. Экспорт поддерживаемой обработки устроен прямее: Screph собирает численные функции и настроенную композицию их вызовов в исходный код Python. Языковой модели не требуется заново интерпретировать алгоритм, чтобы получить такой экспорт.

Сейчас самостоятельный экспорт поддерживает определённый набор классических операций CPU: оттенки серого и коррекцию тона, Gaussian и Median Blur, CLAHE, адаптивный порог, маску HSV, Canny, контуры и отдельные операции масок и морфологии. Статические последовательности и поддерживаемые графы с ветвлениями могут возвращать изображения, маски и контуры. Полученные численные модули используют NumPy и OpenCV без необходимости запускать интерфейс Screph.

Возможности панели шире возможностей этого экспортёра. Нейросетевые модели, OCR, обработка последовательностей с состоянием и другие неподдерживаемые операции не становятся автономными автоматически после нажатия «Экспорт»: им нужна соответствующая среда или дополнительная интеграция. Неподдерживаемые узлы отмечаются явно и не исчезают из схемы молча.

Отдельная проверка эквивалентности позволяет сравнить сгенерированный код или сохранённую рабочую копию с результатом обработки на зафиксированных входах. Проверка относится к конкретным файлам, входам и численной среде. Это полезный способ обнаружить регрессию, но не доказательство правильного распознавания любого будущего изображения.

Что показано в демонстрациях

Подсчёт деталей. В ознакомительном фильме используются фотореалистичные синтетические изображения втулок и пластин. Показаны выбор области, рассмотрение маски сегментации, поиск лишних объектов в результате выделения контуров, совет агента о круглости и сохранение проверенных настроек. Затем программа применяет сохранённую обработку и создаёт таблицу и лист изображений с результатами 6, 6 и 5. Конкретно эта программа использует среду исполнения сохранённого проекта Screph; самостоятельный экспорт численных функций представляет собой отдельный путь, описанный выше. Это показанный учебный пример, а не универсальный промышленный тест точности.

Лист результатов программы: одна сохранённая обработка даёт 6, 6 и 5 объектов на трёх синтетических учебных изображениях. Лист открыт на Canvas для проверки.

Иллюстрация 4. Лист результатов программы: одна сохранённая обработка даёт 6, 6 и 5 объектов на трёх синтетических учебных изображениях. Лист открыт на Canvas для проверки.

Узел зрения ROS 2. В ролике «Screph и ROS 2: от обработки изображения до готового узла» (9:30, русская речь) показаны настройка контуров, ручное уточнение предложения агента, галерея шагов, генерация пакета и его запуск в отдельно установленной ROS. Контуры получает другая программа, которая определяет центр и ориентацию пластин. Это координаты изображения; для движения реального робота нужны калибровка и управляющая логика. Дополнительный эпизод захвата детали выполнен в симуляции.

Привязка траекторий ЧПУ по камере. В демонстрации CNC Runtime (6:25) отдельно настраивается обработка заготовок, креплений и исключённых областей. CNC Runtime преобразует готовые траектории под несколько повёрнутых заготовок, показывает результат и позволяет оператору применить или отклонить его. В фильме используются синтетическая сцена и внутренняя эмуляция обработки; работа на физическом станке и проверенное прямое подключение к LinuxCNC или Mach3 в нём не демонстрируются. Тёмный сучок служит примером исключённой области именно для этой настройки по цвету, а не обещание распознавать все дефекты материала.

Внутреннее воспроизведение обработки пяти повёрнутых заготовок. Красным показаны отступы от креплений, фиолетовым показаны исключённые области. Сцена стола синтетическая, обработка показана в эмуляции.

Иллюстрация 5. Внутреннее воспроизведение обработки пяти повёрнутых заготовок. Красным показаны отступы от креплений, фиолетовым показаны исключённые области. Сцена стола синтетическая, обработка показана в эмуляции.

В ознакомительном и ROS-фильмах прямо указано, что ответы агента записаны заранее. Действия приложения и соответствующие расчёты или исполнение программы для демонстрации выполняются заново. Ролики показывают конкретные процессы, а не все возможности, перечисленные в этой статье.

Возможности за пределами классических операций

Помимо перечисленных интеграций обработки, в среде есть работа с последовательностями кадров и временными методами, подготовка датасетов и обучение моделей. Можно размечать и исправлять примеры, разделять данные для обучения и оценки, запускать поддерживаемые конфигурации обучения, просматривать результаты и выбирать модель для дальнейшего использования. У моделей есть собственные требования к среде исполнения и передаче в конечную программу.

В ознакомительном фильме показаны разметка с помощью агента, ручная корректировка рамки, добавление примера в датасет и открытие настроек обучения. Само обучение в фильме не запускается. Подготовленный пример подтверждает работу с разметкой, но ничего ещё не говорит о качестве будущей модели.

У Screph также есть инструменты автоматизации графических интерфейсов и Automation Runtime. Общая идея состоит в том, чтобы повторно использовать визуальное описание задачи в исполняемой программе. Однако для пользователя OpenCV проще начать с небольшой задачи обработки изображений, результат которой легко проверить.

С чего начать

Screph сейчас предлагается как бесплатная Alpha-программа. На странице загрузки доступны Windows-сборка и экспериментальная Linux-сборка с актуальными требованиями. Бесплатность приложения не включает платные сервисы сторонних моделей. Её также не следует путать с полным открытием исходников: публичный репозиторий Community пока представляет собой ограниченный предварительный срез исходного кода.

Визуальная обработка и инструменты работы с кодом реализованы; агентные процессы и специализированные режимы Industrial/UAV продолжают развиваться. Часть описанных возможностей относится к версии разработки и требует соответствующей сборки и дополнительных компонентов. Проект развивается с целью сделать работу от изображения до программы более связной, а не обещать автоматическое решение произвольной задачи компьютерного зрения.

Для первого знакомства я предложил бы взять несколько характерных изображений, определить область и ожидаемый результат, настроить одну последовательность, посмотреть, где она ошибается, и только затем переносить её в программу. На сайте проекта есть ссылки на документацию и текущий статус, а на YouTube-канале размещены перечисленные демонстрации.

Если вы работаете с OpenCV, какая часть этого цикла отнимает у вас больше всего времени: подбор параметров, сравнение промежуточных результатов, связь областей изображения с кодом или встраивание готовой обработки в приложение? Что сделало бы такой подход полезным в вашем процессе разработки программ компьютерного зрения?

Комментарии