Нами был реализован программно-аппаратный комплекс для инспекции пивных бутылок. Система призвана детектировать большой спектр проблем:
- Контроль взаимного расположения этикетки и контрэтикетки (не должно быть сдвигов влево-вправо или вверх-вниз)
- Контроль угла наклейки этикетки (допустимое отклонение — не более 2 градусов)
- Проверка наличия этикетки в принципе
- Обнаружение наслоения двух этикеток
- Сверка даты на колпачке с текущей датой, попутная проверка корректности печати даты
- Проверка качества колпачка — отсутствие прогаров, наслоений и т.п.
Требуемая производительность — 12.800 бутылок в час.
Устройство системы
Система состоит из:
- Шкафа управления с вычислительным ПК и сенсорным монитором пользователя
- Четырех видеокамер обзора нижней части бутылки
- Дополнительной 5-й камеры для проверки колпачка
- Модуль отбраковки (пушер)
- Энкодер для контроля скорости и положения конвейера

Алгоритм
Главной сложностью стал контроль расположения этикеток. Дело в том, что бутылка на инспекцию приходит неориентированной — она может быть повернута под каким угодно углом. Этикетки могут оказаться в любой проекции, а на бутылке нет никаких отличительных признаков, чтобы определить угол ее поворота.
Сначала мы решили пойти «в лоб» и обучить нейронную сеть видеть этикетки. Сказано — сделано, однако оказалось, что из-за достаточно большого размера этикетки ее контур обводится неточно:

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


Всего у заказчика 4 SKU. Мы разработали нейронную сеть, одинаково уверенно обнаруживающую нужные нам знаки на любых видах этикетки — на светлых, темных, и разных цветов.
Аналогично — для задней этикетки:


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

С отсутствующей задней этикеткой:

С наслоением этикеток:

С превышением угла наклона этикетки:

С нарушением взаимного расположения этикеток между собой:

Этикетка слишком низко:

Этикетка слишком высоко:

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

Ниже — еще фотографии из реального потока — то, что обнаружила система.
Сбой печати даты:

Пустая бутылка (нет пены, не видно уровня налива):

В зависимости от вида дефекта, точность обнаружения проблем составила от 93% до 98%.
