август 2022

 Задача 

Разработать ИИ для контроля и управления технологическим процессом выращивания личинок львинки

Сегментация движения личинок на всех стадиях развития, линейные размеры

от 1 мм до 25 мм

Сегментация области субстрата, корма, внутренних стенок контейнера

Оценка стадии и однородности развития личинок в контейнере

значения [ 0, 20 ]

Оценка здоровья, подвижности, реакции на свет и склонности к убеганию из контейнера личинок

значения [ 0, 20 ]

 Текущий результат 

 Процесс 

Экспериментируем с установкой камеры

Нужно разместить камеры между вертикальными рядами контейнеров как можно компактнее. Пробуем использовать fisheye камеру с углом обзора 180 градусов, установленную по верхней границе контейнера (так, что расстояние до субстрата составляет около 15 см.)

photo_2022-01-16_13-17-40
photo_2022-01-16_13-18-06

Калибруем камеры и выполняем ректификацию изображения

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

Преобразуем видеоизображение с камеры из fisheye проекции к обычной перспективной проекции. Важно чтобы прямые линии в полученной проекции оставались прямыми - контролируем результат с помощью шахматной доски.

Отлаживаем управление внешним освещением и ИК подсветкой камеры

Мы используем интерфейс Hikvision ISAPI для программного управления ИК подсветкой камеры. Для динамически активируемого внешнего освещения используем умные розетки Tp-Link Tapo, которые также имеют удобный программный интерфейс управления.

Тестируем подсветку.

Начинаем сбор датасета

Настраваем запись коротких видеосессий оценки параметров с периодичностью в 2 часа. Видеосессия длится 2 минуты и включает стадии с различными комбинациями подсветки - видимой, ИК - в дальнейшем это позволит исследовать реакцию личинок на различное освещение. 

big8x8_

Разрабатываем алгоритм сегментации субстрата

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

Используем производное от LBP преобразование, для построения карты вероятности наличия субстрата.

gray_local_29592
ezgif-6-7427e95290

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

Обучаем нейронную сеть и тестируем

Не ждём пока наберется датасет реальных данных. Разрабатываем генератор видеоизображений личинок разного размера и разной степени подвижности. Начинаем эксперименты с обучением нейросетевой модели RAFT на полностью синтетических данных.

Оцениваем подвижность личинок и склонность к побегу. Используем найденную область дна контейнера для построения маски внутренних стенок контейнера. Чем больше личинок находится на стенках или близко к ним - тем выше склонность к побегу из контейнера.

delta-ac5e72ff-6999-4086-9956-1a63cbcf7d50
mask-ac5e72ff-6999-4086-9956-1a63cbcf7d50

Тестируем обученную сеть на реальных данных. Используем также собственный алгоритм, основанный на определении оптического потока с помощью LBP-подобных дескрипторов. Алгоритм способен обнаруживать едва уловимое глазом движение объектов площадью от 4 пикселей.

подвижность
4

/ 10

побег
7

/ 10

ezgif-3-6afe082e80
подвижность
8

/ 10

побег
1

/ 10

ezgif-2-ed161d0b0b