惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
PCI Perspectives
PCI Perspectives
Webroot Blog
Webroot Blog
Help Net Security
Help Net Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hacker News: Ask HN
Hacker News: Ask HN
Security Latest
Security Latest
P
Palo Alto Networks Blog
Spread Privacy
Spread Privacy
S
Securelist
V2EX - 技术
V2EX - 技术
Schneier on Security
Schneier on Security
P
Proofpoint News Feed
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Forbes - Security
Forbes - Security
N
News | PayPal Newsroom
Cyberwarzone
Cyberwarzone
C
Cisco Blogs
Cloudbric
Cloudbric
GbyAI
GbyAI
A
About on SuperTechFans
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
P
Proofpoint News Feed
SecWiki News
SecWiki News
T
Tailwind CSS Blog
腾讯CDC
C
Cybersecurity and Infrastructure Security Agency CISA
The Hacker News
The Hacker News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
M
MIT News - Artificial intelligence
爱范儿
爱范儿
Microsoft Azure Blog
Microsoft Azure Blog
T
Troy Hunt's Blog
G
Google Developers Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cisco Talos Blog
Cisco Talos Blog
D
DataBreaches.Net
V
Vulnerabilities – Threatpost
博客园 - 叶小钗
C
Check Point Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Know Your Adversary
Know Your Adversary
T
Tor Project blog
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
Y
Y Combinator Blog
H
Help Net Security
Latest news
Latest news

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
DIY-стенд для инспекции печатных плат (профиль, камера, шаговые двигатели и немного инженерного упрямства)
Aimnew · 2026-05-13 · via Все публикации подряд на Хабре

Я, как и многие, залип в датасеты, метрики и нейросети - и в какой-то момент понял, что почти не думаю о главном, как вообще проходит процесс инспекции печатных плат.

