«Нормально», — ответила мне нейросеть, когда я просил помочь с YOLO, а она вместо этого нарисовала помятый телефон (контекст был перегружен).
Я улыбнулся. В тот момент я и сам чувствовал себя таким помятым. Станки простаивали уже четвёртый месяц. Зарплата в простое была символической. Пришлось искать дополнительные источники финансирования — в ход пошли даже старые запасы «железа».
Я тогда продал последний монитор — просто чтобы дожить до пятницы.
И в этих условиях я решил: не ждать заказов, а создавать ценность самому. Так родился мой модуль компьютерного зрения для контроля брака.
Почему я начал
Платой за минимизацию неизбежного брака было многочасовое неотрывное наблюдение за процессом. Это выматывало.
Я работал в режиме «два через два». К тому моменту, как у меня созрела идея автоматизировать контроль, я уже два месяца трудился в таком ритме.
Мне казалось, что в случае успеха я смогу предложить систему заказчику или реализовать «страховочный» план — внедрить решение совместно с производителем промышленного оборудования, с которым уже был налажен контакт.
Я поделился мыслью с коллегами — и получил подтверждение:
«Такая штука сильно облегчила бы работу и сократила брак».
Опыта в компьютерном зрении у меня не было. Я начал с основ: «С чего начать? Что это вообще такое?»
Оказалось, нужно собрать много фотографий, разметить их и обучить нейросеть.
В запасе был месяц — и я взялся за дело.
1. Сбор фото: от дешёвой камеры до квадрата 320×320
А) Камера
Сначала купил цилиндрический эндоскоп за 300 рублей — не подошёл из-за сложностей с угловой ориентацией.
Потом взял с рук Logitech C270 за 1000 рублей. Обнаружил на снимках муар.
Вспомнил поговорку «Скупой платит дважды» — и пошёл за новой камерой. Она работает до сих пор.
Б) Крепление
Спроектировал кронштейн и напечатал его на 3D-принтере. Закрепил камеру так, чтобы зона контроля была строго по центру. Четыре предыдущих варианта кронштейна отправились в корзину, прежде чем я добился нужного угла.
В) Свет
Освещала съёмку конструкция из 40-ваттной светодиодной лампы и прозрачного листа поликарбоната с защитной белой плёнкой в качестве рассеивателя из запасов на базе.
Г) Сбор и обработка подготовил простое приложение на Python, которое:
Захватывает изображение с внешней камеры в разрешении 1280×720,
Обрезает центральный квадрат 720×720,
Масштабирует до
320×320— для обучения YOLOv8,Делает по одному снимку каждые 2 секунды,
Позволяет вручную задать выдержку (важно при ярком освещении или движении).
Я собрал 800 изображений — этого хватило для пилота.
Совет: даже небольшое увеличение датасета даёт прирост в точности. Не ленитесь снять лишние 50 кадров.
2. Две ошибки подряд: чёрно-белые фото и не тот формат разметки
Сначала я потратил два дня, размечая брак на чёрно-белых изображениях — в расчёте на экономию памяти и ускорение инференса.
Параллельно размечал всё в формате PASCAL VOC, как было по умолчанию в LabelImg.
Только потом осознал две вещи:
YOLOv8 работает с трёхканальным RGB-входом, даже если изображение монохромное;
Для обучения YOLO нужен формат TXT.
Вместо конвертации я решил снять новый датасет в цвете и сделать разметку заново в правильном формате. Это заняло время, но сэкономило дни отладки позже.
Мораль: предположения — это хорошо, но техническая документация надёжнее.
Благодарен друзьям Андрею и Василию — их поддержка словом и делом в момент, когда ресурсов не хватало, помогла мне не бросить проект, а запустить следующий этап.
После обучения я конвертировал модель в ONNX, чтобы ускорить работу на слабом CPU.
Результаты:
mAP50 на валидационной выборке — 0.45
Для пилота и последующего ручного досмотра оператором этого оказалось достаточно.
Примерно 6% дефектов система не замечала при одном проходе. Но поскольку изделие проходит зону контроля несколько раз, общий уровень надёжности оказался приемлемым.
3. Инференс: как работает детекция в реальном времени
Для запуска на производстве подготовил скрипт, который:
Захватывает кадр с камеры (1280×720),
Обрезает центральный квадрат и ресайзит его до 320×320 (вход для модели),
Запускает YOLO-детекцию,
Фильтрует только три класса:
'Kr_Razr','Razr','Start',При обнаружении брака — воспроизводит звуковой фай�� с именем, совпадающим с классом (например,
Razr.mp3),Визуализирует bounding box прямо на оригинальном кадре (а не на уменьшенном),
Работает циклически с интервалом 2 секунды, чтобы не перегружать CPU и дать оператору время среагировать.
Система стабильно способна на 20 FPS на мини-ПК с N5095 (OpenVino) — этого более чем достаточно для контроля на конвейере. Для брака (на onnx было порядка 4 FPS ) тоже достаточно.
4. Железо: поиск стабильной платформы
Я протестировал несколько вариантов:
BIGTREETECH Pi — у меня сгорел после третьего включения (возможно, проблема в блоке питания — не стал разбираться глубже, тем более что мой настрой на бюджетность был плохим ориентиром: эта платформа совсем не про работу с YOLO. И да, трава зелёная, вода мокрая).
Orange Pi RV5 (RISC-V + NPU) — тут меня зацепила NPU. Интересная архитектура, но на момент тестов поддержка ОС и библиотек была крайне ограниченной.
Raspberry Pi 5 — несмотря на заявленную производительность, в моих условиях не показал ожидаемой скорости инференса с YOLOv8. Учитывая его стоимость (около 9000 ₽ в комплекте) и дефицитность, я решил поискать более предсказуемое решение.
Мини-ПК на Intel N5095 обошёлся мне в 9000 ₽ — то есть сопоставим по цене с Raspberry Pi 5, но предоставил доступ к зрелой экосистеме OpenVINO и стабильной работе под Windows/Linux без «танцев с бубном».
Иногда лучшее решение — не «новейший одноплатник», а проверенный x86-чип, который уже умеет всё, что нужно.
5. Затраты:
Всё оборудование я подбирал с расчётом на «минимум, но чтобы работало».
Затраты: прототип vs промышленное решение
Мини-ПК на Intel N5095 — для запуска модели без GPU,
Камера Logitech — для захвата изображений в реальном времени,
Пластик на крепление (около 100 г) — для точной фиксации зоны контроля,
Колонка — для звукового оповещения оператора,
Портативный дисплей.
Общая стоимость «железа» уложилась в рамки типичного хобби-проекта среднего уровня.
Важно: данная реализация — не промышленное решение. Она не включает защиту от пыли, вибрации, сертификацию, интеграцию с ПЛК, поддержку 24/7 или гарантийное обслуживание. Для реального внедрения на производстве требуются сертифицирован��ые компоненты, что, естественно, значительно увеличивает стоимость — и оправданно.
Я осознаю, что указание точных цен на самодельную сборку может создавать ложное впечатление «дешевизны» автоматизации. На самом деле, ценность профессиональных систем — не в компонентах, а в надёжности, безопасности и готовности к эксплуатации в жёстких условиях. Мой пилот — лишь доказательство того, что даже с минимальными ресурсами можно начать движение в этом направлении.
Экономический эффект: почему это того стоит
Расчёт экономии от сокращения брака я вёл на основе стоимости сырья и процентной доли брака от общего веса выпуска.
По моим оценкам, до 80% потерь можно предотвратить с помощью системы компьютерного зрения, что соответствует потенциальной экономии до 260–300 тыс. руб. в год (при среднестатистическом годовом объёме производства).
Конечно, это предварительные оценки, но они показывают, что даже пилотная версия модуля может принести значительную выгоду.
6. Что дальше?
Система работает. Она ждёт сырья к станкам для запуска на линии.
Параллельно я начал сотрудничать с производителем промышленного оборудования: мы уже сняли демонстрационное видео, и скоро услуга по созданию модулей «под ключ» появится на их сайте как опция.
В планах — интеграция с ПЛК и завязка на реле для автоматической остановки конвейера.
Я не раскрываю специфику производства, но делюсь своим тернистым опытом. Теперь я отлично вижу свои лишние и ошибочные шаги. Полагаю, без этих набитых шишек у меня бы ничего не вышло.
На старте я понимал, что проект не на три дня, и не был уверен в успехе. Практика показала: методом итераций и экспериментов можно добиться работоспособного решения даже с минимальными ресурсами.
Пока эта система ждёт сырья к станкам для запуска на линии, мы уже тестируем следующее поколение модуля — теперь он не только ловит брак, но и ведёт подсчёт изделий в реальном времени.
Вместе с производителем конвейеров мы отсняли рабочий процесс: камера фиксирует каждый объект, отсеивает дефектные, а при обнаружении брака — звучит голосовое оповещение.
Благодаря улучшенной разметке, более глубокой архитектуре и доступу к современным вычислительным ресурсам, новая модель показывает значительно лучшие метрики — как по точности, так и по стабильности на разных скоростях конвейера.
Подумываю о возможности осветить события создания модульной системы второго поколения — в следующем посте.
Скрытый текст


