Как отсортировать лего детали

Обновлено: 28.04.2024

Изобретатель Дэниел Вест (Daniel West) собрал универсальный LEGO-сортировщик: с помощью подключенного алгоритма компьютерного зрения он может распознать и отсортировать любую когда-либо созданную для конструктора деталь. Сам сортировщик состоит из более десяти тысяч LEGO-деталей, а скорость его работы — примерно полдетали в секунду. Подробности о работе устройства сообщает Engadget.

Из-за обилия самых разных деталей и простоты сборки конструктор LEGO используется для создания многих полезных устройств. Например, из LEGO уже делали принтер, который сканирует изображение и собирает его опять же из LEGO, а также кубики конструктора использовали для создания модульной микрофлюидной установки.

Разумеется, машины для сортировки деталей LEGO (очень полезное приспособление для тех, у кого очень много разных конструкторов в разобранном виде) делают из них же, а первое подобное устройство представили еще в 2012 году: для определения детали в нем используется открытый алгоритм для распознавания изображения, сравнивающий снимок одной детали с существующей у сортировщика базой данных.

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

На следующем шаге сортировки снимается видео деталей — его обрабатывает Raspberry Pi и отправляет далее для анализа на другой компьютер по беспроводной связи. На компьютере заснятые на видео детали анализируются с помощью алгоритма, в основе которого лежит сверточная нейросеть, обученная на трехмерных моделей всех существующих LEGO-деталей. Каждой детали присваивается вероятность принадлежности к какой-либо категории, после чего результат отправляется на сортировочную станцию устройства. Наконец, система, состоящая из нескольких двигающих ворот, направляет деталь в необходимую коробочку. Всего коробочек 18: это больше, чем количество возможных деталей, но для каждой коробочки можно выбрать набор попадающих в нее деталей. Одну деталь устройство может отсортировать примерно за две секунды.

Как понять, какая система хранения Лего подходит именно для вашей коллекции? Том Алфин, автор книги Лего-Архитектура, предлагает прежде всего учесть размер вашей коллекции. Однако следует помнить, что коллекция будет расти, а поэтому нужно предусмотреть свободное пространство для новых поступлений.

Рекомендуем

Контейнеры для Лего (13)

Хранение Минифигурок Лего (10)

