Чтобы не перегружать данную статью, разобью ее на 2 части:
1. Постановка задачи и методы реализации;
2. Программное распознавание и электроника.
Начну с того, что я начинающий инженер. Будучи студентом устроился работать программистом на завод. Завод занимался производство лако-крышечных изделий. По простому: крышек для закаток.
Через некоторое время я получил задачу в любимом для многих свободном формате. Мне было позволено пофантазировать на эту тему и через некоторое время предоставить свои «мисли» по этому поводу.
Считать крышки в стопке — казалось бы, что сложного? Берём номинальную стопку, кладём рядом со стопкой, которую считаем и «на глазок (по высоте)» определяем 50 штук или не 50.
Не тут-то было. На производстве уже использовали данный метод, и погрешность была, скажу я вам, +\- 2 штуки.
За счет процесса изготовления и нарезки уплотняющей резинки, которая есть в каждой крышке, высота могла отклоняться на пол сантиметра в обе стороны.
![](https://habrastorage.org/r/w780q1/files/4dc/1ef/ef4/4dc1efef4346495bb86e116ecd5d6128.jpg)
Сразу вспомнил, что когда-то имел дело с OpenCV. Решил использовать связку OpenCV & C++.
Было сделано несколько фотографий и проведено несколько дней в попытках понять, как же… Из-за постоянно меняющегося освещения было не ясно, как выделять интересующую часть из общей картины. Потом на скорую руку была сделана закрытая «камера» с контролируемой средой. Под контролируемой средой я подразумеваю контролируемое расположение веб-камеры и источника света.
На соседнем рынке была найдена лампа дневного света, которая, для наших целей, подходила идеально.
![](https://habrastorage.org/r/w780q1/files/ed5/966/4ee/ed59664ee2d044d485e0d8c38e14dc28.jpg)
Наконец-то начали получаться именно те снимки, которые мы хотели.
![](https://habrastorage.org/r/w780q1/files/b82/5ec/483/b825ec48319c4acfac51532ac8fa069f.jpg)
Но тут начались безсонные ночи, которые пролетали незаметно… Энтузиазма было хоть отбавляй. Через несколько дней\ночей я получил первый результат. Придуманный мной «алгоритмишка» начал выдавать правильные значения. После предварительной демонстрации вышестоящему руководству было дано добро на продолжение данного проекта.
Технологический процесс упаковки изделий
Данный процесс заключался в том, что после некоторый манипуляций «оператором» она попадала в термоупаковочную машину, которая обтягивала стопку пленкой и запекала при высокой температуре фиксированное время.
Задача стояла такая: считать количество изделий в стопке перед тем, как они будут упакованы и выводить в понятном для оператора виде количество. В случае, если в стопке было «не 50», независимо в какую сторону, термопак не должен был пропускать данную стопку на упаковку.
Справа в вертикальном положение вы можете увидеть «номинальную» пачку, с которой все и сравнивалось.
![](https://habrastorage.org/r/w780q1/files/25f/444/aca/25f444aca9f541c49e24fb90ce99aaa9.jpg)
Выше видно, что лампа была установлена параллельно люльке, в которою клали изделие для упаковки.
Термо-упаковочная машина управлялась платой на основе Atmega8, которая была сделана моими коллегами еще за долго до моего знакомства с ними.
Техническая реализация
Для выполнения подсчета решили использовать FoxConn на Atome. Было куплено некоторое количество этих милах.
![image](https://habrastorage.org/r/w780q1/getpro/habr/post_images/8d7/6f4/ec4/8d76f4ec427a808a53e9fdec3f2b808d.jpg)
Разрешение на запуск термопака и визуальное отображение количества изделий было повешено на Arduino Nano.
![image](https://pp.vk.me/c608521/v608521071/4d04/BzQDrJmSXjY.jpg)
Камеру выбрали Logitech 920e:
![image](https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQd1n7x3U1RWVdAIxHkvF5M6aSptcVCdgkkKltq9OyrhdryDUh0wQ)
В качестве засветки взяли светодиодную ленту с линзой из оргстекла.
Во второй части опишу алгоритм поиска, подсчета и в деталях расскажу об электронике, которая была разработана и изготовлена.
1. Постановка задачи и методы реализации;
2. Программное распознавание и электроника.
Инженер
Начну с того, что я начинающий инженер. Будучи студентом устроился работать программистом на завод. Завод занимался производство лако-крышечных изделий. По простому: крышек для закаток.
Через некоторое время я получил задачу в любимом для многих свободном формате. Мне было позволено пофантазировать на эту тему и через некоторое время предоставить свои «мисли» по этому поводу.
Фантазии
Считать крышки в стопке — казалось бы, что сложного? Берём номинальную стопку, кладём рядом со стопкой, которую считаем и «на глазок (по высоте)» определяем 50 штук или не 50.
Не тут-то было. На производстве уже использовали данный метод, и погрешность была, скажу я вам, +\- 2 штуки.
За счет процесса изготовления и нарезки уплотняющей резинки, которая есть в каждой крышке, высота могла отклоняться на пол сантиметра в обе стороны.
![](https://habrastorage.org/files/4dc/1ef/ef4/4dc1efef4346495bb86e116ecd5d6128.jpg)
«Мисли»
Сразу вспомнил, что когда-то имел дело с OpenCV. Решил использовать связку OpenCV & C++.
Было сделано несколько фотографий и проведено несколько дней в попытках понять, как же… Из-за постоянно меняющегося освещения было не ясно, как выделять интересующую часть из общей картины. Потом на скорую руку была сделана закрытая «камера» с контролируемой средой. Под контролируемой средой я подразумеваю контролируемое расположение веб-камеры и источника света.
На соседнем рынке была найдена лампа дневного света, которая, для наших целей, подходила идеально.
![](https://habrastorage.org/files/ed5/966/4ee/ed59664ee2d044d485e0d8c38e14dc28.jpg)
Первый успех
Наконец-то начали получаться именно те снимки, которые мы хотели.
![](https://habrastorage.org/files/b82/5ec/483/b825ec48319c4acfac51532ac8fa069f.jpg)
Но тут начались безсонные ночи, которые пролетали незаметно… Энтузиазма было хоть отбавляй. Через несколько дней\ночей я получил первый результат. Придуманный мной «алгоритмишка» начал выдавать правильные значения. После предварительной демонстрации вышестоящему руководству было дано добро на продолжение данного проекта.
Технологический процесс упаковки изделий
Данный процесс заключался в том, что после некоторый манипуляций «оператором» она попадала в термоупаковочную машину, которая обтягивала стопку пленкой и запекала при высокой температуре фиксированное время.
Задача стояла такая: считать количество изделий в стопке перед тем, как они будут упакованы и выводить в понятном для оператора виде количество. В случае, если в стопке было «не 50», независимо в какую сторону, термопак не должен был пропускать данную стопку на упаковку.
Справа в вертикальном положение вы можете увидеть «номинальную» пачку, с которой все и сравнивалось.
![](https://habrastorage.org/files/25f/444/aca/25f444aca9f541c49e24fb90ce99aaa9.jpg)
Выше видно, что лампа была установлена параллельно люльке, в которою клали изделие для упаковки.
Термо-упаковочная машина управлялась платой на основе Atmega8, которая была сделана моими коллегами еще за долго до моего знакомства с ними.
Техническая реализация
Для выполнения подсчета решили использовать FoxConn на Atome. Было куплено некоторое количество этих милах.
![image](https://habrastorage.org/getpro/habr/post_images/8d7/6f4/ec4/8d76f4ec427a808a53e9fdec3f2b808d.jpg)
Разрешение на запуск термопака и визуальное отображение количества изделий было повешено на Arduino Nano.
![image](https://pp.vk.me/c608521/v608521071/4d04/BzQDrJmSXjY.jpg)
Камеру выбрали Logitech 920e:
В качестве засветки взяли светодиодную ленту с линзой из оргстекла.
Во второй части опишу алгоритм поиска, подсчета и в деталях расскажу об электронике, которая была разработана и изготовлена.