engiAI

  • Требования
Windows 10/11 x64. Анализ CPU и GPU — версии RTX 50+.

⬇ engiAI.rar (900 МБ)

⬇ engiAI-ZONA-PARA.pdf (5.4 МБ)

⬇ engiAI-doc-new.pdf (11 МБ)

SICK IDS Camera Manager ⬇ ids-software-suite-win-4.96.1.zip (184 МБ)

SICK IDS Camera Manager - link 2

Регистрация

Сделать заявку на engiAI

EngiAI (engiAI Ethernet System) — десктопная программа технического зрения для промышленной инспекции и отбраковки продукции на конвейере. Написана на C# (.NET 9, WinForms), собирается в один self-contained AOT-исполняемый файл под Windows x64.

⬇ engiAI-doc-new.pdf (11 МБ)
  • Что делает
Захват с камер: промышленные Hikrobot (SDK), USB/DirectShow, IDS uEye, а также Android-камеры через OpenCV. Несколько камер одновременно.

ИИ-инспекция: нейросети YOLO (ONNX Runtime / GPU-CUDA или CPU) распознают объекты и дефекты в реальном времени.

ROI-зоны: настраиваемые области контроля с классами и правилами, именованные зоны, каталог.

Браковщик (Rejector): по результату ИИ выдаёт сигнал на дискретный выход (сброс брака), с настройкой распиновки и проверкой тестером.

Триггеры: съёмка кадра по внешнему сигналу (дискретные входы, энкодеры).

Обучение моделей: датасеты, синтетика (повороты/зеркало/яркость), обучение YOLO11 прямо из программы.

Хранилище: локальная база SQLite (rejectors.db) — модели, зоны, журнал срабатываний, состояние камер.

  • Лицензирование
Единая сборка: режим (проба / лицензия / запрет)

Без лицензии — пробный режим 20 минут; с лицензией — работа без ограничений.

Привязка к железу, контроль всех запущенных экземпляров.

engiAI Ethernet System
ЗОНА-ПАРА — визуальная инспекция печатных плат и сборок

Интерфейс программы engiAI доступен на русском языке: названия кнопок и полей в руководстве приведены так, как они отображаются в программе.

Суть инспекции — многозонность ЗОНА-ПАРА. На плате отмечаются зоны — каждая деталь, которую нужно проверять. Одна модель держит для каждой зоны свою пару классов «норма / аномалия» и решает только внутри пары. В примере руководства две зоны: конденсатор C30 и мост BR1; на реальной плате их могут быть сотни, метод тот же.
Синтетика — автоматическое смещение элемента с основания. Программа берёт деталь вместе с участком платы вокруг (линии, дорожки, цвет основания), уменьшает область до размера детали и сдвигает или поворачивает её. Брак для обучения делается в два нажатия, без единой дефектной платы.
Руководство пользователя: как подключить камеру, разметить зоны, зафиксировать область привязки, снять норму и аномалии, обучить модель, запустить инспекцию и связать её с браковщиком: звуковыми оповещениями, дискретными выходами камер SICK и HIKROBOT и TCP-посылками роботу или ПЛК.
Шаг 1Камера
Шаг 2Сетка зон
Шаг 3Норма и аномалии
Шаг 4Обучение
Шаг 5Инспекция
Шаг 6Выходы и TCP
Все снимки экрана сделаны с работающей программы: плата vtlift, USB-камера 3264×2448, модель model_4 на две зоны 256×256 (конденсатор C30 и мост BR1), обучена в оттенках серого. Программа работает с камерами HIKROBOT (GigE и USB3), SICK picoCam (uEye), USB/веб-камерами и IP-камерами по RTSP. Редакция 3 — сентябрь 2026.

Содержание

  1. 1. Почему engiAI и метод ЗОНА-ПАРА
  2. 1.1. Что даёт метод по сравнению с классификацией целого кадра
  3. 1.2. Скорость: ИИ смотрит только на нужные вырезки
  4. 1.3. Какую точность ожидать: считаем по своей камере
  5. 1.4. Быстрый старт: настройки подобраны, зоны и модель за несколько кликов
  6. 2. Интерфейс программы за одну минуту
  7. 3. Камеры: подключение и настройка
  8. 3.1. Какие камеры поддерживаются
  9. 3.2. Окно КАМЕРЫ: добавить, переподключить, удалить
  10. 3.3. Вкладка Camera для HIKROBOT и SICK
  11. 3.4. Вкладка Camera для USB/веб-камеры
  12. 3.5. Сохранённые настройки камеры (наборы)
  13. 3.6. Сеть GigE и переподключение
  14. 4. Модель ЗОНА-ПАРА: от сетки до обученной модели
  15. 4.1. Как устроен метод: одна модель, класс на каждую зону
  16. 4.2. Создать модель
  17. 4.3. Отметить зоны на плате
  18. 4.4. Зафиксировать оригинал: область привязки
  19. 4.5. Снимок по зонам: норма и её синтетика
  20. 4.6. Синтетика брака в два нажатия: элемент смещается вместе с основанием
  21. 4.7. Аномалии зон: окно настроек
  22. 4.8. Оригинал с зонами: бляшки припоя и редактор зоны
  23. 4.9. Обучение модели
  24. 5. Инспекция
  25. 5.1. Назначить модель и проверить зоны
  26. 5.2. Порог узнавания зоны
  27. 5.3. Живой конвейер: плата в любом положении
  28. 5.4. По какому сигналу анализировать
  29. 5.5. Жёлтые зоны: выключить зону кликом
  30. 5.6. Что видно на экране и в консоли
  31. 6. Триггеры: внешний датчик на вход камеры
  32. 7. Выходы: браковщик, дискретные выходы камер и TCP
  33. 7.1. Справочник ВЫХОДЫ: контакты и проверка тестером
  34. 7.2. Окно OUTPUT: правило на зону
  35. 7.3. TCP-посылка роботу или ПЛК
  36. 7.4. Дискретный выход камеры
  37. 7.5. Звуковое оповещение: свой звук на каждую зону
  38. 7.6. Журнал срабатываний и база данных
  39. 8. Другие режимы и задачи
  40. 9. Настройки, консоль, требования и лицензия
  41. 10. Короткий чек-лист и поиск неисправностей

Как пользоваться руководством. Раздел 1 объясняет, зачем нужен метод и какой результат ожидать. Разделы 3–5 — путь от пустой программы до работающей инспекции, выполняйте их по порядку. Разделы 6–7 — подключение датчиков, выходов и TCP. Разделы 8–10 — остальные возможности, настройки и чек-лист.

1. Почему engiAI и метод ЗОНА-ПАРА

engiAI Ethernet System — программа визуальной инспекции для производственной линии. Она берёт кадр с промышленной или обычной камеры, режет его на зоны, проверяет каждую зону обученной нейросетью и превращает результат в действие: сигнал на дискретный выход камеры, TCP-посылку роботу или ПЛК, запись в журнал. Метод ЗОНА-ПАРА создан для изделий, у которых «правильно» в каждом месте своё: печатные платы, сборки, наборы деталей в ложементе, упаковка с раскладкой.

1 модель
на все зоны платы, вместо сотни отдельных моделей
2 зоны
в примере руководства: конденсатор C30 и мост BR1. На плате их может быть сотни
≈5 px
сдвиг элемента, на который настроена граница «норма / брак»
2 нажатия
от живого кадра до нормы и синтетического брака для обучения

1.1. Что даёт метод по сравнению с классификацией целого кадра

Обычный подход — одна модель с двумя классами «normal / anomaly» на весь кадр или на все зоны сразу. На плате он не работает: пустое место под мостом BR1 в зоне 2 — брак, а такое же пустое место в другом углу платы — норма. Одна пара классов этого выразить не может. Другая крайность — отдельная модель на каждую деталь — это десятки обучений и десятки файлов в памяти.

ЗОНА-ПАРА решает это так: модель одна, а классов столько, сколько зон. Зона — прямоугольник вокруг одной детали. Класс — папка с картинками, на которых учится сеть. У каждой зоны своя пара: zone_001 (норма зоны 1, в примере — конденсатор C30) и zone_001_anomaly (брак зоны 1); zone_002 и zone_002_anomaly — мост BR1. При проверке зоны 1 программа смотрит только на её пару, ответы про зону 2 не участвуют. Классы аномалий необязательны: брак меняет вид зоны, и уверенность в «норме» падает сама; но с синтетикой (раздел 4.6) они делаются в одно нажатие и заметно повышают надёжность.

Живой кадр платы из примера: две зоны — мост BR1 сверху справа и конденсатор C30 слева внизу, обе зелёные с подписью «normal». Голубые линии — границы области привязки, голубые точки — опорные точки, по которым плата найдена в кадре.
Живой кадр платы из примера: две зоны — мост BR1 сверху справа и конденсатор C30 слева внизу, обе зелёные с подписью «normal». Голубые линии — границы области привязки, голубые точки — опорные точки, по которым плата найдена в кадре.
Решение внутри парыПри проверке зоны 17 из выходов сети берутся только два: «норма зоны 17» и «аномалия зоны 17». Остальные сотни классов в решении не участвуют, поэтому похожие соседние зоны не портят вердикт.
Чужая плата не пройдёт как нормаЕсли пара классов зоны набирает меньше 10 % выхода сети, зона «не узнана»: это другая плата или сдвинутая сетка. Такая зона считается браком, а не «нормой с высокой вероятностью».
Дефект соразмерен зонеРазмер и положение синтетических дефектов задаются в долях от размера зоны. Сдвиг элемента на полмиллиметра на целом кадре 8 Мп неразличим, а внутри зоны 128×128 px это 5–6 пикселей — заметная величина.
Полное разрешениеВырезка зоны 108–137 px подаётся в сеть 128×128 почти без масштабирования. Целый кадр пришлось бы сжимать в те же 128 px, теряя детали в десятки раз.
Целевая граница «норма / брак»Синтетика нормы даёт разброс 0–2 px, синтетика брака — сдвиг от 5 px. Сеть учится именно этой границе, а не случайным различиям освещения.
Адресуемый результатКаждая зона имеет устойчивый адрес (модель, таблица, ячейка) и имя. На любую зону можно повесить своё правило браковщика: звуковое оповещение, TCP-посылку с номером зоны или дискретный выход камеры.
Плата в любом положенииОператор обводит на кадре область привязки — участок платы с деталями. По её опорным точкам каждый кадр совмещается с оригиналом, и зоны инспекции находятся на новой плате, даже если её положили со сдвигом или поворотом, в том числе на 180° (раздел 4.4).
Брак из самой платыСинтетический дефект — не нарисованное пятно, а сдвинутый или повёрнутый элемент вместе с куском основания. Модель учится связи «элемент ↔ плата», а не цвету пятна. Делается в два нажатия (раздел 4.6).
Аномалии докладываются постепенноКлассы брака добавляются только там, где брак реально встречается: перемычки припоя, отсутствующие элементы, сдвиг, царапины. Модель дообучается, а сетка остаётся прежней.

1.2. Скорость: ИИ смотрит только на нужные вырезки

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

  • Темп анализа задаётся по времени. Ползунок «Анализов в секунду (AI)» на вкладке Camera означает ровно N анализов в секунду, а не «каждый N-й кадр». Потолок — частота камеры и время инференса.
  • GPU по умолчанию. Инференс идёт через ONNX Runtime с CUDA; если видеокарты NVIDIA нет, программа сама переключается на процессор и пишет об этом в статусе (GPU (CUDA) или CPU).
  • Буферы без мусора. Память под вырезки выделяется один раз на поток и переиспользуется; время анализа не скачет от кадра к кадру.
  • Модель под задачу. Для ЗОНА-ПАРА программа сама ставит размер входа 128 px и сеть YOLO11 размера «s»: вырезка зоны почти не масштабируется, а сети хватает ёмкости на сотни пар классов.
  • Живой конвейер экономит кадры. Кадр уходит в очередь ИИ не чаще периода поиска платы; плата ищется и выравнивается один раз, и только затем режутся зоны.
  • Показ не мешает анализу. Плитка перерисовывается не чаще 25 раз в секунду и только по новому кадру камеры, картинка уменьшается до размера плитки до вывода на экран, а журнал пишется в файл фоновым потоком. Интерфейс остаётся отзывчивым при 8-мегапиксельном кадре и сотнях зон.

