Обнаружение посторонних объектов в режиме реального времени при помощи Specim FX17
В качестве объекта исследования рассматривались пищевые продукты с посторонними объектами. Продукт состоял из двух видов орехов: грецкий орех и фисташки. В качестве посторонних объектов использовались: ореховая скорлупа, оливковые косточки, древесная стружка, листья или камни.
Основная задача заключалась в удалении посторонних предметов с конвейерной ленты. В связи с этим требовалась не только идентификация продукта/загрязнения попиксельно, но и определение координат больших объектов для автоматической сортировки.
Для получения изображений соответствующий объектов исследования использовалась камера Specim FX17 (спектральный диапазон 900-1700 нм). Программное обеспечение Specim LUMO использовался для сохранения полученных результатов сканирования.
Рисунок 1 – Операция сбора данных для обучения системы
Процесс обучения системы состоял в следующем: загрузка результатов сканирования в графический интерфейс пользователя perClass Mira GUI, определение интересующих классов веществ и создание статистической модели классификации.
В нашем конкретном случае мы определили три класса, состоящие из фонового класса, отдельных продуктов и посторонних объектов (внешние классы). Важно понимать, что последние два класса являются сложными с точки зрения классификации, т.к. охватывают несколько типов материалов. Это стандартный подход, принятый в perClass Mira, потому что ПО разработано для решения многозадачных, многоклассовых задач. Для других решений промышленной гиперспектральной визуализации определение классов должно быть достаточно точным и нацелено на работу с определенным подтипом материала.
На рис. 2 приведен пример, на котором отмечены объекты в программе perClass Mira в полностью автоматическом режиме работы.
Рисунок 2 – Пример гиперспектрального изображения при обучении системы с метками perClass Mira GUI (на графическом интерфейсе пользователя)
Результаты работы модели, обучаемой в perClass Mira, приведены на рис. 3 и 4. На рис. 3 отсутствуют метки, т.к. данный снимок является отдельным тестовым. На рис. 4 показаны результаты попиксельной классификации.
Рисунок 3 – Тестовое изображение в perClass Mira
Рисунок 4 – Изображение с попиксельным решением, позволяющее отделить основные продукты от посторонних
На рис. 5 представлен снимок результата обнаружения объекта. Как для продукта, так и для внешнего класса получены сведения об объектах с площадью не менее 500 px, более мелкие объекты не рассматриваются. Такое решение является пользовательской настройкой, позволяющей избежать очень мелкие отходы, которые не могут быть обработаны устройством. Так же обратим внимание, что на рис. 5 классы, представляющие интерес вынесены на передний план в списке классов (флаг «F» рядом с именем класса). В perClass Mira каждый класс, находящийся на переднем плане, обрабатывается отдельно, следовательно, близко расположенные объекты разных классов необходимо размещать отдельно друг от друга (на рис. 5: грецкий орех, слева от центра изображения и часть листа под ним – оба изолированы как отдельные классы).
Рисунок 5 – Объекты (довольно крупные и взаимосвязанные между собой) идентифицированы. Обратите внимание, что соприкасающиеся объекты переднего плана правильно сегментированы
Была выполнена проверка производительности модели на нескольких неявных изображений, загруженных в среду perClass Mira.
Для запуска решения используем perClass Mira Runtime DLL в нашей пользовательской настройке. Как правило, опытный программист C/C++ может воспользоваться приведенным примерам (рис. 6-7) и интегрировать модель, работающую в реальном времени, в течение часа. В нашем примере создается приложение в командной строке, с использованием Specim Specsensor SDK для соединения с камерой FX и perClass Mira Runtime DLL для обработки данных.
Рисунок 6 – Приложение в командной строке Windows 10, отображающее полученные параметры Specsensor от камер Specim FX
Рисунок 7 – Скорость выполнения приложения на ноутбуке с Windows 10, с использованием GPU
perClass Mira Runtime принимает непосредственно необработанные спектральные снимки, полученные с камеры. В нашем случае каждый спектральный кадр FX17 содержит 640 пространственных пикселей и 224 спектральных полос. В теле внутреннего цикла perClass Mira Runtime выполняет коррекцию темного/белого при помощи опорного изображения, находящегося у пользователя на диске. Справочная информация может быть изменена во время работы программы, что позволяет повторно калибровать работающую систему. Такая реализация имеет решающее значение для хорошей производительности и корректировки работы, т.к. позволяет учитывать изменения освещенности или даже замены источника излучения. Обратим внимание, что такая функциональность не представлена на рынке у других устройств гиперспектральной визуализации, где темные/белые области корректируются на этапе реализации и для их изменения требуется перенастройка моделей.
perClass Mira Runtime может работать с каждым пикселем. Однако в нашем случае наиболее важно получить информацию о самом объекте. После обработки каждого снимка, выводится более подробная информация об объектах (даже нескольких), определенных на взятом кадре. Для каждого объекта сообщаются его: координаты, размер и класс. Полученные данные могут использоваться для корректировки работы устройства, что необходимо для удаления лишних предметов. Важно заметить, что perClass Mira Runtime не требует от экспериментатора решения сложных задач, т.к. буферизация данных и пространственная обработка линейно сканируется. От пользователя требуются лишь снимки для их последующей обработки. Никаких копий данных, двойных буферов или внешней обвязки элементов машинного зрения не требуется.
ПО perClass Mira Runtime доступна в Windows 10 x64 и в Linux. Для оценки скорости обработки запустим простой тест, в котором необработанный куб спектральных данных загружается в память, отдельные необработанные снимки дозагружаются при работе программы. Система обрабатывает 10 000 кадров (первые 500 в качестве «прогрева») и сообщает о лучшем из пяти запусков. При работе с Linux используется NVIDIA GTX1080, программа тратит в среднем 1,45 мс на обработку каждого спектрального снимка (т.е. происходит обработка 691 кадров в секунду). Этот процесс охватывает всю обработку данных: от их коррекции, до сегментации мультиклассовых объектов, с удалением небольших объектов и определением координат (рис. 8).
Рисунок 8 – Запуск perClass Mira Runtime в приложении пользователя, Linux. Выполнение 1,45 мс/кадр в среднем превышало 10 000 фреймов на графическом процессоре NVIDIA
Окно данных показывает содержимое внутреннего буфера обработки с попиксельным решением. Крестики выделяют обнаруженные положения объектов. Сохранение содержимого буфера в файл (изображение PNG) из запущенного приложения возможно с помощью публичного вызова perClass Mira Runtime API. Это позволяет разработчикам легко визуализировать работу алгоритмов даже в безконсольных системах.
Дополнительный функционал, который может быть полезен при промышленных применениях – это простое переключение между вычислительными бэкэндами. Такие вариации содержат CPU с поддержкой многоядерных процессоров, графический процессор NVIDIA с использованием CUDA, а также Open CL (например, с использованием встроенного Intel GPU). Еще возможно получить точные измерения времени из времени измерения API.
Рабочий процесс, описанный в данной статье, был реализован при помощи общедоступного perClass Mira 1.4 для Windows 10 x64 или Linux.
В этом видео показано получение гиперспектральных данных в реальном времени с камеры Specim FX10 и их дальнейшая обработка с использованием модели, выбранной в perClass Mira. Происходит обнаружение различных видов продуктов, таких как орехи и макаронные изделия, а также посторонние объекты, такие как скорлупа орехов и пластик.
Гиперспектральный анализ в режиме реального времени
Демонстрационная установка с камерой Specim FX10, подключенная через интерфейс GigE к perClass Mira и запущенная на ноутбуке.
Скриншот с экрана perClass Mira в процессе обработки изображений с камеры FX10. Обратите внимание на красную полосу сверху - это белый стандарт, который (правильно) классифицирован как пластик, хотя он не был включен в обучение системы. С левой стороны вы можете увидеть скорость кадра классификатора (3 мсек.) и захвата камеры (фиксированной до 80 кадров в секунду)