Инспекция маркировок
Камера стоит после принтера или лазерного маркиратора. engiAI читает напечатанный текст прямо с видеопотока: склеивает надпись, которая проезжает через зону по кусочкам, сравнивает её с образцом или списком эталонов, сохраняет каждую маркировку в базу и отдаёт результат по сети — в браузер, в JSON и контроллеру по TCP.
Как это выглядит в работе
Кнопка ТЕКСТ находится в верхнем ряду главного окна engiAI, рядом с кнопками ВЫХОДЫ, КАМЕРЫ, ТРИГГЕРЫ, ОБЩИЕ МОДЕЛИ и ПОДСЧЁТ. Она открывает окно «ТЕКСТ — распознавание маркировки». Окно можно держать открытым поверх видео: зона на кадре видна, пока окно открыто или распознавание включено.
В шапке окна три вещи, общие для всех вкладок:
- Распознавание текста — главный выключатель. Пока галочка снята, распознавание не работает и не нагружает программу.
- ▭ Выделить зону — нажмите и протяните рамку на видео любой кнопкой мыши. Пока окно открыто, рамку можно протянуть и правой кнопкой без нажатия. ✖ Сбросить зону убирает зону.
- Состояние справа: ЖДЁТ МАРКИРОВКУ, ЗАПИСЬ МАРКИРОВКИ, ПАУЗА или ПО СИГНАЛУ ВХОДА. Под ним — чем считается (GPU CUDA или процессор), сколько кадров в секунду читается и сколько миллисекунд уходит на один кадр.
Вкладка «Маркировки» — результат и сравнение с образцом
Это рабочая вкладка оператора. Сверху — режим Сравнивать всё в зоне с образцом:
Как идёт анализ фразы на конвейере:
- Запись начинается с начала фразы. Если включили посреди надписи, её хвост пропускается — программа ждёт следующее начало.
- Каждый кадр ставится на своё место в образце, и каждая буква получает «голоса» из всех кадров, где её видно. В итог идёт вариант, прочитанный чаще всего. Случайные ошибки одного кадра (обрезанная краем зоны буква, блик) исправляются соседними кадрами — на медленном конвейере голосов больше, и итог точнее.
- Итог выдаётся, как только фраза прошла через зону целиком, или если новых знаков нет дольше времени из вкладки «Распознавание» (конвейер встал, зона пустая). После итога программа ждёт начало следующей фразы; фразы, идущие вплотную друг за другом, записываются каждая отдельно.
- Направление движения программа определяет сама или берёт из настройки «Откуда приходит текст».
Пока фраза едет, справа от порога видно читает: 40 из 64 знаков, в строке «Записывается» — процент совпадения и собранный текст. После итога — 73% — РАСПОЗНАЛО или НЕ РАСПОЗНАЛО. Тот же итог выводится крупно поверх видео.
Без галочки «Сравнивать всё в зоне с образцом» работает последовательная склейка: любая надпись записывается от начала до конца по правилам вкладки «Начало и конец» и, если нужно, сравнивается со списком эталонов.
Под списком — управление:
- Все маркировки / Только последняя — сколько показывать здесь и отдавать в браузер.
- Дата, время и маркировка / Только маркировка — что передавать в браузер и сохранять в JSON.
- ⚖ Сравнивать — сравнивать каждую готовую маркировку с отмеченными эталонами.
- 💾 Сохранить JSON, 📂 Загрузить JSON (загруженные маркировки становятся эталонами), Очистить список — убирает строки с экрана и из браузера, в базе они остаются.
Вкладка «Эталоны» — список правильных маркировок
Эталоны нужны, когда на линии бывает несколько разных маркировок (разные сечения, партии, заказчики), и каждую прочитанную нужно найти в списке.
- 📂 Загрузить JSON — список из файла: наш JSON, массив строк, объекты с полем text или просто текст по строке на маркировку. Повторы убираются.
- ✓ Отметить все, ☐ Снять все, галочка у каждой строки — с какими эталонами сравнивать. ✖ Очистить эталоны — убрать список.
- Похожесть для совпадения, % — 100 значит знак в знак (без учёта пробелов и регистра). Ниже — допускаются ошибки печати и чтения.
- Исправлять по эталону от … % — если прочитанное похоже на отмеченный эталон не меньше указанного, маркировка записывается текстом эталона (исходное прочтение остаётся в журнале).
Вкладка «Начало и конец» — где кончается одна маркировка
Эти правила работают в режиме последовательной склейки (без образца), когда программа сама решает, где начинается и кончается маркировка:
- Текст начала — запись начинается, когда в зоне прочитан этот текст (например UTCAB). Пусто — с любого текста. Если надпись идёт по кругу, второе появление текста начала завершает маркировку. Включать текст начала в маркировку — оставлять его в результате.
- Пауза после конца, мс — столько ничего не записывать после готовой маркировки.
- Текст конца — маркировка заканчивается, когда прочитан этот текст (например BY или 2026).
- Время пустоты, мс — если столько в зоне нет текста, маркировка закончилась и сохраняется.
- Наибольшая длительность, с — для сплошной надписи без промежутков: каждые столько секунд — отдельная маркировка. 0 — без ограничения.
Пример: начало «UTCAB», конец «BY» — запишется «UTCAB … BY», дальше программа ждёт следующее «UTCAB». Сравнение без учёта регистра, похожие русские и латинские буквы считаются одинаковыми.
Вкладка «Распознавание» — зона, поворот, модели
- Зона на кадре, пиксели — X, Y, ширина и высота зоны на исходном кадре: подправить рамку точно, без мыши.
- Поворот текста в зоне — как повернуть зону, чтобы текст стал прямым. Текст идёт сверху вниз — «90° против часовой», снизу вверх — «90° по часовой». Повернуть само видео на экране можно на вкладке Video («Поворот видео»).
- Увеличение — мелкий текст читается лучше, если зону увеличить; «Авто» подбирает само.
- Наименьшая уверенность, % — строки, прочитанные с меньшей уверенностью, отбрасываются (блики, края букв).
- Наименьшая длина маркировки, знаков — более короткие результаты не сохраняются.
- Образец: нет новых знаков, мс — выдать итог — сколько ждать, если новых знаков образца не приходит (конвейер встал, зона пустая, текст не читается). По истечении итог выдаётся по прочитанному, и начинается новый анализ.
- Откуда приходит текст — с какой стороны зоны появляется новый текст. «Авто» определяет по кадрам, с подсказкой склейка надёжнее.
- Использовать видеокарту (GPU) — на NVIDIA с CUDA чтение идёт в разы быстрее.
- Буквы и Знаки — что может быть в маркировке: английские и русские слова, только английские или любые знаки; цифры и пробел — всегда, знаки (точка, тире, косая черта, № и др.) отмечаются галочками. Модель выбирает знак только из разрешённых — лишние не появляются, похожие угадываются точнее.
- Подбирать слова по словарю — распознанное слово (от 3 букв, не число и не код), похожее на слово из словаря не меньше заданного процента, заменяется правильным. Словарь — свои слова (по одному в строке) и, по галочке, слова из эталонов.
Ниже на этой вкладке — выбор моделей: Поиск строк (v3 — быстрая, v5 server — точнее, для видеокарты) и Чтение текста (кириллица, латиница и цифры; только латиница и цифры; латиница европейских языков; точная server-модель; или две модели сразу — строку читают обе, берётся более уверенный вариант). Недостающая модель скачивается кнопкой ⬇ Скачать. Кнопка ⚖ Сравнить модели на текущей зоне прогоняет последнюю вырезку зоны через все варианты — сразу видно, какая модель лучше читает именно вашу маркировку и сколько миллисекунд на это уходит.
Вкладка «База данных» — все маркировки хранятся
Каждая распознанная маркировка сохраняется в базе программы с датой, временем, камерой, текстом и результатом сравнения — независимо от того, что показано в списке на экране.
- 📤 Выгрузить базу (JSON) — все маркировки в файл для отчёта или передачи в учётную систему.
- 📥 Загрузить базу (маркировки → эталоны) — из выгрузки берутся только тексты маркировок, они становятся эталонами. Так проверенную смену можно сделать образцом для следующих.
- 🗑 Очистить базу — удалить все записи.
Вкладка «Сеть» — результат в браузере и в JSON
Отметьте Отправлять данные по сети — engiAI запустит HTTP-сервер (по умолчанию порт 8096). Любой компьютер или планшет в сети открывает страницу с маркировками, сравнением и эталонами в обычном браузере; ничего устанавливать не нужно. Кнопки 📋 Копировать и 🌐 Открыть в браузере берут адрес из списка.
| Адрес | Что отдаёт |
|---|---|
| / | страница: маркировки, сравнение, эталоны, JSON |
| /api/marks | маркировки — все или последняя, с датой или без (как выбрано в окне) |
| /api/marks?show=last&format=text | последняя маркировка простым текстом |
| /api/last | последняя маркировка |
| /api/state | состояние и текст в зоне прямо сейчас |
| /api/refs | эталоны; POST /api/refs — загрузить эталоны (JSON) |
| /api/export | вся база маркировок |
При первом запуске брандмауэр Windows может спросить разрешение для engiAI — разрешите доступ в нужных сетях.
Вкладка «Вход» — снимок по сигналу контроллера
Когда изделие приходит под камеру по сигналу (датчик, ПЛК, робот), отметьте Распознавать по сигналу входа (TCP). engiAI открывает TCP-сервер; каждый сигнал — один снимок зоны: текст распознаётся, сравнивается и сохраняется в базу так же, как в непрерывном режиме.
- Сеть — на каком сетевом адаптере ждать сигнал («Все сети» — на любом); можно вписать IP вручную. Порт — по умолчанию 8097.
- Сигнал — что считать командой. По умолчанию 1: текстом («1», «1\r\n») или байтом 0x01.
- Отвечать клиенту распознанным текстом — в ответ приходит строка с маркировкой, при сравнении — ещё OK или NG через табуляцию; NO TEXT — текст не найден, ERROR … — нет зоны или кадра.
- 📸 Снимок сейчас (проверка) — то же, что сигнал, но с кнопки. Проверить без контроллера можно программой TCP-UDP (клиент): адрес, порт, значение «1», «Отправить».
Вход и непрерывное распознавание работают одновременно: если отмечено и «Распознавание текста», программа продолжает следить за конвейером, а по каждому сигналу дополнительно делает снимок.