В строке состояния над видео видны реальные цифры: fps и миллисекунды последнего анализа, а также Eff — сколько анализов фактически прошло за секунду.

1.3. Какую точность ожидать: считаем по своей камере

Программа не обещает «0,5 мм» безотносительно камеры и объектива. Чувствительность к смещению определяется тем, сколько пикселей приходится на миллиметр изделия, и той границей, которой обучена модель. Считается это в две строки:

px/мм = ширина кадра в пикселях ÷ ширина поля зрения в мм
минимальный заметный сдвиг ≈ 5 px ÷ (px/мм)

Число 5 px — нижняя граница синтетического сдвига в рекомендованных настройках аномалий (разброс нормы при этом 0–2 px). Настройки по умолчанию рассчитаны на 11 px/мм: при таком масштабе 0,5 мм — это 5–6 px, что и является целью, согласованной при разработке. Подставьте свои значения:

Камера (ширина кадра)Поле зрения 100 мм200 мм300 мм400 мм
3264 px (USB 8 Мп, как на снимках)0,03 мм/px → сдвиг ≈ 0,15 мм0,06 → ≈ 0,3 мм0,09 → ≈ 0,45 мм0,12 → ≈ 0,6 мм
2448 px (HIKROBOT 5 Мп)0,04 → ≈ 0,2 мм0,08 → ≈ 0,4 мм0,12 → ≈ 0,6 мм0,16 → ≈ 0,8 мм
1920 px (SICK picoCam, HIKROBOT 2 Мп)0,05 → ≈ 0,25 мм0,10 → ≈ 0,5 мм0,16 → ≈ 0,8 мм0,21 → ≈ 1,0 мм
Важно. Это оценка снизу для сдвига элемента при резком кадре и стабильном освещении. Реальную границу проверяйте кнопкой «ЗОНА-ПАРА: зоны ↔ модель» и порогом узнавания (раздел 5.2): у каждой зоны свои вырезки, а значит и своя уверенность. Чем меньше поле зрения и чем больше пикселей у камеры, тем мельче дефект, который модель различит.

1.4. Быстрый старт: настройки подобраны, зоны и модель за несколько кликов

Метод рассчитан на то, чтобы технолог без опыта в машинном обучении получил рабочую модель за одну смену. Всё, что можно было подобрать заранее, уже подобрано и хранится в базе программы:

  • Зоны за минуту. В редакторе ROI протяните рамку вокруг детали и укажите размер зоны (в примере 256 px). Если деталей много и они стоят ровно, протяните рамку по всей плате — программа сама посчитает строки и столбцы сетки.
  • Синтетика нормы и брака преднастроена. Кнопки «По умолчанию», «Смещение элементов» и «Цвет и краска» переключают готовые профили. Число файлов, кадров с камеры и ожидаемое время показываются до нажатия «Снять».
  • Параметры обучения выставляются сами. После первого снимка по зонам программа ставит Image Size 128, Model Size s, Epochs 50, Batch 64, а при обучении отключает аугментации, которые конфликтуют с классами аномалий.
  • Камера настраивается кнопкой. «Авто-настройка для ИИ (по кадру)» подбирает выдержку, усиление, гамму и баланс белого; для USB-камер есть «Автоподбор под формы» и «Зафиксировать параметры».
  • Наборы настроек камеры. Подобранные параметры сохраняются под именем и переключаются из списка, камера принимает их сразу и запоминает в своей памяти.
  • Один ONNX-файл на выходе. Обученная модель экспортируется автоматически и сразу назначается на инспекцию, дополнительных шагов нет.

Путь целиком: подключить камеру → создать модель → отметить зоны → зафиксировать область привязки → «Снимок по зонам» на нескольких исправных платах → «Аномалии зон» → TRAIN AI MODEL → вкладка Inspect. Дальше остаётся повесить на зоны звук, выходы и TCP. Что нужно для старта: компьютер с Windows 10/11 (для быстрой инспекции — видеокарта NVIDIA), камера, одна исправная плата и один раз интернет для установки среды обучения. Бракованные платы не нужны.

2. Интерфейс программы за одну минуту

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

Главное окно: слева живой кадр платы с двумя зонами (обе зелёные — «normal»), справа вкладка Inspect с моделью model_4\best.onnx. Живой конвейер включён, индикатор «норма · точек 112».
Главное окно: слева живой кадр платы с двумя зонами (обе зелёные — «normal»), справа вкладка Inspect с моделью model_4\best.onnx. Живой конвейер включён, индикатор «норма · точек 112».

Кнопки над видео

КнопкаЧто открывает
СКРЫТЬ ВИДЕОУбирает картинку с экрана. Анализ продолжается, экономится только отрисовка.
ВЫХОДЫСправочное окно: контакты дискретных выходов камер HIKROBOT и SICK, проверка тестером, подключение нагрузки (раздел 7.1).
КАМЕРЫОкно «Настройки подключённых камер»: добавление, переподключение, удаление камер и просмотр всех параметров, считанных с железа (раздел 3.2).
ТРИГГЕРЫПодключение внешнего датчика к дискретному входу камеры со схемой и распиновкой (раздел 6).
ОБЩИЕ МОДЕЛИИменованные наборы «камера → модель», назначаемые всему стенду одним выбором (раздел 8).
Раскладка (столбцы)Сколько плиток камер показывать в ряд; «■» — одиночный режим (выбранная камера крупно), «Авто» — по корню из числа камер, «⛶» — камеры на весь монитор (выход Esc).
Показывать ROI зоныРисовать ли сетку зон поверх видео.

Вкладки справа

ВкладкаНазначение
CameraПараметры выбранной камеры: выдержка, усиление, цвет, разрешение, авто-настройка для ИИ, наборы сохранённых настроек, темп анализа. Порога ИИ здесь больше нет — он только на вкладке Inspect.
OUTPUTБраковщик: правила на зонах — TCP-посылки роботу/ПЛК, дискретные выходы камеры и звуковые оповещения, журнал срабатываний, база данных.
AI ModelСоздание модели: папка, классы, сетка зон, снимок по зонам, аномалии зон, оригинал платы, настройки и запуск обучения.
InspectРабочая вкладка: какая модель инспектирует, проверка зон и порог, живой конвейер, по какому сигналу снимать кадр, слоты много-модельной инспекции.
SettingsЯзык интерфейса (14 языков), покупка лицензии, сохранение и загрузка настроек, запись видео.
ConsoleЖурнал событий: подключение камер, ход обучения, срабатывания браковщика, предупреждения. На экране держится 800–1000 последних строк, всё целиком пишется в файлы logs\engiai-*.log.

Строка состояния

Над кнопками показано состояние активной камеры: LIVE (Android): 3264×2448 [HD USB Camera] — тип, разрешение и имя; AI: WAITING или AI: GPU (CUDA) — на чём считает модель и сколько миллисекунд занял последний анализ; Net: всего … активная … Мбит/с — нагрузка на сеть от GigE-камер (зелёный до 40 % линка, оранжевый до 70 %, дальше красный). Полоса Exp Load показывает, какую долю кадрового интервала занимает выдержка: если она упёрлась вправо, камера не удержит заявленную частоту.

Плитка каждой камеры имеет свою шапку с именем, статусом LIVE | AI:ON и кнопкой переподключения. Правый клик по кадру открывает меню зоны, правая кнопка с перетаскиванием — панорама по увеличенному кадру.

3. Камеры: подключение и настройка

3.1. Какие камеры поддерживаются

ТипКак подключаетсяЧто настраивается из программы
HIKROBOT MV-CS
(GigE, USB3)
Нативный MVS SDK. Открывается строго по серийному номеру, порядок перечисления не важен.Выдержка от 6 мкс, усиление в дБ, FPS, разрешение (AOI), уровень чёрного 0…4095, все узлы GenICam (авто-режимы, гамма, резкость, баланс белого R/G/B, цифровой сдвиг, переворот, GigE-пакеты). Параметры пишутся в UserSet1 самой камеры. Дискретный вход Line 0, выход Line 1, GPIO Line 2.
SICK picoCam
(IDS uEye, GigE)
Драйвер uEye. Камера должна быть видна в IDS Camera Manager со статусом «настроена правильно». Серийник сверяется с камерой, потому что DeviceID у uEye меняется при каждом запуске.Выдержка, усиление 0…100, FPS, разрешение, уровень чёрного 0…255, pixel clock, gain boost, аппаратные усиления каналов R/G/B, аппаратная гамма, раскладка Байера. Параметры пишутся в память камеры. Вход триггера на оптопаре, выход Flash (150 мА).
USB / веб-камера
(в списке — Android)
DirectShow через OpenCV, различаются по moniker, поэтому две одинаковые камеры не путаются.Разрешение до 8K, FPS, все свойства драйвера: яркость, контраст, насыщенность, оттенок, резкость, гамма, усиление, выдержка (с авто), фокус (с авто), баланс белого (с авто), компенсация засветки и др. Дискретных входов и выходов нет, доступен только TCP.
IP-камера RTSPСсылка вида rtsp://admin:пароль@192.168.1.64:554/…, добавляется вручную.Выдержка, усиление, разрешение и FPS задаются в веб-интерфейсе самой камеры. В программе — зоны, модель и TCP.

Жёсткого ограничения на число камер нет: плитки раскладываются сеткой любым числом; на реальных стендах работали восемь и девять камер одновременно. У каждой камеры свои модели, свои зоны, свой порог и свой темп анализа.

3.2. Окно КАМЕРЫ: добавить, переподключить, удалить

1
Нажмите КАМЕРЫ над видео. Откроется окно «НАСТРОЙКИ ПОДКЛЮЧЁННЫХ КАМЕР» на весь экран (закрыть — Esc).
2
Нажмите + Добавить камеры. Программа опросит сеть и USB и покажет всё найденное одним списком: Hikrobot … SN: … IP: …, SICK … SN: … DeviceID: …, Android …. SICK-камеры опрашиваются до 4 секунд, потому что GigE-устройство появляется в драйвере не мгновенно. Занятая или неправильно адресованная SICK помечается знаком ⚠ с причиной.
3
Отметьте нужные камеры и нажмите Добавить. IP-камеру добавляйте кнопкой + RTSP-камера по ссылке…. Пока камеры подключаются, показывается заставка с кнопкой «Пропустить камеру».
4
Камера появится в списке строкой имя | тип | серийник | LIVE или OFFLINE | AI:ON | Disp:ON, а её видео — в левой части главного окна.

Галочки под списком действуют на выбранную камеру: Камера включена (иначе она отключается от устройства и пропадает с экрана), Показывать видео/зоны (только отрисовка, анализ работает всегда), AI включён для выбранной камеры. Кнопка Переподключить делает полное отключение и подключение с перезапуском потока ИИ и перезагрузкой моделей.

Правая часть окна показывает все параметры камеры, считанные с железа при подключении, с группами и единицами измерения: «Чьи параметры показать», Перечитать с камеры, Скопировать в буфер. Это только просмотр: изменить параметры можно на вкладке Camera.

Важно. Камера HIKROBOT по GigE держит монопольное подключение. После аварийного закрытия программы она остаётся занятой до истечения heartbeat; программа ждёт до 25 секунд (10 попыток) и сообщает «камера занята другим процессом». Для SICK при неправильном IP-адресе программа один раз пытается починить его сама, если он не из подсети адаптера.

3.3. Вкладка Camera для HIKROBOT и SICK

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

1
Внизу вкладки задайте Ширина (W) и Высота (H) кадра (или выберите пресет из списка, в нём только размеры, которые поддерживает эта камера) и нажмите ПРИМЕНИТЬ РАЗРЕШЕНИЕ. Обычно берут полный кадр камеры. Размер округляется вниз по шагу AOI камеры.
2
Нажмите Авто-настройка для ИИ (по кадру). Программа подбирает выдержку (приоритет) и усиление (не больше 40) так, чтобы 99,5-й процентиль яркости попал в 220…248 без пересвета, затем ставит гамму 1,50, насыщенность 115 %, контраст 105 % и делает авто-баланс белого. Галочка «авто» рядом включает постоянный режим: раз в 3 секунды проверка и подстройка, если свет изменился.
3
При необходимости доведите вручную: Exposure (ползунок в микросекундах, подпись в мс, до 1 с), Gain, FPS, Black Level. Для SICK дополнительно Pixel clock (определяет потолок FPS и минимальную выдержку), Gain boost, Аппаратная гамма, WB Red / Green / Blue.
4
Нажмите Сохранить параметры: файл camera_params\<SN>.ini и запись в память камеры — UserSet1 у HIKROBOT (с назначением набором по умолчанию), EEPROM у SICK. Результат показывается на самой кнопке («✔ Сохранено»). Для HIKROBOT есть галочка Автосохранение в камеру (UserSet1) через 5 с после изменения.

Блок «Hikrobot: параметры камеры (GenICam)»

Показывается только то, что камера отдаёт. Строки: Авто-экспозиция (Off / Once / Continuous), Авто-усиление, Гамма и режим гаммы, Резкость, Оттенок, Насыщенность, Авто-баланс белого, Баланс белого по каналам, Цифровой сдвиг, Уровень чёрного включён, Ограничение FPS включено, Переворот по горизонтали и вертикали, GigE: размер пакета, GigE: межпакетная задержка, GigE: лимит полосы, Тестовое изображение. Кнопка Перечитать параметры с камеры перестраивает таблицу.

Блок «ЦВЕТ ИЗОБРАЖЕНИЯ»

Раскладка Байера (Авто / BGGR / RGGB / GRBG / GBRG), Saturation 0…200 %, Gamma 0,30…3,00, Contrast 50…200 %, кнопка сброса. Программная обработка применяется ко всем потребителям кадра: показ, запись, инференс и снимки для обучения, поэтому картинка при обучении и при инспекции одинакова. Для HIKROBOT раскладка берётся из формата пикселя камеры, для цветных SICK — с сенсора и уточняется по первому кадру.

ПараметрЧто делаетНа что влияет
Анализов в секунду (AI)верхний предел темпа инспекции, 1…200меньше — ниже нагрузка на видеокарту; не зависит от подключения камеры
Порог ИИна вкладке Camera не задаётсяпорог узнавания зоны — только на вкладке Inspect (раздел 5.2), один на камеру
Exposureвремя экспозициикороче — меньше смаз движущихся изделий; ноль недопустим
Gain / Gain boostусиление сигнала матрицыподнимает яркость, но добавляет шум
Pixel clock (SICK)тактовая частота сенсораменяет диапазоны FPS и выдержки, они перечитываются
FPSчастота кадров в свободном режимев режиме триггера не используется
Ширина / Высотаразмер кадра (AOI)меньше кадр — выше частота и меньше трафик
Важно. Набирайте снимки для обучения в тех же условиях, в которых будет работать линия: то же освещение, та же скорость, то же положение камеры. После смены настроек картинки программа напоминает в консоли, что модель нужно дообучить на новых кадрах.

3.4. Вкладка Camera для USB/веб-камеры

Для USB-камер вкладка показывает блок «USB-камера: разрешение, FPS и свойства». Свойства драйвера, которые камера не отдаёт, не показываются; границы полей заданы программой, потому что DirectShow диапазонов не сообщает.

1
Разрешение и Применить. Кнопка Проверить перебирает стандартные размеры от VGA до 8K и оставляет в списке только принятые камерой. Строка «Формат камеры» показывает фактический размер и FPS.
2
Дайте авто-экспозиции, автофокусу и авто-ББ настроиться, затем нажмите Зафиксировать параметры (выключить авто, сохранить как есть): авто выключается, программа сама подбирает ручную выдержку до той же яркости (драйвер при включённом авто отдаёт не подобранную, а последнюю ручную), значения и формат сохраняются в базу и выставляются при каждом следующем подключении этой камеры.
3
Ряд Под ИИ: Автоподбор под формы (20–60 с, перебор выдержки и контраста по живым кадрам, критерий — чёткость контуров без пересвета), Формы, без цвета, Формы, мягко, Вернуть, Типовые.
4
Значения в полях уходят в камеру сразу, без Enter, и тут же пишутся в базу. Кнопка Перечитать свойства с камеры показывает, что камера реально приняла.
Совет. Для ИИ цвет лучше убирать не насыщенностью камеры, а общей галочкой Обучать в оттенках серого (общая настройка модели) на вкладке Camera (на вкладке AI Model она же называется «Обучать в сером»): тогда серыми будут и снимки для обучения, и инспекция, а камера продолжит отдавать цвет для оператора. Модель из примера обучена в сером.

3.5. Сохранённые настройки камеры (наборы)

Блок «Сохранённые настройки камеры» показывается для USB, SICK и HIKROBOT. Подобрав параметры под изделие, сохраните их под именем: под другую плату или другое освещение достаточно выбрать набор из списка.

  • Сохранить как… — читает текущие значения с камеры и спрашивает имя набора. Если имя занято, предлагает перезаписать.
  • Выбор набора в списке сразу пишет параметры в камеру и закрепляет их: для USB — в базу, для SICK и HIKROBOT — в файл параметров и в память камеры (UserSet1 / EEPROM). Затем панель перечитывает значения с железа и показывает, сколько параметров принято, а сколько отклонено.
  • Пересохранить перезаписывает выбранный набор текущими значениями, Переименовать и Удалить действуют только на запись в базе, параметры в камере не меняются.

Что входит в набор: у USB — разрешение, FPS, свойства драйвера и авто-режимы; у SICK — усиление, выдержка, FPS, уровень чёрного, pixel clock, gain boost, баланс белого R/G/B, аппаратная гамма и программный цвет; у HIKROBOT — усиление, выдержка, FPS, уровень чёрного и все узлы GenICam. Размер кадра промышленных камер в набор не входит: его смена перезапускает захват. Наборы общие для всех камер одного типа, поэтому на стенде из одинаковых камер один набор ставится на каждую.

3.6. Сеть GigE и переподключение

  • Размер GigE-пакета HIKROBOT выставляется автоматически оптимальным при открытии; вручную его можно поправить в блоке GenICam. Jumbo-кадры 8164–9000 снижают нагрузку, при рвущихся кадрах ставьте 1500 и увеличивайте межпакетную задержку.
  • Строка Net считает нагрузку от каждой камеры по её собственным данным (размер полезной нагрузки × частота) и сверяет с фактическим входящим трафиком сетевых карт. Заметное расхождение означает потерю кадров или посторонний трафик. Виртуальные адаптеры и NDIS-фильтры (GigEVision, uEye, Npcap) из подсчёта исключены.
  • Если камера видна, а поток не идёт, нажмите Переподключить (в окне КАМЕРЫ или на плитке). Обычно причина — пропускная способность сети или USB.
  • SICK picoCam при закрытии дескриптора теряет настройки; если набора в самой камере нет, программа применяет файл параметров и предлагает нажать «Сохранить параметры», чтобы записать их в камеру.

4. Модель ЗОНА-ПАРА: от сетки до обученной модели

4.1. Как устроен метод: одна модель, класс на каждую зону

Модель ЗОНА-ПАРА — это обычная классификационная сеть YOLO11, у которой классов столько, сколько зон, плюс необязательные классы аномалий. Класс — это папка внутри train и val. Все папки программа формирует сама; вручную создавать ничего не нужно. Так выглядит папка модели из примера после обучения:

Папка model_4: train и val — снимки, data.json — зоны, live_template — оригинал платы, board.json — порог, best.onnx — обученная сеть.
Папка model_4: train и val — снимки, data.json — зоны, live_template — оригинал платы, board.json — порог, best.onnx — обученная сеть.
model_4\ train\ снимки для обучения zone_001\ норма зоны 1 (C30): real_… с камеры, syn_… синтетика zone_001_anomaly\ брак зоны 1: syn_…_combo1_d, _rotate1 … zone_002\ норма зоны 2 (BR1) zone_002_anomaly\ брак зоны 2 val\ проверочная выборка: те же четыре папки, наполняются сами data.json зоны: таблицы, координаты, размер, цвет, включена/выключена; классы; слоты live_template.png / .txt оригинал платы: кадр, область привязки, красные (исключённые) зоны live_template_zones.png оригинал с нарисованными зонами и номерами board.json порог узнавания зоны ({ "threshold": 0.50 }) train_gray.txt признак «набор в оттенках серого» best.onnx обученная модель — её и назначают на инспекцию runs\ diag\ *.cache служебное: ход обучения, снимки для разбора, кэш обучения
train: по две папки на каждую зону — норма и аномалия.
train: по две папки на каждую зону — норма и аномалия.
val: та же структура, программа наполняет её сама при съёмке.
val: та же структура, программа наполняет её сама при съёмке.

Файлы real_…jpg — настоящие вырезки с камеры (пишутся и в train, и в val), syn_…jpg — синтетика, edit_…jpg — снимки из редактора зоны. В примере после съёмки нескольких плат: zone_001 — 502 файла в train и 111 в val, zone_001_anomaly — 680 и 144, zone_002 — 813 и 181, zone_002_anomaly — 340 и 60.

Одно место хранения. Вся разметка модели — зоны инспекции, область привязки, классы и слоты — лежит только в папке модели: data.json и live_template.txt. В базе программы зон больше нет, поэтому редактор ROI на вкладке AI Model и на вкладке Inspect показывают одни и те же зоны, а папку модели можно скопировать на другой компьютер целиком, ничего не теряя. Старые модели переносятся в файл автоматически при первом открытии.

Программа распознаёт модель как «плату» автоматически, по наличию классов вида zone_NNN. Номер класса — сквозной номер зоны в сетке (1…N). Отсюда главное правило метода:

Важно. Зоны — часть модели. После съёмки классов их нельзя менять (добавлять, удалять, переставлять таблицы): номера зон разойдутся с классами, и такие зоны получат метку NO_ZONE_CLASS. Если зоны нужно изменить, создайте новую модель.

4.2. Создать модель

1
Откройте вкладку AI Model и нажмите Создать новую ИИ модель.
2
Укажите папку-родитель и имя модели (программа предлагает свободное model_N). Список классов по умолчанию содержит normal и anomaly; для ЗОНА-ПАРА они не нужны — классы зон создадутся сами при первом снимке по зонам. Можете удалить их или оставить пустыми: перед обучением программа предложит убрать пустые классы.
3
Нажмите Создать модель. На диске появятся папки train и val, модель откроется для редактирования (на инспекцию она не встаёт). Если модель уже есть — вместо этого Выбрать папку модели.

4.3. Отметить зоны на плате