P.S. Почему я говорю «компьютерное зрение», а не «ИИ»
Потому что это не магия. Это инженерия: камера, код, железо, ошибки, переделки.
И почти любой, у кого есть ноутбук, время и желание, может повторить.
P.P.S.
Я читаю Хабр с 2011 года, но никогда не писал.
Этот пост — мой способ вернуть сообществу немного пользы за годы чтения.
Если у вас есть вопросы по реализации или идеи для улучшения — welcome в комментарии или личку. Буду рад обсудить!
Фото
С учетом NDA: я заменил реальные изделия на нейтральные, но оставил реальные bounding box и окно детекции из пилота — основной смысл останется понятен.






Комментарии (5)

MactireHB
05.11.2025 10:53При всём уважении к автору, история какая-то странная, объясню почему так решил. Вы спроектировали и внедрили на самом деле не такой уж и простое устройство под задачу контентного процесса. А что CV что NLP это тот ещё геморрой в отличии от базового машинного обучения, а у вас в реальном времени и захват и оценка изображений на основе весов и работа с внешнем оборудованием.
Для этого требуется явно обладать уверенным стеком и умением быстро разобраться в неизвестных инструментах. Сложно поверить, что человеку с такими навыками приходится работать два через два с непонятной зарплатой вынуждающий продавать старое железо чтобы выжить.
А во всём остальном отличная идея которая действительно облегчит производство, как идеи неплохо было-бы собирать в отдельный датасет изображения, где оценка принуждённости к классу близка к случайной и на таком пуле дообучить модель. А ещё как мне кажется имеет смысл заменить камеру для получения чётких и детализированных снимков и уже ухудшать их в процессе подготовки к обучению, чтобы снизить количество артефактов, но это гипотеза.

pincaglinch Автор
05.11.2025 10:53Вы правы — я бы тоже усомнился. Особенно если бы не знал, сколько косяков и перезапусков было за кадром. Статья — лишь упрощённая выжимка.

pincaglinch Автор
05.11.2025 10:53Про дообучение на «неуверенных» кейсах — думаю в том же направлении.
Про камеру — полностью согласен: C270 выбран из расчёта «дёшево + работает» как тогда думал. В идеале — IMX335.
А какую камеру порекомендовали бы вы для подобной задачи при бюджете до ~5–7 тыс. ₽?
newintellimouse
А вы за свой счёт всё это сделали на территории завода, я правильно прочитал, да?
pincaglinch Автор
Да, всё оборудование (камера, мини-ПК, крепление, колонка) я приобрёл за свой счёт и собрал пилотную установку самостоятельно. У меня неделя была для захвата фото. Далее простой станков. Сейчас система готова к запуску на линии, как только появится сырьё. Надеюсь, что инвестиция окупится. Но еще конечно доработать надо будет.