Инженер собрал машину, сортирующую Lego
Конструктор Lego настолько популярен, что отдельные фанаты скупают кубики десятками килограмм. На торговых площадках в интернете конструктор продаётся на развес, причём рассортированные по цвету и форме детали стоят дороже, чем несортированные. Цена редких деталей доходит до 100 долларов за килограмм, более распространённые кубики продаются по 10−15 долларов. Некоторые даже зарабатывают на этом: покупают несортированные наборы, сортируют их вручную и продают дороже, чем купили.
Инженер и программист Жак Маттей обожает Lego; он собирает конструктор с тех пор, как себя помнит, но необходимости сортировать большие объёмы деталек у него до поры не возникало. Пока однажды он не узнал про описанную выше схему заработка на сортировке и не решил попробовать. Вечером он сделал несколько ставок на сетевых аукционах Ebay, а с утра обнаружил, что выиграл сразу все. В результате в гараже у Маттея оказалось две тонны Lego всевозможных форм и расцветок.
Тогда Маттею и пришла в голову идея собрать сортирующий механизм. Камера, установленная над конвейером, должна была сканировать детали, определять их цвет и конфигурацию, а механизм в конце конвейера — отправлять их в разные приёмники.
Первые трудности возникли с подающим механизмом: заставить устройство выбрасывать отдельные детали на ленту конвейера с нужной скоростью оказалось непросто: детальки постоянно слипаются в слишком большие блоки и перегораживают выходное отверстие механизма.
Разобравшись с подачей деталей, Маттей установил над конвейером недорогую камеру с увеличением, подключенную к компьютеру. Сортирующий механизм в конце ленты выглядит как ряд воздушных насосов, установленный вдоль ленты; когда деталь проходит мимо сопла, стоящего напротив корзины с такими же деталями, насос срабатывает, и кирпичик сдувает с конвейера в корзину. Главное — точно рассчитать время, когда деталь пройдёт мимо нужного насоса.
Но сложнее всего было, конечно, написать алгоритм распознавания. Несколько недель ушло только на то, чтобы программа сама обрабатывала изображения, вписывала большие детали в кадр и отличала цвет Lego от цвета фона.
В наборах Lego детали тысяч разных форм, а оттенков — больше сотни. Чтобы научить компьютер распознавать каждую из комбинаций цвета и формы, Маттей перепробовал несколько разных подходов. Подключить библиотеку для компьютерного зрения OpenCV оказалось недостаточно: алгоритм различал только базовые формы и цвета.
После библиотеки Маттей попробовал сортировать Lego с помощью байесовского классификатора — метода, который помогает, например, отделять полезные письма от спама. Иженер выделил 18 ключевых характеристик кубиков, по комбинации которой машина могла присвоить детали значение, соответствующее конкретной разновидности деталей. Это сработало, и после обучения программа научилась определять тип деталей с впечатляющей точностью —, но очень медленно.
Ускорить процесс помогла нейросеть: перепробовав несколько разных, Маттей остановился на TensorFlow от Google Brain Team; чтобы система работала ещё быстрее, инженер подключил нейросеть не через ЧПУ механизма, а через мощную игровую видеокарту GTX1080 Ti Nvidia. Предыдущие работы заняли месяцы, с нейросетью дело пошло быстрее: уже через несколько дней система заработала — правда, она умела определять только несколько типов деталей, но быстро училась распознавать новые Lego сама, Маттею оставалось только исправлять неизбежные ошибки.
По мере того, как нейросеть училась, ошибок становилось всё меньше. Сейчас система самостоятельно сортирует огромные партии Lego; ошибки случаются только тогда, когда нейросеть сталкивается с новыми для себя детальками. Когда нейросеть освоит все возможные формы и цвета, Маттей планирует наконец поручить ей сортировку всех двух тонн Lego, и продать сортированные наборы и наконец заработать.