1
Положите под камеру исправную плату ровно так, как она будет лежать на линии. Нажмите ROI → добавить в класс (модель обучения).
2
В диалоге «Сохранение ROI в класс» выберите любой класс (для разметки это не важно) или впишите новое имя и нажмите OK + открыть ROI. Позже здесь же будут видны все классы зон, сгруппированные по шаблону zone_###: щелчок по группе выделяет её, второй щелчок снимает выделение; кнопка Удалить группу убирает всю группу вместе с изображениями.
3
Откроется окно «Выделение ROI». Протяните левой кнопкой рамку вокруг детали. Появится поле Размер зоны, px: впишите размер (притягивается к кратному 32, например 256) и нажмите Enter — рамка станет ровным квадратом с подписью размера. Повторите для каждой детали, которую нужно проверять. В примере две зоны: вокруг C30 и вокруг BR1.
4
Если деталей много и они стоят ровно, удобнее сетка: протяните рамку по всей плате и впишите размер зоны — подсказка покажет, сколько строк и столбцов получилось. Либо задайте в блоке Сетка зон строки, столбцы, ширину и высоту ячейки и нажмите Создать сетку. Сетку можно перетащить мышью точно на изделие.
5
Правая панель показывает каждую таблицу зон с размером и галочкой «включена»; выключенная зона не даёт класса, скрытая таблица целиком не участвует в инспекции. Кнопки Все зоны ✓ / ✗, Цвет, Удалить, Удалить ВСЕ зоны. Закройте окно клавишей Enter — зоны сохранятся в data.json и появятся на видео жёлтым.
Результат разметки на вкладке AI Model: две жёлтые зоны на живом кадре — BR1 сверху справа и C30 слева внизу. Справа — кнопки модели ЗОНА-ПАРА, галочка «Зафиксировать зоны к изделию по маркерам» и настройки обучения.
Результат разметки на вкладке AI Model: две жёлтые зоны на живом кадре — BR1 сверху справа и C30 слева внизу. Справа — кнопки модели ЗОНА-ПАРА, галочка «Зафиксировать зоны к изделию по маркерам» и настройки обучения.
Совет. Деталь должна занимать заметную часть зоны, а вокруг должно остаться немного платы: дорожки, надписи, площадки. Именно это «основание» потом используется в синтетике (раздел 4.6). Для плат с компонентами 0603–1206 при 11 px/мм хорошо работает 128 px; для конденсаторов, мостов и разъёмов — 192–256 px, как в примере. Размер входа сети (Image Size) потом ставится примерно равным размеру зоны.

Красные зоны: исключить зону из синтетики одним щелчком

На вкладке AI Model щёлкните левой кнопкой по уже созданной зоне прямо на видео: зона станет красной и не будет участвовать в снимке по зонам и в аномалиях. Повторный щелчок возвращает её. Счётчики файлов в окнах синтетики пересчитываются сразу, а надпись «выкл N» над кадром показывает, сколько зон выключено. Список красных зон хранится по камере и модели; на вкладке Inspect эта же зона остаётся обычной (там свои, жёлтые зоны — раздел 5.5).

4.4. Зафиксировать оригинал: область привязки

Зоны инспекции размечены по одному положению платы. Чтобы на линии можно было подсунуть другую плату со сдвигом и поворотом, программа запоминает оригинал: живой кадр и область привязки — участок платы с деталями, по которому изделие ищется в каждом новом кадре. Найдя область, программа переносит на новую плату зоны инспекции. Так работает съёмка, синтетика и инспекция.

Два разных прямоугольника. Зоны инспекции — это то, что проверяет модель (зелёные). Область привязки — это маркер, по которому ищется плата (оранжевая рамка). Опорные точки никогда не ставятся внутри зон инспекции: если бы плата искалась по самому конденсатору, сдвинутый конденсатор «утащил» бы за собой и зону, и брак стал бы невидим. Поэтому в область привязки берите шелкографию, отверстия, дорожки, микросхемы рядом, а стол и конвейер — не берите.
1
На вкладке AI Model поставьте галочку Зафиксировать зоны к изделию по маркерам и задайте период поиска, мс (по умолчанию 100). Положите плату под камеру и нажмите Зафиксировать оригинал.
2
Откроется окно «Область привязки: по чему искать плату» с живым кадром и зелёными зонами инспекции. Протяните левой кнопкой рамку по участку платы с деталями. Справа сразу видно «Опорных точек: N · Совмещение: жёсткое / перспектива»: точек должно быть сотни, при «мало — возьмите область больше» расширьте рамку. Новая рамка заменяет старую, правая кнопка удаляет её.
3
Нажмите ✔ Искать зоны по выделенной области. Вторая кнопка ✔ Искать зоны по зонам инспекции берёт за область сами зоны с полем — только когда рядом ничего нет. Если галочка Спрашивать область привязки каждый раз снята, следующая фиксация повторит прежнюю область без окна.
4
Программа пишет «Оригинал зафиксирован. Зон N, привязок 1, точек K» и сохраняет live_template.png и live_template.txt (кадр, область, красные зоны). Галочка Показывать зоны съёмки на кадре рисует найденные зоны на видео, а опорные точки, по которым сошлась плата, показываются голубыми точками — по ним видно, за что программа «держится».
Окно области привязки: оранжевая рамка — участок платы с деталями (3000 опорных точек), зелёные — зоны инспекции C30 и BR1, которые в рамку не входят.
Окно области привязки: оранжевая рамка — участок платы с деталями (3000 опорных точек), зелёные — зоны инспекции C30 и BR1, которые в рамку не входят.
Живой кадр после фиксации: зоны найдены на своих деталях и подписаны «normal», голубые линии — границы области привязки, голубые точки — совпавшие опорные точки на деталях платы (в зоны они не попадают).
Живой кадр после фиксации: зоны найдены на своих деталях и подписаны «normal», голубые линии — границы области привязки, голубые точки — совпавшие опорные точки на деталях платы (в зоны они не попадают).
Модель совмещенияКогда выбирать
Авто (рекомендуется)Плата совмещается жёстко (сдвиг, поворот, масштаб); перспектива подключается только если она сходится заметно лучше. Точность на небольшой области привязки — 1–2 px.
ЖёсткаяКамера смотрит строго сверху, плата лежит плоско. Самый устойчивый вариант, если область привязки маленькая.
ПерспективаКамера под углом или плата наклонена. Нужна крупная область с точками по всей ширине, иначе гомография «косит».

Кнопка Оригинал с зонами открывает сохранённый оригинал с сеткой и номерами зон (раздел 4.8). Найденная плата проверяется на здравый смысл: площадь от 0,5 до 2 площадей оригинала, выпуклый четырёхугольник, опорные точки должны занимать не меньше четверти области по каждой оси — иначе результат отбрасывается, и в консоли пишется «плата не найдена».

Важно. Если раньше зоны «съезжали» при малом числе зон на кадре — причина в том, что плата искалась по самим зонам. Зафиксируйте оригинал заново с областью привязки по деталям платы: на плате из этого руководства число найденных зон нормы выросло с 46–51 до 106–112 из 134.

4.5. Снимок по зонам: норма и её синтетика

Кнопка ЗОНА-ПАРА: снимок по зонам делает главное: режет живой кадр на зоны, кладёт вырезку каждой зоны в её класс zone_NNN и добавляет синтетику нормы. Синтетика нормы — это разброс съёмки, а не дефект: плату положили чуть не так, свет чуть другой, сенсор шумит.

Окно «ЗОНА-ПАРА: снимок по зонам»: число вариантов, снимки по времени, доля в val, сдвиг/поворот/масштаб окна зоны по целому кадру с выбором «куда», освещение и шум, итоговый счётчик файлов. Окно растягивается мышью.
Окно «ЗОНА-ПАРА: снимок по зонам»: число вариантов, снимки по времени, доля в val, сдвиг/поворот/масштаб окна зоны по целому кадру с выбором «куда», освещение и шум, итоговый счётчик файлов. Окно растягивается мышью.
НастройкаЧто делает и что стоит по умолчанию
Синтетических вариантов на каждую зонуСколько синтетических файлов создать на одну вырезку. Рекомендуется 20, 0 — только оригинал, максимум 500.
Снимки по времени: каждый вариант с нового кадра камерыВключено, период 800–1200 мс (не меньше выдержки). Каждый вариант берётся с нового живого кадра: реальный шум сенсора, вибрация и мерцание света вместо нарисованных.
Каждый вариант также в val с вероятностью, %20 %. Оригинал попадает в val всегда: у Ultralytics каждый класс обязан быть в обеих папках.
Обучать в оттенках серогоОбщий флаг модели: цвет убирается из нормы, аномалий и инспекции. Смешивать цветные и серые файлы в одной модели нельзя, программа предупредит.
Сдвиг, px · кудаОкно зоны сдвигается по целому кадру на 0…2 px в отмеченных направлениях (← → ↑ ↓); недостающая полоска берётся у соседней области платы, вырезка остаётся ровной. Галочка все направления даёт по файлу на каждое направление, одно случайное — один файл.
Поворот, ° · кудаПо умолчанию выключен: на плате, зафиксированной по области привязки, поворота нет, а включение размывает границу с браком. «влево / вправо», «все направления / одно случайное» — как у сдвига.
Масштаб, % · уменьшение / увеличениеПо умолчанию выключен. Две галочки — две стороны: уменьшение (<100) и увеличение (>100, окно зоны берёт соседей из кадра). Каждая отмеченная сторона — свой файл.
Яркость / Контраст / ГаммаСлучайное значение из диапазона на каждый вариант: яркость 88…112, контраст 88…112 %, гамма 98…102 % (на снимке); в профиле «Смещение элементов» свет шире, чтобы не стал признаком.
Шум (сигма) / РазмытиеЗерно сенсора 3…8 уровней, лёгкий расфокус 0,4…0,8 px.
Колонка «общий»С галочкой вид входит в общий файл вместе с остальными; без неё создаёт отдельный файл «оригинал + только этот вид». Чем больше отдельных, тем больше файлов на вариант.
1
Нажмите ЗОНА-ПАРА: снимок по зонам. Строка внизу диалога заранее считает: «На вариант: 1 файл. На зону: 21 в train, ≈5 в val. Всего за один снимок ≈ 52 файлов. Кадров с камеры: 20, ≈16 с» (для двух зон).
2
Выберите профиль: По умолчанию (сдвиг 0–2 px, свет ±5, контраст 95–105 %), Смещение элементов (сдвиг 0–1 px, свет −10…10) или Цвет и краска (сдвиг 0–2 px, свет ±2, контраст и гамма выключены, чтобы оттенок остался признаком).
3
Нажмите Снять. Генерация идёт в фоне с окном прогресса «зон 1/2 · файлов 26 · кадр 4/20» и кнопкой отмены. По окончании: «Готово: 2 зон → классы zone_001…zone_002, файлов: 52». Программа сразу выставляет настройки обучения под плату: Image Size 128, Model Size s, Epochs 50, Batch 64 (раздел 4.9).
4
Повторите снимок на нескольких разных исправных платах той же кнопкой. Для уверенной модели нужно в сумме не меньше 80 файлов на класс, а главное — несколько реальных экземпляров (5–10 плат), а не один кадр с сотней вариантов.
train\zone_001 — норма C30 в проводнике: real_… с камеры и syn_…_n1…n20 с суффиксами сдвига (shiftd, shiftl, shiftr, shiftu). Надпись всегда на своём месте относительно основания.
train\zone_001 — норма C30 в проводнике: real_… с камеры и syn_…_n1…n20 с суффиксами сдвига (shiftd, shiftl, shiftr, shiftu). Надпись всегда на своём месте относительно основания.
train\zone_002 — норма BR1: real_… с трёх плат и варианты с лёгким поворотом (rotl, rotr) и сдвигом.
train\zone_002 — норма BR1: real_… с трёх плат и варианты с лёгким поворотом (rotl, rotr) и сдвигом.

4.6. Синтетика брака в два нажатия: элемент смещается вместе с основанием

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

Норма и аномалия одной зоны отличаются только положением элемента относительно основания. Всё остальное одинаково, поэтому сеть учится связи «элемент ↔ плата», а не оттенку пятна или освещению.

Два нажатия

1
ЗОНА-ПАРА: снимок по зонамСнять. Вырезки нормы каждой зоны с 20 вариантами разброса съёмки (сдвиг окна 0–2 px, свет, шум) уходят в классы zone_NNN.
2
ЗОНА-ПАРА: аномалии зонСоздать. Настройки по умолчанию уже включают оба вида смещения: сдвиг зоны на 5–12 px во все направления и поворот области элемента (70 % зоны, круг) на 15–180°. Файлы уходят в классы zone_NNN_anomaly.

Больше ничего настраивать не нужно: ни рисовать брак, ни искать дефектные платы. Дальше — TRAIN AI MODEL.