Содержание

  • Контейнеры для малых коллекций Лего.
    • Ковёр-мешок для Лего
    • Хранение Лего под кроватью
    • Контейнеры с крышкой
    • Лего-стол
    • Шкафы для инструментов — органайзеры для Лего
    • Кассетницы-органайзеры для Лего
    • Органайзеры для мелких деталей Лего

    Как определить размер вашей коллекции?

    Если вы знаете какие у вас наборы — проверьте количество деталей в каждом наборе и сложите

    1 литр = примерно 250 кирпичиков

    1 кг = примерно 700 кирпичиков

    Контейнеры для малых коллекций Лего.

    Для самых маленьких любителей Лего, большой организации не требуется. Их творчество стимулируют новые кирпичики, которые им попадаются. Да и для более старших детей лет до 90 всегда интересно обнаружить новую необычную деталь (или деталь, которую давно не видели). А потому главное здесь лёгкость уборки и функциональность.

    Ковёр-мешок для Лего

    Ковёр-мешок для лего

    Ковёр-мешок вмещает до 2000-5000 кубиков. Большой плюс — ребёнок сможет делать уборку быстро и самостоятельно. Ковры-мешки для Лего бывают различных размеров. Разумно выбирать больший, на вырост. Такой ковёр-мешок очень хорош как дополнение к более сложной системе организации Лего. Ведь в любой системе хранения Лего остаются кубики, которые нет смысла отсортировывать.


    Хранение Лего под кроватью

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

    Контейнер для Лего под кровать

    Очень удобно, если у ящика есть небольшие колёса.

    Большие пластиковые контейнеры с крышкой

    В 20-литровом контейнере можно разместить до 5000 кубиков.

    Ящик для хранения Lego Unibox 30 л

    Контейнер для хранения Лего 30Л

    Полимербыт — прозрачный контейнер с крышкой для Лего 57Л,

    Прозрачный контейнер для Лего

    • Прозрачный. Прозрачные контейнеры предпочтительнее, так как в них можно найти нужную деталь, которая на дне.
    • Плоский. В глубокий контейнер больше войдёт. Чем мельче контейнер, тем проще найти.
    • Вместительный. Вместительный - отличное качество для небольшой коллекции. Войдёт много, искать легко.
    • С крышкой. Можно поставить один на другой для экономии места.
    • Колёсики для удобного перемещения, можно поставить под кровать
    • Не заполняйте контейнер полностью
    • Расчет ёмкости: 1л = 250 кирпичиков, 20л. - 5000кирпичиков Лего.

    Лего-Стол

    Это решение очень интересное - система хранения встроена в игровой стол. По причине функциональности сейчас многие родители выбирают именно это решение. Фирменный стол Лего для студий стоит около 25000р. и довольно громоздкий. Для обычных квартир больше подходят эти компактные варианты.

    Столик для лего на ebay — это большое разнообразие моделей и довольно низкая цена.

    Столик для лего

    Столик для Лего своими руками — есть смысл рассмотреть создание лего-стола своими руками. Здесь мы описали 12 вариантов.

    Контейнеры для больших коллекций Лего

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

    Шкафы для инструментов - органайзеры для Лего

    Опытные коллекционеры предпочитают шкафчики с разными размерами ящиков для разных деталей.

    Шкафы-органайзеры для Лего

    Органайзеры для Лего с разными размерами контейнеров Тома Алфина.


    Кассетницы - органайзеры для Лего

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


    Кассетница для Лего 3 ящика

    Органайзеры для мелких деталей Лего

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

    Органайзер для Лего

    Подумайте, что вам интереснее всего делать из Лего. Например, если это Лего-техник, имеет смысл уделить пристальное внимание сортировке деталей из Лего-техник.

    Органайзер для Лего 2

    Ящики для инструментов бывают немного разными, у каждого коллекционера своё предпочтение.

    Лего - игрушка, конечно, что надо! И развивает, и игр с ней можно придумать не счесть, - в общем вещь крайне полезная среди детских игрушек, а значит обязана быть у каждого ребенка. Но как хранить, - вопрос, думаю, встает у большинства уже после покупки второго набора. А если дети действительно лего увлекаются, то тут не заморочиться насчет хранения просто невозможно. Наверняка, каждый из вас уже искал способ хранить эту чудо игрушку, потому что бесконечно наступать на эти мелкие впивающиеся в ноги детали так себе удовольствие. А разбрасываются они почему? - Правильно! Потому что хранение, как следует, не организовано.

    Я перепробовала много способов и нашла один, который действительно организовал Лего в нашем доме. Теперь дети убирает его быстро и всегда знают, куда, какую деталь положить.

    Как всегда расскажу об всех способах, которые знаю, и свой вам покажу.

    1. Хранение с фирменных коробках. Так себе способ знаете ли.. с одной стороны, -да, удобно, что сразу картинка, и инструкция,и детали все вместе. Все как новенькое, в общем. Но если ваш ребёнок, действительно, играет в Лего, а не коллекционирует коробки, такой способ вам не подойдёт.

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

    3. Хранить по форме деталей. Этот способ был актуален для моего старшего сына, когда он ходил на робототехнику. Там они собирали роботов, пользуясь названиями каждой детали. (Вы вообще знали, что у каждой детали название есть?) И тогда, частично у него был Лего разложен именно по форме. Но это довольно сложный способ, и я бы назвала его профессиональным.

    4. Но мы с детьми вопрос решили по-другому, и теперь у нас все тип-топ. как говорится. Мы храним детали в контейнерах по цветам , вне зависимости от того какой это набор. Критерий: цвет и ещё есть 3 дополнительных контейнера : колёса (их у нас просто много), прозрачные детали и человечки со всякими прибамбасами типа морковки из набора майнкрафт или крыльев от дракона.

    Этот способ мы попробовали уже давно, и он прижился. Теперь у нас в Лего абсолютный порядок всегда, и даже если какие-то детали выпадают , дети всегда знают куда их положить.

    А на возражение, "Как потом собирать детали из набора?" я с легкостью отвечу: Инструкции мы все храним. И когда дети начинают собирать по инструкции, они видят какого цвета нужна деталь и ищут ее в нужном контейнере. Элементарно и очень удобно!

    Что касается самих контейнеров, то моя рекомендация прозрачные , чтобы цвет было видно сразу. Так легко ориентироваться.

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

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

    Итак, изучен интернет, определены основные народные способы сортировки (фотки из интернета):

    Бюджетная сортировка Lego LEGO, Сортировка, Длиннопост

    В принципе, можно было бы и остановиться, т.к. это один из лучших и самых популярных способов, имеющей кучу плюсов. Главный минус - дорого. Одна такая брендовая штука, как на картинке выше, стоит порядка 4 тысяч рублей. Кроме того, для детей, как кажется, это не оптимальный вариант - ведь им хочется видеть все, т.е. все ячейки кассетницы будут при каждой игре выниматься. Как кажется, это больше вариант уже детей постарше (годков по 30), коллекционеров и вообще увлекающихся этим делом.

    2. Ящики с отсеками: боксы для крепежа и бытовые коробочки для мелочевки.

    Бюджетная сортировка Lego LEGO, Сортировка, Длиннопост

    Бюджетная сортировка Lego LEGO, Сортировка, Длиннопост

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

    3. Контейнеры для еды

    Бюджетная сортировка Lego LEGO, Сортировка, Длиннопост

    Отмел сразу, т.к. никакой оперативности - это чисто хранилище, на мой взгляд.

    И тут взгляд мой упал на пластиковый комодик с плоскими выдвижными ящиками, в котором хранилась всякая ерунда. Вот такой:

    Бюджетная сортировка Lego LEGO, Сортировка, Длиннопост

    Достаточно большие ящики, при этом неглубокие. Но без разделителей. Можно, конечно, разделить детальки на пять больших групп, но этого недостаточно. Поэтому в ближайшем магазе типа "все для дома" покупаются дешевые контейнеры (мелкие по 8 руб., покрупнее - по 30 руб.).

    Бюджетная сортировка Lego LEGO, Сортировка, Длиннопост

    . и запихиваются внутрь выдвижных ящиков. Получается вот так:

    Бюджетная сортировка Lego LEGO, Сортировка, Длиннопост

    Бюджетная сортировка Lego LEGO, Сортировка, Длиннопост

    (тут примерно половина деталек, но все должно влезть)

    Итак, задача выполнена:

    1. Отсортированы по размерным группам основные классические блоки и типовые мелкие детальки - теперь не надо рыться во всей куче в поисках детальки 2х1, пластины 1х8 или колеса - достаточно заглянуть в коробочку соответствующей группы. Специально не стали сортировать совсем на мелкие группы - ибо у нас не так много деталек, и детям обратно было бы лениво сортировать детальки на кучу отсеков. А так вроде норм. Без сортировки в одном ящике лежит "все остальное", нестандартные детали от наборов: ройся - не хочу, как говорится.

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

    3. Верхний ящик используется как "буфер", куда в течение недели скидываются детальки, случайно найденные в течение недели (как правило, методом наступания пяткой ночью по пути в туалет), на выходных это безобразие сортируется по своим местам.

    4. На контейнеры потрачено рублей 400. Да, тут я немного схитрил, ибо комод уже был в наличии. А без него ничего бы не получилось.

    5. При пополнении коллекции контейнеры перекомпоновать, добавив больших или, наоборот, маленьких.

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

    Последние несколько лет я занимался проектированием и изготовлением машины, которая сможет распознавать и сортировать детали LEGO. Важнейшая часть машины — это Capture Unit, небольшое, почти полностью закрытое отделение, в котором есть конвейерная лента, освещение и камера.


    Освещение вы увидите чуть ниже.

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

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

    Конечная цель: перейти от «сырого» видео (слева) к набору изображений одинакового размера (справа) для их передачи в нейросеть. (по сравнению с реальной работой gif замедлен примерно вдвое)

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

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

    Самое важное — найти хорошие ограничивающие прямоугольники (выше показаны зелёным цветом)

    Я рассмотрю три аспекта решения задачи:

    • Подготовка с устранением лишних переменных
    • Создание процесса из простых операций машинного зрения
    • Поддержание достаточной производительности на платформе Raspberry Pi, имеющей ограниченные ресурсы

    Устранение лишних переменных

    В случае подобных задач перед применением техник машинного зрения лучше всего устранить как можно больше переменных. Например, меня не должны волновать условия окружающей среды, разные положения камеры, потери информации из-за перекрытия одних деталей другими. Конечно, можно (хоть и очень сложно) разрешить все эти переменные программно, но к счастью для меня, эта машина создаётся с нуля. Я сам могу подготовиться к успешному решению, устранив все помехи ещё до того, как начал писать код.

    Первый шаг — это жёсткая фиксация положения, угла и фокусировки камеры. С этим всё просто — в системе камера закреплена над конвейером. Не нужно мне волноваться и о помехах от других деталей; нежелательные объекты почти не имеют шанса попасть в capture unit. Немного сложнее, но очень важно обеспечить постоянные условия освещённости. Мне не нужно, чтобы распознаватель объектов ошибочно интерпретировал тень от движущейся по ленте детали как физический объект. К счастью, capture unit очень мал (вся область обзора камеры меньше буханки хлеба), поэтому у меня был более чем достаточный контроль над окружающими условиями.


    Capture unit, вид изнутри. Камера находится в верхней трети кадра.

    Одно из решений — сделать отсек полностью замкнутым, чтобы никакое освещение снаружи не поступало. Я попробовал такой подход, использовав в качестве источника освещения светодиодные ленты. К сожалению, система оказалась очень капризной — достаточно одной небольшой дырочки в корпусе и свет проникает в отсек, делая невозможным распознавание объектов.

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


    Получайте, тени!

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

    Распознаватель объектов

    YOLO очень крута! Но мне не нужны все её функции.

    К счастью, я мог избежать сложного решения на основе ИИ, воспользовавшись «олдскульными» техниками машинного зрения. Первая техника — это вычитание фона (background subtraction), которое пытается выделить все изменившиеся части изображения. В моём случае единственное, что движется в поле зрения камеры — это детали LEGO. (Разумеется, лента тоже движется, но поскольку она имеет однородный цвет, камере она кажется неподвижной). Отделим эти детали LEGO от фона, и половина задачи решена.

    Чтобы вычитание фона работало, объекты переднего плана должны значительно отличаться от фона. Детали LEGO имеют широкий диапазон цветов, поэтому мне нужно было очень тщательно выбирать цвет фона, чтобы он был как можно более далёк от цветов LEGO. Именно поэтому лента под камерой изготовлена из бумаги — она не только должна быть очень однородной, но и не может состоять из LEGO, иначе будет иметь цвет одной из деталей, которые мне нужно распознавать! Я выбрал бледно-розовый, но подойдёт и любой другой пастельный цвет, непохожий на обычные цвета LEGO.

    В чудесной библиотеке OpenCV уже есть несколько алгоритмов для вычитания фона. Вычитатель фонов MOG2 — самый сложный из них, и при этом он работает невероятно быстро даже на raspberry pi. Однако подача кадров видео напрямую в MOG2 работает не совсем хорошо. Светло-серые и белые фигуры слишком близки к яркости бледного фона и теряются на нём. Мне нужно было придумать способ, чтобы отчётливей отделить ленту от находящихся на ней деталей, приказав вычитателю фона внимательнее смотреть на цвет, а не на яркость. Для этого мне достаточно было увеличить насыщенность изображений перед передачей его в вычитатель фонов. Результаты при этом значительно улучшились.

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

    Производительность

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

    В очень подробной документации к picamera написано, что чип камеры V2 может выдавать изображения размером 1280x720 пикселей с максимальной частотой 90 кадров в секунду. Это невероятный объём данных, и хотя камера может его генерировать, это не означает, что с ним справится компьютер. Если бы я обрабатывал сырые 24-битные RGB-изображения, то мне пришлось бы передавать данные со скоростью примерно 237 МБ/с, а это слишком много и для бедного GPU компьютера Pi, и для SDRAM. Даже при использовании ускоренной с помощью GPU компрессии в JPEG частоты 90fps достичь невозможно.

    Камера Raspberry Pi способна выводить сырое неотфильтрованное YUV-изображение. Хотя с ним работать сложнее, чем с RGB, у YUV на самом деле есть множество удобных свойств. Самое важное из них заключается в том, что оно хранит всего 12 бит на пиксель (у RGB это 24 бита).


    Каждые четыре байта Y имеют один байт U и один байт V, то есть на пиксель приходится 1,5 байта.

    Это означает, что по сравнению с RGB-кадрами я могу обрабатывать в два раза больше YUV-кадров, и это ещё не считая дополнительного времени, которое GPU экономит на преобразовании в RGB-изображение.

    Однако такой подход накладывает уникальные ограничения на процесс обработки. На большинство операций с полноразмерным кадром видео будет тратиться чрезвычайно много памяти и ресурсов ЦП. В пределах моих строгих временных ограничений невозможно даже декодировать полноэкранный YUV-кадр.

    К счастью, мне и не нужно обрабатывать кадр целиком! Для распознавания объектов ограничивающие прямоугольники не обязаны быть точными, достаточно приблизительной точности, поэтому весь процесс распознавания объектов можно выполнять с гораздо меньшим кадром. Операция уменьшения масштаба не обязана учитывать все пиксели полноразмерного кадра, поэтому кадры можно уменьшать очень быстро и без затрат. Затем масштаб получившихся ограничивающих прямоугольников снова увеличивается и используется для вырезания объектов из полноразмерного YUV-кадра. Благодаря этому мне не нужно декодировать или иным образом обрабатывать весь кадр высокого разрешения.


    К счастью, благодаря способу хранения этого формата YUV (см. выше) очень легко реализовать быстрые операции обрезки и уменьшения масштаба, работающие непосредственно с форматом YUV. Кроме того, весь процесс без особых проблем можно распараллелить на четыре ядра Pi. Однако я выяснил, что не все ядра используются в полную силу, и это говорит нам, что «бутылочным горлышком» по-прежнему остаётся пропускная способность памяти. Но даже при этом мне удалось на практике достичь 70-80FPS. Более глубокий анализ использования памяти возможно помог бы ещё больше ускорить работу.


    Если вам хочется узнать больше о проекте, то прочитайте мою предыдущую статью «Как я создал более 100 тысяч размеченных изображений LEGO для обучения».

    Читайте также: