Чтобы не перегружать данную статью, разобью ее на 2 части:
1. Постановка задачи и методы реализации;
2. Программное распознавание и электроника.
Инженер
Начну с того, что я начинающий инженер. Будучи студентом устроился работать программистом на завод. Завод занимался производство лако-крышечных изделий. По простому: крышек для закаток.
Через некоторое время я получил задачу в любимом для многих свободном формате. Мне было позволено пофантазировать на эту тему и через некоторое время предоставить свои «мисли» по этому поводу.
Фантазии
Считать крышки в стопке — казалось бы, что сложного? Берём номинальную стопку, кладём рядом со стопкой, которую считаем и «на глазок (по высоте)» определяем 50 штук или не 50.
Не тут-то было. На производстве уже использовали данный метод, и погрешность была, скажу я вам, +- 2 штуки.
За счет процесса изготовления и нарезки уплотняющей резинки, которая есть в каждой крышке, высота могла отклоняться на пол сантиметра в обе стороны.
«Мисли»
Сразу вспомнил, что когда-то имел дело с OpenCV. Решил использовать связку OpenCV & C++.
Было сделано несколько фотографий и проведено несколько дней в попытках понять, как же… Из-за постоянно меняющегося освещения было не ясно, как выделять интересующую часть из общей картины. Потом на скорую руку была сделана закрытая «камера» с контролируемой средой. Под контролируемой средой я подразумеваю контролируемое расположение веб-камеры и источника света.
На соседнем рынке была найдена лампа дневного света, которая, для наших целей, подходила идеально.
Первый успех
Наконец-то начали получаться именно те снимки, которые мы хотели.
Но тут начались безсонные ночи, которые пролетали незаметно… Энтузиазма было хоть отбавляй. Через несколько днейночей я получил первый результат. Придуманный мной «алгоритмишка» начал выдавать правильные значения. После предварительной демонстрации вышестоящему руководству было дано добро на продолжение данного проекта.
Технологический процесс упаковки изделий
Данный процесс заключался в том, что после некоторый манипуляций «оператором» она попадала в термоупаковочную машину, которая обтягивала стопку пленкой и запекала при высокой температуре фиксированное время.
Задача стояла такая: считать количество изделий в стопке перед тем, как они будут упакованы и выводить в понятном для оператора виде количество. В случае, если в стопке было «не 50», независимо в какую сторону, термопак не должен был пропускать данную стопку на упаковку.
Справа в вертикальном положение вы можете увидеть «номинальную» пачку, с которой все и сравнивалось.
Выше видно, что лампа была установлена параллельно люльке, в которою клали изделие для упаковки.
Термо-упаковочная машина управлялась платой на основе Atmega8, которая была сделана моими коллегами еще за долго до моего знакомства с ними.
Техническая реализация
Для выполнения подсчета решили использовать FoxConn на Atome. Было куплено некоторое количество этих милах.
Разрешение на запуск термопака и визуальное отображение количества изделий было повешено на Arduino Nano.
Камеру выбрали Logitech 920e:
В качестве засветки взяли светодиодную ленту с линзой из оргстекла.
Во второй части опишу алгоритм поиска, подсчета и в деталях расскажу об электронике, которая была разработана и изготовлена.
Автор: siemdi