До и после: чего программа добивается

ДО: живой кадр исправной платы. Обе зоны зелёные — «normal».
ДО: живой кадр исправной платы. Обе зоны зелёные — «normal».
ПОСЛЕ: в те же зоны подставлена синтетика из папок аномалий — C30 сдвинут вправо-вниз, BR1 повёрнут. Обе зоны красные — «anomaly». Так же плата будет выглядеть при реальном браке на линии.
ПОСЛЕ: в те же зоны подставлена синтетика из папок аномалий — C30 сдвинут вправо-вниз, BR1 повёрнут. Обе зоны красные — «anomaly». Так же плата будет выглядеть при реальном браке на линии.
Крупно, зона 1 (C30): слева норма с камеры, справа синтетика — деталь вместе с основанием сдвинута вниз-вправо, край дозаполнен соседями из кадра.
Крупно, зона 1 (C30): слева норма с камеры, справа синтетика — деталь вместе с основанием сдвинута вниз-вправо, край дозаполнен соседями из кадра.
Крупно, зона 2 (BR1): справа область детали повёрнута на 180° — площадки на месте, корпус смотрит не туда.
Крупно, зона 2 (BR1): справа область детали повёрнута на 180° — площадки на месте, корпус смотрит не туда.

Папки аномалий такими, какими их видит пользователь

Сравните с папками нормы из раздела 4.5: разница только в положении детали относительно основания.

train\zone_001_anomaly — брак C30. В каждой копии t000, t001… девять файлов: combo1_d, _dl, _dr, _l, _r, _u, _ul, _ur — зона сдвинута на 5–12 px в восемь сторон (d = вниз, u = вверх, l = влево, r = вправо), rotate1 — область конденсатора повёрнута.
train\zone_001_anomaly — брак C30. В каждой копии t000, t001… девять файлов: combo1_d, _dl, _dr, _l, _r, _u, _ul, _ur — зона сдвинута на 5–12 px в восемь сторон (d = вниз, u = вверх, l = влево, r = вправо), rotate1 — область конденсатора повёрнута.
train\zone_002_anomaly — брак BR1: корпус уехал с площадок в каждую из восьми сторон и повёрнут на случайный угол. Текстура платы и площадки настоящие.
train\zone_002_anomaly — брак BR1: корпус уехал с площадок в каждую из восьми сторон и повёрнут на случайный угол. Текстура платы и площадки настоящие.
Как читать имена файлов. syn_<дата>_t003_combo1_dr.jpg — копия 3, общий файл, сдвиг вправо-вниз (d = down, r = right, u = up, l = left); …_rotate1.jpg — поворот области элемента; …_scale1_dn/_up — масштаб в меньшую или большую сторону; …_tl/_c/_br — где стояла область (угол, центр). По имени всегда видно, какой именно дефект в файле, а лишнее удаляется кнопкой «Удалить синтетику класса (train + val)» в окне зон.

Маркировка деталей: почему царапина «жирная» и как это настраивается

На корпусах деталей есть маркировка — надписи и штрихи толщиной 1–2 px в кадре. От партии к партии она меняется: другой шрифт, надпись на конденсаторе повёрнута, часть символов стёрта. Если синтетический дефект «царапина» рисовать такой же тонкой линией, сеть не сможет отличить её от штриха маркировки и от шума сенсора и начнёт браковать исправные платы с другой партией деталей.

Синтетика ЗОНА-ПАРА закрывает это с двух сторон. Во-первых, основной брак — смещение элемента — переносит маркировку вместе с корпусом, поэтому надпись не становится признаком: она одинаково выглядит и в норме, и в аномалии. Во-вторых, рисованная линия / царапина по умолчанию жирная (⅛ зоны, не тоньше 3 px) и заведомо не похожа на штрих маркировки. Толщина теперь задаётся явно: поле Толщина линии, px (0 = авто) действует на линию и крест.

Рисованные дефекты (прямоугольник, круг, линия, «пропал элемент», размытое пятно и другие) собраны в сворачиваемой группе Синтетические дефекты поверх вырезки. По умолчанию она свёрнута и выключена: на плате главный брак — смещение. Включайте её для конкретных задач: залитая площадка, лишняя капля, стёртая маркировка.

Параметры фигурЧто задаёт
Размер: от … до, % от зоны / pxРазмер или длина фигуры. В процентах — от меньшей стороны зоны (соразмерно на любой зоне); в px — одинаково на всех зонах, удобно, когда известен размер реального дефекта в пикселях кадра.
Заливкасплошная / контур / вперемешку (контур тоже жирный).
Толщина линии, pxЛиния / царапина и крест. 0 — авто (жирная). Для маркировки деталей не опускайтесь ниже 3 px.
Где дефектпо центру, слева, справа, сверху, снизу — куда ставить фигуру (с небольшим случайным разбросом). Галочка все положения — по файлу на каждое отмеченное место; одно случайное — один файл, место случайное из отмеченных. Счётчик файлов внизу окна учитывает это сразу.
Цвета фигур: 5 слотовПять слотов вместо списка названий. Галочка — слот участвует, цвет берётся случайно из отмеченных (±12 по каналу, чтобы не был одним оттенком). Кнопка с образцом — выбрать цвет в палитре, 💧 пипетка — щёлкнуть по живому кадру камеры (колесо — зум, правая кнопка — панорама) и взять цвет с реальной детали или платы. По умолчанию включены два слота — тёмный и светлый, остальные три выключены.
Колонка «общий»Отмеченный вид дефекта попадает в общий файл вместе с другими «общими» (например, царапина поверх сдвинутого элемента). Без галочки — отдельный файл «норма + только этот дефект». Вид с «все положения» всегда отдельный.

4.7. Аномалии зон: окно настроек

Кнопка ЗОНА-ПАРА: аномалии зон создаёт классы zone_NNN_anomaly из вырезок нормы. Зоны берутся все, кроме красных (выключенных щелчком на кадре AI Model, раздел 4.3). Классы аномалий нужны не везде: добавляйте их для зон, где брак реально встречается, а остальные зоны модель проверит по узнаванию.

Окно «ЗОНА-ПАРА: аномалия зон»: копий на дефект сверху; сворачиваемая группа рисованных фигур с параметрами, местом и палитрой; сдвиг, поворот и масштаб зоны с формой области и масштабом ±%; подзоны; освещение поверх дефекта; снимки по времени и val.
Окно «ЗОНА-ПАРА: аномалия зон»: копий на дефект сверху; сворачиваемая группа рисованных фигур с параметрами, местом и палитрой; сдвиг, поворот и масштаб зоны с формой области и масштабом ±%; подзоны; освещение поверх дефекта; снимки по времени и val. Окно растягивается мышью.
НастройкаЧто делает
Копий на дефектОдно число для всех видов: сколько копий с новыми случайными параметрами сделать на каждый отмеченный вид (по умолчанию 10).
▸ Синтетические дефекты поверх вырезкиСвёрнутая по умолчанию группа: прямоугольник, мелкие прямоугольники, круг, эллипс, треугольник, восьмёрка, линия/царапина, крест, пропал элемент, размытое пятно, шумовая заплатка, кусок другой зоны. Параметры фигур, место и палитра — раздел 4.6.
Сдвиг, px · куда · формаГлавный дефект платы. Область (круг или квадрат) сдвигается на 5–12 px в отмеченные стороны: ← → ↑ ↓ и две диагонали ⤡ ⤢. масштаб по вертикали / по горизонтали, ±% — размер области относительно зоны: 0 — вся зона, −30 — область на 30 % меньше (сдвигается только элемент, основание остаётся), +30 — область больше зоны (захватывает соседей из кадра). все направления — по файлу на каждую сторону.
Поворот, ° · формаОбласть (круг или квадрат, тот же масштаб ±%) поворачивается на случайный угол из диапазона в обе стороны.
Масштаб, % · уменьшение / увеличениеОкно зоны как дефект: уменьшение 60–85 % или увеличение 120–160 %. Каждая отмеченная сторона — свой файл. На плате обычно выключен.
«общий» у сдвига и поворотаЕсли обе галочки стоят, это одна деталь в одном файле: сдвиг и поворот применяются одним преобразованием (не по очереди, иначе получалась «каша»), масштаб области и форма общие и задаются у сдвига.
▸ ПодзоныЗона делится на 2, 4 или 9 частей, и внутри каждой поворачивается или сдвигается своя область; галочка «на каждую подзону свой снимок» даёт по файлу на часть. Нужно для крупных зон с несколькими элементами.
Освещение и шум поверх каждого файла дефектаВключено и равно норме: дефект должен отличаться геометрией, а не светом.
Снимки по времени / в valКаждая копия с нового кадра камеры (800 мс), 20 % в val, первый файл класса в val всегда.
1
Нажмите ЗОНА-ПАРА: аномалии зон. Итог считается заранее: «Зон: 2 · на копию: 2 файла · на зону: 20 · всего ≈ 40 (+ часть в val)». Со «всеми направлениями» у сдвига файлов на копию становится девять, как в папках выше.
2
Выберите профиль: По умолчанию (сдвиг зоны 5–12 px + поворот области, фигуры и подзоны свёрнуты и выключены), Смещение элементов (только сдвиг 4–12 px, свет как у нормы) или Цвет и краска (фигуры, «пропал элемент», цвета из палитры, без сдвига). Свои изменения окно запоминает сразу, при каждом нажатии.
3
Нажмите Создать. Классы zone_NNN_anomaly появятся в дереве модели. Реальный брак с линии добавляйте в те же классы через ROI → добавить в класс.
Важно. Нижняя граница синтетического сдвига (5 px) стоит сразу над разбросом нормы (0–2 px). Не расширяйте норму до 5 px и не сужайте аномалию до 2 px: граница сотрётся, и модель будет колебаться на реальных платах. Если нужна другая чувствительность, меняйте обе границы согласованно и пересчитывайте их в миллиметры (раздел 1.3).

4.8. Оригинал с зонами: бляшки припоя и редактор зоны

Кнопка Оригинал с зонами открывает сохранённый оригинал платы с сеткой. Здесь синтетика делается без камеры: колесо — зум, правая кнопка — панорама, левая — выбор зон (Ctrl — добавить, протяжка — рамкой, Ctrl+A — все), двойной щелчок — редактор зоны.

  • Бляшки припоя для выбранных зон… — окно «Бляшки припоя: замыкание между дорожками». Программа сама находит дорожки в зоне (порог Оцу, светлые полосы шириной ≥ 2 px), ставит каплю припоя в зазор между соседними дорожками цветом самих дорожек, с тёмной кромкой и бликом. Настройки: между вертикальными или горизонтальными дорожками, бляшек на снимок 1…3, размер 8…18 % зоны, снимков на зону (5), куда класть — в аномалию или в норму, освещение поверх, в val — новый снимок с другим освещением или точная копия.
  • Редактор зоны: инструменты Кисть, Пипетка, Пятно цветом, Копировать область, Вставить, Штамп, Область бляшек; палитра «припой / площадка», «плата», «тень / маска», белый, чёрный; поле «Копий» и кнопка Создать снимок. Так рисуется брак, которого ещё не было на линии: залитая площадка, лишний элемент, отсутствующая маркировка.

Файлы редактора получают имена edit_… и попадают в класс зоны или её аномалии. На вкладке Inspect то же окно открывается только для просмотра.

4.9. Обучение модели

Группа Настройки обучения на вкладке AI Model заполняется сама после первого снимка по зонам: Image Size 128, Model Size s, Epochs 50, Batch 64. Это значения под зоны 108–137 px. Для зон 256 px, как в примере, поставьте Image Size 192 или 256 — вырезка тогда почти не сжимается (на снимке главного окна стоят Epochs 100 и Image Size 192). Проверьте значения и нажмите TRAIN AI MODEL.

