«Нормально», — ответила мне нейросеть, когда я просил помочь с 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.

Только потом осознал две вещи:

  1. YOLOv8 работает с трёхканальным RGB-входом, даже если изображение монохромное;

  2. Для обучения 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 и окно детекции из пилота — основной смысл останется понятен.


Детекция брака
Детекция брака
Модуль на станке
Модуль на станке
Эволюция  Борна !?.. нет — кронштейна!
Эволюция Борна !?.. нет — кронштейна!
Комплект из камеры, светового модуля, мини-ПК и колонки
Комплект из камеры, светового модуля, мини-ПК и колонки
Свет через лист поликарбоната
Свет через лист поликарбоната
Ноутбук для сбора dataset
Ноутбук для сбора dataset

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


  1. newintellimouse
    05.11.2025 10:53

    А вы за свой счёт всё это сделали на территории завода, я правильно прочитал, да?


    1. pincaglinch Автор
      05.11.2025 10:53

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


  1. MactireHB
    05.11.2025 10:53

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

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

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


    1. pincaglinch Автор
      05.11.2025 10:53

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


    1. pincaglinch Автор
      05.11.2025 10:53

      Про дообучение на «неуверенных» кейсах — думаю в том же направлении.
      Про камеру — полностью согласен: C270 выбран из расчёта «дёшево + работает» как тогда думал. В идеале — IMX335.
      А какую камеру порекомендовали бы вы для подобной задачи при бюджете до ~5–7 тыс. ₽?