Pull to refresh

Промышленное использование C++ & OpenCV. Часть 1: Постановка задачи и методы реализации

Reading time 2 min
Views 35K
Чтобы не перегружать данную статью, разобью ее на 2 части:

1. Постановка задачи и методы реализации;
2. Программное распознавание и электроника.

Инженер


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

Через некоторое время я получил задачу в любимом для многих свободном формате. Мне было позволено пофантазировать на эту тему и через некоторое время предоставить свои «мисли» по этому поводу.

Фантазии


Считать крышки в стопке — казалось бы, что сложного? Берём номинальную стопку, кладём рядом со стопкой, которую считаем и «на глазок (по высоте)» определяем 50 штук или не 50.

Не тут-то было. На производстве уже использовали данный метод, и погрешность была, скажу я вам, +\- 2 штуки.

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



«Мисли»


Сразу вспомнил, что когда-то имел дело с OpenCV. Решил использовать связку OpenCV & C++.

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

На соседнем рынке была найдена лампа дневного света, которая, для наших целей, подходила идеально.



Первый успех


Наконец-то начали получаться именно те снимки, которые мы хотели.



Но тут начались безсонные ночи, которые пролетали незаметно… Энтузиазма было хоть отбавляй. Через несколько дней\ночей я получил первый результат. Придуманный мной «алгоритмишка» начал выдавать правильные значения. После предварительной демонстрации вышестоящему руководству было дано добро на продолжение данного проекта.

Технологический процесс упаковки изделий

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

Задача стояла такая: считать количество изделий в стопке перед тем, как они будут упакованы и выводить в понятном для оператора виде количество. В случае, если в стопке было «не 50», независимо в какую сторону, термопак не должен был пропускать данную стопку на упаковку.

Справа в вертикальном положение вы можете увидеть «номинальную» пачку, с которой все и сравнивалось.



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

Термо-упаковочная машина управлялась платой на основе Atmega8, которая была сделана моими коллегами еще за долго до моего знакомства с ними.

Техническая реализация
Для выполнения подсчета решили использовать FoxConn на Atome. Было куплено некоторое количество этих милах.

image

Разрешение на запуск термопака и визуальное отображение количества изделий было повешено на Arduino Nano.

image

Камеру выбрали Logitech 920e:

image

В качестве засветки взяли светодиодную ленту с линзой из оргстекла.

Во второй части опишу алгоритм поиска, подсчета и в деталях расскажу об электронике, которая была разработана и изготовлена.
Tags:
Hubs:
+19
Comments 34
Comments Comments 34

Articles