ПараметрЧто означаетКак выбирать
Epochsсколько раз модель просмотрит весь набор50 для платы по умолчанию; 100–150, если классов аномалий много
Batch Sizeсколько картинок за один шаг64; при нехватке видеопамяти уменьшите
Image Sizeк какому размеру приводятся вырезки, кратно 32примерно размер зоны: 128 для зоны 108–137 px; 192–256 для зон 256 px, как в примере
Model Sizen / s / m / l / xs — оптимум для сотен пар классов; n не хватает ёмкости, m и выше — медленнее
Deviceна чём обучать0 (GPU) с видеокартой NVIDIA; без CUDA программа сама переключит на cpu
Workersпотоков подготовки данных12 по умолчанию для многоядерного процессора
1
Перед стартом программа проверяет набор: предлагает удалить пустые классы, лишние папки в val, и добирает val там, где он пуст. При первом запуске устанавливается среда обучения (Python 3, пакеты ultralytics, onnx, onnxslim, onnxruntime) — нужен интернет и несколько минут.
2
Для модели ЗОНА-ПАРА обучение идёт без erasing, flip, crop и randaugment: эти аугментации конфликтуют с классами аномалий (перевёрнутая зона — это уже другая зона). В консоль пишется соответствующая строка.
3
Кнопка становится красной STOP AI MODEL, кольцо справа показывает процент по эпохам. Ход обучения виден в Console. Для двух зон и 100 эпох на видеокарте это около 10–15 минут.
4
По окончании программа экспортирует best.onnx в корень папки модели и сразу назначает его на инспекцию. Кнопка Экспорт ONNX повторяет экспорт без переобучения.
Совет. Дообучение после добавления брака или новых плат делается той же кнопкой: набор дополняется, TRAIN AI MODEL, best.onnx перезаписывается. Сетку при этом не трогайте.

5. Инспекция

Вся работа идёт на вкладке Inspect. Модель после обучения уже назначена; остаётся проверить зоны, выставить порог, выбрать источник темпа и, если плата приходит в любом положении, включить живой конвейер.

Вкладка Inspect в работе: модель model_4\best.onnx, строка «Классы инспекции: ПЛАТА — зон 2, классов аномалий 2. Зона N решается внутри пары zone_N / zone_N_anomaly, порог 50 %», живой конвейер с периодом 2000 мс и индикатором «норма · точек 112», вн
Вкладка Inspect в работе: модель model_4\best.onnx, строка «Классы инспекции: ПЛАТА — зон 2, классов аномалий 2. Зона N решается внутри пары zone_N / zone_N_anomaly, порог 50 %», живой конвейер с периодом 2000 мс и индикатором «норма · точек 112», внизу источник темпа и галочки «GPU», «Анализ серого». На кадре обе зоны зелёные — «normal».

5.1. Назначить модель и проверить зоны

1
Если модель не назначена, нажмите ВЫБРАТЬ .ONNX МОДЕЛЬ ДЛЯ ИНСПЕКЦИИ и укажите best.onnx в папке модели. Строка «Классы инспекции» покажет все классы; имена берутся из самого файла ONNX, поэтому номера выходов гарантированно совпадают с именами.
2
Нажмите ЗОНА-ПАРА: зоны ↔ модель (проверить, порог). Окно показывает: «Зон в сетке: 2 / Классов zone_NNN в модели: 2, классов аномалий: 2 / Каждая зона сетки имеет свой класс ✔». Предупреждения «Зоны без класса в модели» или «Классы без зоны в сетке» означают, что сетка менялась после обучения.
3
НЕ ИСПОЛЬЗОВАТЬ ИИ временно выключает анализ на этой камере, не стирая настроек (флаг свой у каждой камеры); УБРАТЬ МОДЕЛЬ снимает модель и слоты совсем.

5.2. Порог узнавания зоны

Для каждой зоны сеть отдаёт вероятности всех классов, но решение принимается только внутри пары. Доля нормы q = p(zone_N) / (p(zone_N) + p(zone_N_anomaly)) умножается на «узнавание» — насколько пара вообще заняла выход сети (полное узнавание при 10 % и выше). Итоговая оценка 0…100 % сравнивается с порогом: выше — normal, ниже — anomaly.

Порог по умолчанию 50 %, хранится в board.json рядом с моделью и применяется сразу, без перезапуска. Ниже 50 % порог уходит в сторону нормы всё сильнее: 25 % → отсечка 6 %, 10 % → 0,4 %, 1 % → почти всё зелёное; 99 % пропускает только уверенные зоны. Такая шкала нужна, чтобы оператор видел разницу между 5 % и 99 %, а не сплошные красные зоны.

Совет. Подберите порог на десятке заведомо исправных плат: поднимайте, пока все зоны остаются зелёными, затем проверьте на платах с известным браком. Раз в 10 секунд программа пишет в консоль строку «[ЗОНА-ПАРА] … normal N, anomaly M, порог 0.50; худшие q: z17:0.31 …» — по ней видно, какие зоны ближе всего к границе.

5.3. Живой конвейер: плата в любом положении

Галочка Живой конвейер: плата в любом положении включает поиск платы по области привязки перед каждым анализом: кадр совмещается с оригиналом, зоны режутся из совмещённого изображения, а на видео рисуются границы области привязки и зоны (зелёные — норма, красные — аномалия). Поле период, мс задаёт, как часто искать плату (по умолчанию 1000, на снимке 2000). Индикатор рядом: зелёный «норма · точек N», красный «АНОМАЛИЯ · точек N», оранжевый «плата не найдена» или «нет оригинала — зафиксируйте». Вердикт принимается по одному анализу, без накопления.

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

5.4. По какому сигналу анализировать

Источник темпа всегда один: включая новый, программа снимает предыдущий.

СпособКак включитьКогда применять
По камерегалочка «По камере»непрерывный контроль; темп ограничен ползунком «Анализов в секунду» на вкладке Camera
По таймеругалочка «По таймеру» и интервал, мсровный редкий контроль, например раз в секунду
По триггерувыбрать связь в списке «Trigger» и фронт «анализ по + на входе» или «по −»конвейер с датчиком на входе камеры: кадр снимается в момент прихода изделия — самый точный способ (раздел 6)
GPUгалочка «GPU»включена по умолчанию; переключение перезагружает модель
Анализ серогогалочка «Анализ серого»включается сама для моделей, обученных в сером; вырезки переводятся в серый перед инференсом

5.5. Жёлтые зоны: выключить зону кликом

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

1
Щёлкните левой кнопкой по зоне на плитке камеры: зона станет жёлтой и выйдет из анализа. Повторный щелчок включает её обратно.
2
Группа зон: зажмите левую кнопку и протяните рамку по плате. Все зоны, попавшие в рамку, выключаются; если все они уже были жёлтыми, рамка включает их обратно. Работает и при увеличении колесом.
3
Список жёлтых зон хранится в базе по камере и модели, переживает перезапуск программы и переподключение камеры. В консоль пишется строка «[Зоны] … выключено зон: N».

Что делают жёлтые зоны, задаёт общий чекбокс Жёлтые (отключённые кликом) зоны молчат в окне OUTPUT на вкладке «Звук» (включён по умолчанию):

ЧекбоксПоведение жёлтых зон
Включён (по умолчанию)Зона не анализируется вовсе: вырезка не подаётся в сеть, метка OFF, ни звука, ни TCP-посылки, ни выхода камеры. В живом конвейере жёлтая зона не влияет на вердикт «норма / аномалия».
ВыключенЖёлтая рамка остаётся только пометкой: зона анализируется и срабатывает как обычная. Удобно, чтобы отметить зоны для проверки, не отключая контроль.
Совет. Правила браковщика на жёлтых зонах удалять не нужно: при включённом чекбоксе они просто не получают результатов, а после обратного включения зоны заработают сразу.

5.6. Что видно на экране и в консоли

  • Над зоной подписан результат; рамка — цветом таблицы зон, при срабатывании по триггеру — красная. Когда зон больше 50, уверенная норма показывается только зелёной рамкой, подписи получают аномалии и неуверенные зоны: сотни подписей на каждом кадре мешали читать картинку и нагружали отрисовку. Жёлтые зоны выключены кликом (раздел 5.5).
  • Панель «Анализ по триггеру» внизу вкладки показывает каждую сработку строкой [чч:мм:сс.ммм] Камера вход + ТРИГГЕР 4 мс | ИИ 12 мс #57 и результат по каждой зоне. В базу эти строки не пишутся.
  • Правый клик по зоне на видео: «Класс обнаружения в этой зоне → считать это «…»» переименовывает ответ модели для этой зоны (не исправляет модель, но браковщик и журнал увидят новое имя); там же «Сделать браковщик для этой зоны» и счётчик правил.
  • Галочка Сохранять снимки инспекции и папка: кадры с нарисованными зонами пишутся файлами inspect_….jpg, настройка своя у каждой камеры.
  • Раз в 10 минут в подпапку diag модели пишется кадр живого конвейера и текстовый список зон, хранятся последние 20 снимков — для разбора спорных случаев без роста папки.

6. Триггеры: внешний датчик на вход камеры

Основной режим для конвейера: камера снимает кадр по электрическому сигналу датчика на своём дискретном входе. Это самый точный момент съёмки: изделие всегда в одном месте кадра, а анализ идёт ровно один раз на изделие. Окно ТРИГГЕРЫ собирает связь «датчик → камера» и рисует схему подключения под выбранный разъём.

Окно ТРИГГЕРЫ для HIKROBOT (6 pin): датчик PNP, сигнал на пин 2, общий пин 5, распиновка.
Окно ТРИГГЕРЫ для HIKROBOT (6 pin): датчик PNP, сигнал на пин 2, общий пин 5, распиновка.
То же для SICK picoCam (6 pin): сигнал на пин 4 (Trigger +), общий пин 3 (Trigger −).
То же для SICK picoCam (6 pin): сигнал на пин 4 (Trigger +), общий пин 3 (Trigger −).
1
Нажмите ТРИГГЕРЫ над видео. Выберите Оборудование триггера (в списке оптический датчик BAOLSEN QAF-Q2P, 4 провода; любой датчик с выходом PNP или NPN подключается так же), Разъём камеры (HIKROBOT 6 pin или SICK picoCam 6 pin), Камера (какая именно) и Тип выхода датчика: PNP — сигнал коммутирует «плюс» (обычный случай), NPN — коммутирует «минус», нужен резистор 1–4,7 кОм на +24 В.
2
Соберите схему по рисунку: питание датчика и камеры от одного блока 24 В, сигнальный провод датчика на вход камеры, обратный провод входа на 0 В. Белый провод датчика — второй выход, его не подключают.
3
Нажмите Сделать связь. Связь сохраняется в базе; одинаковые связи не дублируются. Кнопка Удалить связь убирает выбранную.
4
На вкладке Inspect выберите связь в списке Trigger и фронт: «анализ по + на входе» (кадр по появлению 24 В) или «анализ по − на входе». Программа переводит камеру в режим триггера: у HIKROBOT TriggerMode = On, TriggerSource = Line0, у SICK останавливает захват, ставит режим и запускает заново. Кружок рядом показывает уровень на входе.

Распиновка разъёмов

ПинHIKROBOT MV-CS, 6 pinSICK picoCam, 6 pin
1DC_PWR — питание камеры 9–24 ВGND — земля питания камеры
2OPTO_IN — вход Line 0 (+), сигнал триггераVCC — питание камеры 12–24 В
3GPIO — Line 2, вход или выходTrigger − — вход триггера, оптопара (−)
4OPTO_OUT — выход Line 1 (+)Trigger + — вход триггера, оптопара (+)
5OPTO_GND — общий оптопар, обратный проводFlash + — дискретный выход (+)
6GND — земля питания камерыFlash − — дискретный выход (−)
Важно. Разъёмы «папа» на камере и «мама» на кабеле зеркальны. Единственный ориентир — ключ (крупный вырез обоймы); у SICK он между контактами 1 и 6 и при зеркале уходит вправо. Считайте контакты с той стороны, которую держите в руках. Ошибка в контакте означает сожжённый вход: рядом лежат питание и выход. Распиновку SICK подтверждайте прозвонкой.
Совет. Снимайте по фронту «+», а не по спаду: на реальном стенде разброс момента кадра по фронту составил 4,2 мс, по спаду — 40,7 мс. Проверка датчика: коричневый↔синий всегда 24 В, это питание; сигнал смотрите между чёрным и синим, перекрывая луч. Если он не меняется — поставьте резистор 2–10 кОм с чёрного на коричневый; 24↔0 В при этом означает NPN.