Чтобы закрыть вопрос реального процесса инспекции печатных плат, было принято решение собрать собственный компактный стенд (подиум на алюминиевом профиле, камера, два шаговых двигателя и много (очень много) хомутов для проведения автоматической инспекции. Основные критерии, которые были заложены в основу будущего стенда: он должен быть простым в управлении, достаточно компактным, чтобы уместиться на рабочем столе и универсальным. Чтобы была возможность решать различные задачи инспекции.

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

Если коротко, то я собрал из того, что было под рукой (местами буквально "на коленке"), и это неожиданно дало больше понимания, чем ещё одно обучение модели.

Введение

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

Но как это сделать, если ничего этого не умеешь и не знаешь? Разбираться пришлось по классике: документация, google, любая LLM и куча проб и ошибок.

Когда речь заходит об автоматизированной инспекции, на первый взгляд кажется, что достаточно взять готовое промышленное решение, но на практике есть несколько вариантов и у каждого есть свои ограничения: либо сложность, либо цена, либо требования к инфраструктуре. Тем более это инженерный стенд, который позволил бы проверить гипотезы, понять ограничения и приблизиться к реальным условиям инспекции.

Мне нужен был именно промежуточный вариант, который не требует сложной конвейерной инфраструктуры, но при этом позволяет исследовать механику позиционирования камеры и качество распознавания дефектов на реальных изображениях.

Решение 1. Промышленные AOI-системы - большие, сложные и дорогие.

Рисунок 1. Решение №1

Рисунок 1. Решение №1

Решение 2. Системы, напоминающие микроскоп, где плату кладут на стол, после чего инспекция идёт на фиксированном участке с высоким увеличением.

Рисунок 2. Решение №2

Рисунок 2. Решение №2

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

Рисунок 3. Решение №3

Рисунок 3. Решение №3

Решение 4. Мультикамерные системы - интересный вариант, но с ограниченной зоной съёмки.

Рисунок 4. Решение №4

Рисунок 4. Решение №4

В итоге стало понятно, что готовые решения либо избыточны, либо плохо подходят под задачу прототипирования. В какой-то момент я наткнулся на довольно интересные системы, например MEK iSpector JDz и VeriSpector Low Cost THT AOI, что достаточно современно и НЕ ОБЫЧНО. Именно их концепция показалась мне наиболее близкой к тому, что хотелось получить в рамках прототипа. По сути, это модульная конструкция, где плата располагается на рабочей поверхности, а сверху находится подвижный оптический модуль с камерой и подсветкой. При этом настольный вариант системы можно относительно просто интегрировать в конвейерную линию. В таких системах используется Z-ось для изменения высоты оптического модуля, что позволяет работать с платами и компонентами разной высоты. Фактически это уже не просто «камера над столом», а полноценная платформа, которую можно масштабировать под разные производственные задачи.

Рисунок 5. Решение №5

Рисунок 5. Решение №5

Если говорить про конвейер, то он имеет свои сильные стороны (скорость, но не точность), но для моей задачи он был избыточен и тянул за собой отдельный пласт сложности (механика, приводы, синхронизация, стабильность подачи, освещение). Это уже полноценный производственный комплекс, а не учебно-исследовательский прототип. Уже теперь исходя из полученного опыта, собрав бы я его, то я бы лишился множества ограничений и особенностей программного продукта, с которым столкнулся при разработке и тестировании "подиума на четырёх ножках".

Рисунок 6. Решения №5 на базе конвейера

Рисунок 6. Решения №5 на базе конвейера

Почему именно это решение? Мне понравился вариант без "лишнего" корпуса. По сути, это конструкция на алюминиевом профиле, которую можно достаточно легко адаптировать под задачу (заменить рабочий стол на конвейер, изменить рабочую область или добавить дополнительные оси). При этом у такого подхода есть ограничение. Если камера фиксирована и снимает плату целиком, то возможности детальной инспекции становятся ограниченными. Нельзя просто сместить область контроля без перемещения самой платы или изменения положения камеры.

Именно такую возможность и необходимо добавить в стенд. А, так как для прототипа нет необходимости собирать большой стенд, то он будет на небольших ножках, но с возможностью снимать кадры вблизи (под увеличением).

В качестве реализации системы перемещения была выбрана максимально простая и доступная механика, похожая на ту, что используется в бюджетных ЧПУ-станках и DIY 3D-принтерах.

В DIY есть два очевидных пути: делать "почти промышленно" на ШВП, линейных рельсах с высокой точностью и соответствующей ценой, или идти по пути бюджетных 3D-принтеров на ремнях, шаговых двигателях и более простой механике.

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

Рисунок 7. Пример относительно дорогого решения

Рисунок 7. Пример относительно дорогого решения

Рисунок 8. Пример DIY-решения на ремнях.

Рисунок 8. Пример DIY-решения на ремнях.

Стенд задумывался как подиум на четырёх ножках, на котором закреплена камера. Где камера перемещается по двум осям (вертикальная и горизонтальная) чтобы можно было просматривать плату последовательно, как бы "сканируя" её поверхность. Еще было желание добавить третью ось - для автоматического увеличения. Уже на этом этапе стало понятно, что решение выглядит наивно, но именно такие "наивные" конструкции хорошо показывают реальные ограничения.

Поставленные задачи

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

Во-вторых, проверить, насколько удобно строить систему инспекции не через перемещение самой платы, а через перемещение камеры над объектом. Спойлер - не очень удобно, если камера будет "дрожать".

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

Так появился стенд с подиумом на курьих четырёх опорах, вертикальной стойкой и узлом перемещения камеры по двум осям.

Идея конструкции

Идея простая, плата лежит на основании, камера ездит над ней по двум осям и последовательно "сканирует" поверхность.

Камера должна иметь возможность менять положение по горизонтали и вертикали, чтобы охватывать разные участки платы.

В результате конструкция получилась такой:

  • каркас из алюминиевого профиля как основной конструктивный материал;

  • крепёжные элементы и хомуты для фиксации узлов;

  • два шаговых двигателя для перемещения камеры;

  • блок питания;

  • управляющая плата на Arduino-совместимом контроллере;

  • камера для съёмки поверхности платы;

  • стяжки - временные решения, которые в итоге стали частью конструкции.

Принцип - максимум функциональности при минимуме сложности.

Почему алюминиевый профиль? Идеальный выбор для того, чтобы быстро собрать жёсткую и модульную конструкцию. Так же стенд должен быть не только прочным, но и изменяемым. Если в процессе экспериментов нужно изменить высоту, расположение камеры или жёсткость рамы, профиль позволяет это сделать без полной переделки конструкции или просто нарезать профиль новой длины.

В качестве приводов использовал шаговые двигатели, они проще в управлении и хорошо подходят для таких задач (управляются супер-простым способом - шагами, с помощью дешевого драйвера за 100 рублей). Сервоприводы рассматривал, но для них потребовался бы дорогой драйвер, либо много знаний как ими управлять без него (PID-регулятор). И да, они еще "дрожат" сами по себе в режиме удержания.

Плата управления. В качестве управляющей платформы было «взято готовое решение от опытных DIY мастеров», а именно плата уровня Arduino-совместимого контроллера (How to setup a stepper motor on arduino mega). Для задачи прототипирования этого достаточно. С ней можно задавать углы, писать простую логику движения, тестировать сценарии позиционирования и интегрировать управление с будущим ПО.

Как собирался стенд

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

Рисунок 9. Базовая рама на алюминиевом профиле (вид сверху)

Рисунок 9. Базовая рама на алюминиевом профиле (вид сверху)

Рисунок 10. Базовая рама на алюминиевом профиле (вид сбоку)

Рисунок 10. Базовая рама на алюминиевом профиле (вид сбоку)

Механика здесь простая: направляющие ролики идут по пазу профиля, усилие передаётся ремнями. Большую ось перемещают два параллельных мотора, а внутреннюю ось камеры два мотора с общим ремнём. Отдельный мотор отвечает за поворот самой камеры.

Когда основной каркас был собран и начал работать, я добавил ножки, чтобы поднять камеру над рабочей поверхностью. Камера съёмная и крепится к валу мотора через муфту для ШВП.

После этого система была подключена к управляющей плате и блоку питания. Моторы через драйверы шаговых двигателей на плате управляются с Arduino (калибровка системы, линейное перемещение по осям XY и круговое вращение камеры).

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

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

Управляющая часть отвечала за перемещение/вращение камеры над рабочим полем и за передачу обратной связи в ПО (получение текущих координат) по USB-соединению.

Отдельной задачей было определить, как часто двигать камеру, на сколько градусов/шагов, и когда делать снимок. Это уже не просто механика, а часть исследовательской постановки, где движение камеры влияет на качество данных, а качество данных влияет на качество распознавания дефектов.

Что дало это на практике

Рисунок 11. Реализация системы

Рисунок 11. Реализация системы

Рисунок 12. Реализация системы (вид сбоку)

Рисунок 12. Реализация системы (вид сбоку)

Рисунок 13. Использованные камеры

Рисунок 13. Использованные камеры

Важно подчеркнуть, что этот стенд не является отдельной "игрушкой ради игрушки". Он напрямую связан с дипломной задачей.

Когда изучаешь дефекты печатных плат только по готовым изображениям, очень легко недооценить реальные ограничения:

  • как влияет угол обзора и увеличение;

  • необходимость дополнительного источника освещения в рабочей области направленный на объект, но при этом не создающий блики;

  • что происходит при малом смещении камеры;

  • как изменяется видимость дефекта в зависимости от масштаба;

  • насколько вообще реалистично то, что показала модель в ноутбуке.

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

Это особенно важно для задач промышленного зрения, потому что качество распознавания начинается не с нейросети, а с физического мира (механики, оптики и повторяемости съёмки).

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

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

Самый важный вывод, в DIY-проекте прототип почти никогда не получается "с первого раза", и это нормально. В инженерной задаче ценность не в отсутствии ошибок, а в том, как быстро ты их находишь и исправляешь.

Практические выводы

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

При попытке сравнивать кадры между собой появляется ещё одна проблема. Возникает "шум", который вообще не связан с дефектами, а вызван только нестабильностью съёмки.

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

По факту половина задачи здесь не про алгоритмы, а про то, как получить стабильный кадр.

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

На практике это быстро упирается в довольно приземлённые вещи (жёсткость конструкции, вес камеры и то, насколько шаговые двигатели вообще способны это всё удерживать без дрожания пропуска шагов). И вот тут начинается классическая инженерия, баланс между "хочу" и "работает стабильно".

Удивительно, но получилась не просто "железка ради железки". Стенд даёт вполне практичные вещи, например можно собирать свои изображения в контролируемых условиях, смотреть, как ведут себя алгоритмы на реальных данных, проверять влияние масштаба и позиции камеры, а не только гонять модель по датасету. И самое главное, появляется возможность автоматизировать сбор данных. Если есть, например, несколько одинаковых плат, можно один раз настроить сценарий съёмки и дальше прогнать их автоматически. Это сильно экономит время и даёт более стабильный датасет по сравнению с ручной съёмкой.

И вот тут хорошо видно разницу с типичными ML-проектами. Очень часто всё заканчивается на обучении модели, а дальше, как будто "магия произойдёт сама". В реальности же половина проблем живёт не в коде, а в том, как как получить данные.

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

Поэтому этот проект для меня не столько DIY, сколько небольшой НИОКР. Способ разобраться в задаче целиком, а не только в её "нейросетевой" части.

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

Отдельно стоит сказать про камеры. В процессе пришлось поработать с разными вариантами, от обычных веб-камер до более "серьёзных" решений. Быстро стало понятно, что дешёвые камеры вполне подходят для прототипа, но добавляют нестабильности (автофокус, плавающая резкость, скачущая экспозиция). С более профессиональными камерами возникает другая история. Они дают более предсказуемую картинку, но требуют аккуратной настройки (отдельные интерфейсы подключения, работа с потоками, настройка ПО). И тут появляются уже свои проблемы - камера не определяется, поток блокируется, картинка подвисает или ведёт себя нестабильно.

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

Итог

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

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

Этот проект для меня стал простым, но важным выводом, где любая задача в компьютерном зрении - это не только алгоритмы, но и "физика" процесса.

Когда разбираешь её целиком от механики до данных, то начинаешь видеть ограничения и возможности, которые не видны в ноутбуке.

И иногда для этого достаточно просто взять и собрать что-то руками.

Если вам нужен прототип, проверка ограничений, то два инженера с радостью воплотят вашу задумку в физический прототип.

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

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

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

Рисунок 14. Пример UI-интерфейса разработанного ПО

Рисунок 14. Пример UI-интерфейса разработанного ПО

Рисунок 15. Пример автоматизированного отчёта

Рисунок 15. Пример автоматизированного отчёта

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