7. Выходы: браковщик, дискретные выходы камер и TCP

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

7.1. Справочник ВЫХОДЫ: контакты и проверка тестером

Кнопка ВЫХОДЫ над видео открывает справочное окно, которое ничего не настраивает: оно показывает, на каких контактах выход, как его проверить тестером без питания и как подключить нагрузку.

HIKROBOT — выход Line 1 (оптопара) на пинах 4 (+) и 5 (−), предельный ток 25 мА.
HIKROBOT — выход Line 1 (оптопара) на пинах 4 (+) и 5 (−), предельный ток 25 мА.
SICK picoCam — flash-пин (оптопара) на пинах 5 (+) и 6 (−), 150 мА постоянно.
SICK picoCam — flash-пин (оптопара) на пинах 5 (+) и 6 (−), 150 мА постоянно.
  • Выход — «сухой контакт» оптопары: своего напряжения он не даёт, только замыкает цепь. Нужен внешний источник питания.
  • Проверка тестером в режиме Ω: выход ВЫКЛ — обрыв (OL), ВКЛ — сотни Ом. Зуммер прозвонки молчит в обоих случаях, смотрите цифры. Если ничего не меняется — переверните щупы, оптопара полярна.
  • Нагрузка: +24 В → лампа → пин «+», пин «−» → GND. Для HIKROBOT 25 мА — предел: сигнальная арматура на 27 мА уже за ним, снизьте питание или поставьте промежуточное реле. Для SICK запас большой, лампа на 20–30 мА подключается напрямую.

7.2. Окно OUTPUT: правило на зону

Кнопка OUTPUT на правой панели (или правый клик по зоне → «Сделать браковщик для этой зоны») открывает окно «OUTPUT — TCP-посылки и дискретные выходы камер». Слева дерево Камеры → модели ИИ → классы → зоны с галочками на зонах; справа вкладки Правила зоны, Журнал срабатываний, База данных.

Окно OUTPUT: дерево зон слева, список правил зоны, группа «Правило» и вкладка TCP с подстановками.
Окно OUTPUT: дерево зон слева, список правил зоны, группа «Правило» и вкладка TCP с подстановками.
1
Выберите зону в дереве (заголовок справа покажет путь HD USB Camera → model_5 → 1 → Зона 1 (T1.C1)). Нажмите + Новый TCP, + Новый дискретный или + Новый звук.
2
В группе Правило выберите Класс ИИ, при котором срабатывать (для ЗОНА-ПАРА это anomaly или normal; * — любой класс), галочку Включён, при необходимости повторять, пока класс держится с интервалом повторов и Подтверждение смены класса, мс (1500 по умолчанию: новый класс должен продержаться столько подряд, чтобы смена была признана).
3
Заполните вкладку TCP (раздел 7.3), Выход камеры (раздел 7.4) или Звук (раздел 7.5).
4
Проверьте цепочку без ожидания брака: Проверить это правило (шлёт посылку или даёт импульс на выход), Эмулировать срабатывание зоны (прогоняет все правила зоны через боевую очередь с антидребезгом и журналом).
5
Нажмите Создать на 1 зоне. Если отмечены галочками несколько зон, кнопка меняется на Создать на N зонах; на узле модели — «Сохранить на всю модель», на узле класса — «Сохранить на класс». Внизу: Включить / Отключить / Удалить у отмеченных.

Одна зона может нести несколько TCP-правил (разные приёмники), не более одного правила дискретного выхода на класс и не более одного звука на класс. Правило хранится в базе и работает из потока инференса: правила держатся в памяти, один поиск по адресу зоны на кадр, а сокеты и SDK камеры трогает отдельный поток-диспетчер, чтобы анализ не ждал сети.

7.3. TCP-посылка роботу или ПЛК

Программа работает как TCP-клиент: подключается к IP-адрес и Порт приёмника, держит соединение открытым и переиспользует его. При обрыве делает одну попытку переподключения и повтора. Строка уходит в UTF-8 с CR+LF в конце.

ПолеНазначение
Таймаут подключения, мс1000 по умолчанию, 100…10000.
Таймаут отправки ИИ, мсМинимальная пауза между автоматическими посылками правила; 0 — без паузы. Даже смена класса ждёт эту паузу.
КомандаСлово уходит как есть: «up» — посылка «up». Нужен класс-угол — добавьте подстановку: «J6 {class}» → «J6 235». Пусто — используется шаблон «Данные».
Свои данныеПроизвольный текст, подставляется вместо {data}.
ДанныеШаблон посылки. Пусто = «номер и имя зоны» ({zoneId} {zone}). Нажатие на подстановку добавляет её, повторное — убирает; «Все поля» ставит структурированный шаблон.
ПодстановкаЗначениеПодстановкаЗначение
{zoneId}номер зоны (1, 2, 3…){camera}имя камеры
{zone}имя зоны (редактируется в базе){model}имя модели ИИ
{class}класс, который увидела модель{time}время ЧЧ:ММ:СС.мс
{conf}уверенность, % (точка как разделитель){date}дата ГГГГ-ММ-ДД
{data}текст из «Свои данные»

Пример структурированного шаблона: zoneId={zoneId};zone={zone};class={class};conf={conf};camera={camera};model={model};time={time};date={date};data={data}. Числа всегда в инвариантном формате, чтобы «87,6» не ломал разбор на ПЛК.

  • Проверить связь только открывает сокет и сообщает «соединение установлено» или «нет ответа за N мс».
  • Отправить тест реально шлёт строку; результат показывается рядом с кнопкой, а не окном.
  • Квитирование. Без галочки «повторять» правило шлёт одну посылку при смене класса и повторяет её, пока приёмник не ответит строкой ok <посылка>. С галочкой — повтор по интервалу, пока класс держится.
  • «Последняя команда побеждает»: если модель успела дать несколько результатов, пока диспетчер занят, уйдёт последний. Очередь ограничена 512 заданиями.

7.4. Дискретный выход камеры

Вкладка «Выход камеры»: способ вывода, линия, уровень, импульс, кнопки ручной проверки. У USB-камер дискретных выходов нет — доступен только TCP.
Вкладка «Выход камеры»: способ вывода, линия, уровень, импульс, кнопки ручной проверки. У USB-камер дискретных выходов нет — доступен только TCP.
ПолеНазначение
ВыходСпособ: авто, у SICK — Flash-пин (постоянный уровень) или GPIO; у HIKROBOT — UserOutputValue или LineInverter (строб выключен). Модели MV-CS020/016-10GC узла UserOutput не имеют — программа сама выберет LineInverter.
ЛинияFlash-пин / GPIO1…6 у SICK; Line1 (выход), Line2 (двунаправленная) у HIKROBOT; Line0 — только вход.
Уровеньtrue / false / off. «off» — правило есть, но выход не трогается.
Импульс, мс (0 — держать)0 — уровень держится до смены класса; иначе импульс 10…5000 мс с возвратом.

Кнопки Включить выход, Выключить выход, Импульс проверяют пин тестером или лампой; Что умеет камера опрашивает все способы и печатает отчёт. Ручные тесты пишутся в тот же журнал.

Несколько зон на одном выходе. Если на один пин повешены правила нескольких зон, выход считает логическое «И»: HIGH только когда все зоны просят HIGH, хотя бы одна LOW — выход LOW. В журнале это расшифровывается строкой «зон на выходе N, требуют LOW k → HIGH/LOW». Так один выход «изделие годное» собирается из сотен зон платы.
Важно. У SICK flash-пин один и тот же для дискретного выхода и для подсветки: если к нему подключена импульсная лампа, используйте GPIO. Антидребезг правила — 500 мс по умолчанию (минимум 200), бессобытийные повторы в журнал не пишутся.

7.5. Звуковое оповещение: свой звук на каждую зону

Третий тип правила — звук на компьютере с программой. Оператору не нужно смотреть на экран: по сигналу он слышит, что зона ушла в брак, а разные звуки на разных зонах подсказывают, где именно. Звук доступен для любых камер, включая USB и RTSP, у которых нет дискретных выходов.

1
Выберите зону в дереве и нажмите + Новый звук. В группе «Правило» укажите класс (например, anomaly) и оставьте галочку Включён.
2
На вкладке Звук выберите сигнал из списка. Встроенных десять: короткий, двойной, тройной сигнал, низкий и высокий тон, восходящий и нисходящий, тревога-сирена, длинный гудок, колокольчик. Кнопка Прослушать проигрывает выбранный.
3
Свой звук: нажмите Загрузить свой файл… и укажите WAV, MP3 или WMA. Файл копируется в папку sounds\custom рядом с программой (флешку можно вынимать) и появляется в списке с пометкой «свой». Кнопка Папка звуков открывает эту папку: файлы можно класть туда и напрямую.
4
Задайте Пауза между звуками, мс от 1000 до 10000. В течение этого времени после сигнала звук не повторяется, даже если класс зоны сменился снова: при 10000 мс оператор услышит не чаще одного сигнала в 10 секунд.
5
Нажмите Создать на 1 зоне или отметьте зоны галочками и создайте правило сразу на всех. На каждую зону — свой звук: повторите с другим сигналом для другой зоны.
6
Чекбокс Жёлтые (отключённые кликом) зоны молчат под полем паузы включён по умолчанию: зоны, выключенные кликом на вкладке Inspect (раздел 5.5), не звучат и не дают TCP и выхода камеры по всей модели.
ПоведениеКак это работает
Без галочки «повторять»Звук один раз при подтверждённой смене класса зоны (после «Подтверждение смены класса»). Пока класс держится, тишина.
С галочкой «повторять, пока класс держится»Сигнал повторяется через «Интервал повторов», но не чаще паузы между звуками, пока зона остаётся в указанном классе.
Несколько зон в браке одновременноКаждая зона играет свой звук; сигналы разных зон не гасят друг друга, гасится только повтор одной и той же зоны.
ЖурналКаждое проигрывание пишется в «Журнал срабатываний» строкой «Звук «…»»; если файл не найден или звуковое устройство отказало — строка с ошибкой, программа продолжает работать.
ПроверкаПроверить это правило проигрывает звук сразу; Эмулировать срабатывание зоны прогоняет звук вместе с TCP и выходами через боевую очередь.
Совет. Ставьте на самые важные зоны (разъёмы, силовые элементы) сирену или тройной сигнал, на остальные — короткие; тогда по одному звуку понятно, бежать ли к линии немедленно. Правило звука на весь класс модели создаётся выбором узла модели или класса в дереве: один сигнал на любой брак.

7.6. Журнал срабатываний и база данных

Вкладка Журнал срабатываний показывает последние 300 записей строками ЧЧ:ММ:СС.ммм ✔/✖ Камера · Модель · Класс · Зона → Действие [сообщение] и обновляется живьём. Кнопки Обновить и Очистить журнал.

Вкладка «База данных»: что где хранится, копия и восстановление базы одним файлом.
Вкладка «База данных»: что где хранится, копия и восстановление базы одним файлом.

Вкладка База данных: программа хранит всё в файле SQLite rejectors.db рядом с exe — отдельной службы нет, порт не слушается, ничего устанавливать не нужно. Таблицы: settings (настройки), cameras (профили камер), camera_models (модели на камерах), zones (имена и геометрия зон), rejectors (правила), reject_log (журнал), camera_param_files (копии параметров камер), camera_presets (наборы настроек камер). Сохранить копию базы… делает целостный снимок командой VACUUM INTO прямо на работающей базе; Загрузить базу из копии… восстанавливает, предварительно сохранив текущую. Базу можно смотреть в DBeaver, не закрывая программу; писать в неё извне не стоит.

8. Другие режимы и задачи

Обычные модели: normal / anomaly и любые классы

Тот же редактор ROI работает и для обычной классификации: таблетки, крышки, этикетки, детали в ложементе. Классы задаются в диалоге «Новая ИИ модель» (по умолчанию normal и anomaly, имена латиницей), зоны ставятся на изделия, кнопка Сделать снимок с числом кругов 1…50, серия Создать снимки по камере (кадр/с) или по энкодеру. Панель Синтетика для ИИ: точные повороты 90°/180°, полный оборот 360° с шагом и диапазоном, зеркало, «классы по градусам» (каждый угол в свой класс — браковщик отправит угол по TCP), диапазоны яркости и контраста. Обучение — с полными аугментациями Ultralytics. Порог уверенности для таких моделей задаётся там же, где и для ЗОНА-ПАРА — на вкладке Inspect.

Много-модельная инспекция (слоты 1–20)

На одной камере можно держать до 20 моделей: Добавить ONNX в слот, затем ROI → Добавить класс в выбранную модель — у каждой модели в слоте своя разметка зон, результаты всех моделей показываются на одном кадре.

Для ЗОНА-ПАРА слоты обычно не нужны. Одна модель уже покрывает всю плату: у каждой зоны своя пара классов, поэтому «слияние похожих классов», ради которого раньше заводили несколько моделей, здесь не возникает. Типовой стенд — одна модель ЗОНА-ПАРА на плату, слоты пустые.

Когда много-модельность всё же применяется:

СитуацияКак настроить
Разные задачи на одном кадреЗОНА-ПАРА проверяет раскладку и наличие элементов, а обычная модель во втором слоте — маркировку, наклейку, цвет разъёма или направление ключа. Зоны второй модели ставятся отдельно через «ROI → Добавить класс в выбранную модель».
Изделие без фиксированной сеткиТаблетки, крышки, детали в ложементе: несколько классов вида изделия в обычных моделях. Похожие классы разводятся по разным слотам, чтобы не сливались.
Две разные платы в одном кадреДве модели ЗОНА-ПАРА в разных слотах, у каждой свой оригинал и своя сетка. Живой конвейер работает с оригиналом основной модели.
Переходный периодСтарая обученная модель остаётся в слоте, пока новая ЗОНА-ПАРА набирает статистику; обе видны на одном кадре, правила браковщика переносятся по мере доверия.

Порог, темп анализа, жёлтые зоны и правила браковщика действуют на все модели камеры. Кнопка УБРАТЬ МОДЕЛЬ очищает и слоты, поэтому спрашивает подтверждение; Удалить выбранную убирает одну модель из слота, её файлы и зоны в базе остаются.

Общие модели

Кнопка ОБЩИЕ МОДЕЛИ сохраняет набор «камера → модель» под именем: Создать из текущих моделей, Применить ко всем камерам, Обновить из текущих, Переименовать, Удалить набор. Переход стенда из восьми камер на другое изделие — один выбор. Удаление набора убирает только группировку: папки, ONNX, зоны и правила остаются. Зоны принадлежат паре «камера + модель»: одна модель на восьми камерах — восемь независимых разметок.

Энкодер и браковщик по конвейеру

Для линий с энкодером на COM-порту (115200, ESP32): подключение CONNECT ENCODER, автоподключение, позиция, шаг снимка и коррекция, Установить ноль + СНИМОК. Съёмка для обучения и анализ могут идти «По энкодеру» — кадры равномерны по пути изделия. Старый браковщик по времени с задержкой и антиспамом отправляет команду REJECT на контроллер энкодера.

Запись видео и снимки

Вкладка Settings: НАЧАТЬ ЗАПИСЬ ВИДЕО с активной камеры в файл record_дата_время.avi (MJPG, реальный FPS камеры). Снимки для обучения — real_….jpg, снимки инспекции — inspect_….jpg с нарисованными зонами.

9. Настройки, консоль, требования и лицензия

Settings

  • СОХРАНИТЬ В ФАЙЛ / ЗАГРУЗИТЬ ИЗ ФАЙЛА — все настройки (камеры, модели, правила) в JSON, удобно перед переустановкой или для переноса на второй компьютер. Источник истины — база, JSON — страховка на случай её недоступности. Каждое изменение настроек сохраняется автоматически.
  • СБРОСИТЬ НА НАЧАЛЬНЫЕ — необратимо: удаляет конфиг и раскладку окон.
  • Язык интерфейса — 14 языков; главное окно переключается сразу, остальные окна — при следующем открытии.
  • Положение, размер и монитор всех окон, позиции разделителей — в базе; при отключённом мониторе окно возвращается в видимую область.

Console

Галочки «Камеры» и «Триггер» по умолчанию сняты и включают показ соответствующих сообщений (в режиме триггера сообщения камеры идут в «Триггер»); в файлы logs\engiai-*.log пишется всё и до фильтров. Консоль рассчитана на недели работы без внимания: на экране держится 800 строк, при 1000 старые 200 удаляются; новые строки собираются пачкой 4 раза в секунду, а не по одной; автопрокрутка вниз включена, пока вы сами не прокрутили вверх; звука у консоли нет. Смены класса зон пишутся не чаще 10 строк в секунду (остальное сворачивается в счётчик), файл журнала делится по 20 МБ, файлы старше 14 дней удаляются при запуске, журнал срабатываний в базе хранит последние 20 000 записей. Необработанные ошибки — в crash.log, причины принудительного завершения — в runtime.log рядом с exe. Если что-то работает не так — смотрите сюда в первую очередь.

Требования

КомпонентТребование
Операционная системаWindows 10/11 x64.
Видеокарта для инспекцииNVIDIA с драйвером CUDA; библиотеки CUDA 13 и cuDNN 9 поставляются с программой. Без видеокарты инспекция идёт на процессоре автоматически.
ОбучениеPython 3 (с галочкой «Add python.exe to PATH» при установке) и пакеты ultralytics, onnx, onnxslim, onnxruntime — программа устанавливает их сама при первом обучении, нужен интернет. GPU для обучения определяется по PyTorch; без CUDA обучение идёт на CPU медленнее, результат тот же.
Камеры SICKДрайвер IDS uEye; камера должна быть видна в IDS Camera Manager.
Камеры HIKROBOTMVS SDK (библиотека поставляется с программой); для GigE — сетевая карта с поддержкой jumbo-кадров.

Лицензия и пробный режим

При запуске программа обращается к серверу лицензий engi.live; отправляются только хэши идентификаторов оборудования и версии, без серийников и имён пользователей. Если сервера нет, а разрешение закэшировано — программа работает по кэшу (для линий без интернета). Без лицензии действует пробный режим 20 минут: в заголовке окна и в строке ИИ идёт отсчёт «ТЕСТ ММ:СС», кнопка КУПИТЬ на вкладке Settings открывает страницу покупки. При действующей лицензии отсчёта нет.

10. Короткий чек-лист и поиск неисправностей

Чек-лист с нуля для платы

1
КАМЕРЫ → «+ Добавить камеры» → отметить свои камеры → Добавить.
2
Вкладка Camera: разрешение → «Авто-настройка для ИИ (по кадру)» (или «Зафиксировать параметры» у USB) → «Сохранить параметры» → «Сохранить как…» набор настроек. По желанию — «Обучать в оттенках серого».
3
AI Model → «Создать новую ИИ модель» → имя.
4
«ROI → добавить в класс (модель обучения)» → рамка вокруг каждой детали → размер зоны (например, 256) → Enter. Для сотен одинаковых деталей — рамка по всей плате и сетка.
5
Галочка «Зафиксировать зоны к изделию по маркерам» → «Зафиксировать оригинал» → обвести на кадре участок платы с деталями (не зоны инспекции) → «✔ Искать зоны по выделенной области».
6
«ЗОНА-ПАРА: снимок по зонам» → «Снять». Повторить на 3–5 исправных платах. Ненужные зоны заранее выключить щелчком на кадре (красные).
7
«ЗОНА-ПАРА: аномалии зон» → «Создать»: сдвиг и поворот элемента вместе с основанием уже включены. При необходимости бляшки припоя в «Оригинал с зонами».
8
TRAIN AI MODEL (Image Size 128, s, 50 эпох) → дождаться 100 % → best.onnx назначен сам.
9
Inspect → «ЗОНА-ПАРА: зоны ↔ модель» → проверить соответствие → порог. «По камере» или выбрать триггер. Для подвижной платы — «Живой конвейер».
10
OUTPUT → выбрать зоны → правило на класс anomaly (звук, TCP или выход камеры) → «Эмулировать срабатывание зоны» → «Создать на N зонах».

Если что-то пошло не так

СимптомЧто проверить
Камера не появилась в спискепитание и кабель; для SICK — IDS Camera Manager и IP из подсети адаптера; для HIKROBOT после аварийного закрытия подождать до 25 с и «Переподключить»
Картинка тёмная, серая или неправильные цветаCamera → «Авто-настройка для ИИ»; для цветной SICK — раскладка Байера и баланс белого; у USB — «Типовые», затем «Зафиксировать параметры»
Кадры рвутся, Net красныйGigE: размер пакета 1500 или jumbo на сетевой карте, межпакетная задержка; меньше FPS или меньше кадр; отдельная сетевая карта на камеру
«Плата не найдена» / снимок пропущеноригинал не зафиксирован или снят при другом свете; мало опорных точек — взять область привязки больше и с деталями; в область попал стол или конвейер; увеличить период поиска
Зоны съезжают на другой платеплата искалась по самим зонам инспекции: перефиксировать оригинал с областью привязки по деталям платы вокруг (раздел 4.4); модель совмещения «Авто»
Бракует исправные платы другой партии деталеймаркировка на корпусах другая: добавить снимки нормы с этой партии; синтетическую царапину не делать тоньше 3 px (раздел 4.6); проверить, что дефект — смещение, а не цвет
Зоны с меткой NO_ZONE_CLASSсетка менялась после обучения; вернуть сетку или создать новую модель и переснять
Все зоны красные на исправной платедругая плата или другое положение без живого конвейера; порог слишком высок; снимки сделаны при другом освещении; смешаны цветные и серые файлы
Модель не видит сдвиг элементапересчитать px/мм (раздел 1.3): при малом масштабе сдвиг меньше 5 px; уменьшить поле зрения или взять камеру с большим разрешением; не расширять сдвиг нормы
Обучение падает или очень медленноеDevice = cpu, если нет видеокарты NVIDIA; уменьшить Batch Size; смотреть Console; проверить, что Python в PATH
Инспекция не срабатываетвыбран ли best.onnx; включён ли источник темпа (По камере / таймер / триггер); не нажата ли «НЕ ИСПОЛЬЗОВАТЬ ИИ»; галочка «AI включён» у камеры
Правило браковщика молчитнажато ли «Создать на N зонах»; галочка «Включён»; класс правила совпадает с ответом модели (anomaly / normal); для выхода — уровень не «off»; у USB-камер выходов нет, только TCP
Звук не играетправило создано и включено; файл есть в папке sounds (или sounds\custom); не идёт ли пауза между звуками; без «повторять» звук играет только при смене класса; громкость Windows и устройство вывода
TCP-посылка уходит один разбез «повторять» правило ждёт ответа «ok <посылка>» от приёмника; поставьте галочку «повторять, пока класс держится» или настройте ответ на стороне ПЛК

engiAI Ethernet System. Все названия кнопок и полей в руководстве приведены так, как они отображаются в программе на русском языке. Снимки экрана сделаны на модели «model_4» (две зоны 256×256: конденсатор C30 и мост BR1), USB-камера 3264×2448, модель обучена в оттенках серого. Редакция 3, сентябрь 2026: пример на двух зонах, формирование папок модели, область привязки, синтетика «элемент с основанием» с картинками «до / после», палитра и толщина линии, красные зоны, консоль.