К содержимому
MoranaLabs.
Инженерные гайды4 мин чтения0 просмотров

Распознавание номеров контейнеров и вагонов на гейте: как срезать демередж без западного TOS 

95% точности на гейте — мусорная метрика, если один перепутанный символ стоит терминалу 60 000 рублей демереджа. Рассказываю, как выстроить edge-инференс, внедрить валидацию ISO 6346 и заменить ушедший Navis OCR.

0xReality

95% точности в лабораторном датасете — это мусор, когда речь идет про распознавание номеров контейнеров и вагонов на гейте терминала. Один перепутанный символ означает неверную стивидорную операцию. Контейнер уезжает не в тот штабель, фура встает, а терминал ловит демередж от 10 до 60 тысяч рублей в сутки за бокс. Мое мнение: если ваш ИИ просто читает буквы и верит им на слово, вы не автоматизировали въезд, а автоматизировали генерацию убытков.

«Ой, да ладно, это же обычный OCR. Номера машин давно читают на любой парковке, в чем проблема прочесть ящик?» — типичное возражение от интеграторов, которые никогда не стояли на въездной рампе в ноябре. Контейнер — не автономер. Автономер плоский, чистый, светоотражающий и висит в ожидаемом месте. Номер на сорокафутовом боксе может быть размазан ржавчиной, закрашен граффити, заклеен грязью, нанесен на гофру с искажением перспективы и продублирован на трех гранях по-разному. И это все в дождь, ночью, под углом.

ISO 6346: почему ИИ нельзя пускать в прод без математики

Здесь мы сталкиваемся с реальностью, где хайп ломается о бизнес-логику. В MoranaLabs наш подход категоричен: голая нейросеть не имеет права принимать решение на гейте. Контейнерный номер стандарта ISO 6346 — это 4 буквы кода владельца, 6 цифр серийного номера и одна контрольная цифра. Эта цифра считается по модулю 11 от суммы весов предыдущих символов.

Если распознавание ISO 6346 нейросеть выдает как HLXU 123456 7, мы не отправляем это сразу в базу. Мы прогоняем чек-сумму.

def validate_iso6346(container_number: str) -> bool:
    if len(container_number) != 11:
        return False
    chars = container_number[:10]
    check_digit = int(container_number[10])
    
    total = 0
    for i, char in enumerate(chars):
        # Буквы конвертируются в числа (A=10, B=12... исключая кратные 11)
        val = char_to_int(char) if char.isalpha() else int(char)
        total += val * (2 ** i)
        
    return (total % 11) % 10 == check_digit

Ошибка? Мы не выкидываем кадр и не зовем человека, а используем логику восстановления: перебираем вероятные ошибки детекции (буква O вместо цифры 0, B вместо 8) и ищем валидный хэш. Только так работает полноценная замена Navis OCR, а не студенческая поделка.

Edge vs Server: где гонять инференс, чтобы шлагбаум не тупил

«Западные TOS под санкциями, лицензий на Navis N4 нет, железо дорогое — как это вообще интегрировать?»

Западный софт ушел, и это отличный повод перестать платить за монолиты, которые требовали переписывания всей учетки. Замена строится прагматичнее. Нам не нужно менять вашу 1С, ERP или самописный софт. Мы берем RTSP-потоки с уже висящих на рамках камер.

Пайплайн суров и линеен: детекция зоны (найти ящик) → OCR (прочитать символы) → чек-сумма ISO 6346 → кросс-сверка. Последнее — критично. Если валидация прошла, мы лезем в гейт-лист или букинг на сегодня. Нет такой машины в ожидании? Режем ложное срабатывание.

Дальше физика. Оператор вбивает номер руками за 15-20 секунд (если не ошибся). Распознавание должно укладываться в миллисекунды, потому что фура не будет стоять и ждать, пока кластер в облаке переварит тяжелое видео. У нас есть жесткий бюджет на кадр и латентность шлагбаума. Где крутить веса?

Edge-вычисления на рампе: ставим промышленные железки прямо в шкаф у гейта. Плюсы: сеть терминала может лечь, а шлагбаум продолжит работать. Минусы: дорого масштабировать на 20 полос, тяжело охлаждать летом.
Локальный GPU-сервер: оптика от камер сводится в серверную. Один жирный сервер тянет инференс со всех линий. Никакого облака — данные не покидают периметр порта.

Мы чаще разворачиваем локальный сервер, если сеть позволяет гнать RTSP без потерь. Это банально дешевле в поддержке.

Экономика: когда окупается автоматизация въезда контейнеровоза

«Это все игрушки ИТ-отдела, мне нужно резать косты».

Согласен. Давайте считать. Типовой сухой порт пропускает сотни машин в сутки. Ручной ввод — это время оператора. Но главная цена не в зарплате тальмана, а в цене ошибки. Внедряя OCR номеров вагонов, терминал срезает сразу три слоя убытков:

  • Время простоя фуры из-за ручных разборок на гейте.
  • Штрафы за неверную погрузку на фитинговую платформу.
  • Демередж за потерянный в штабелях контейнер.

Замена ручного труда на инференс окупается за 4-8 месяцев. Целевая метрика успешного внедрения — это не абстрактная «точность распознавания», а конкретная доля автопроезда без участия оператора. Target-значение, под которым мы подписываемся — 80–95%. Оставшиеся 5-20% — это убитые в хлам, заржавевшие номера, не читаемые даже человеческим глазом. Они уходят на ручной разбор.

Пилот под ключ разворачивается за 4–6 недель. Вы даете RTSP или видеоархив с вашего гейта — мы прогоняем детекцию на ваших реальных данных со всем снегом и грязью, и выдаем расчет окупаемости.

  • #Computer Vision
  • #Edge Computing
  • #Logistics
  • #OCR
ПоделитьсяTelegramX
рассылка

Новые статьи — на почту

Лонгриды про ML в проде, edge и компьютерное зрение — сразу после выхода.

Канал в Telegram: morana.log

Без спама. Нажимая «Подписаться», соглашаетесь с обработкой персональных данных

бесплатный pdf-гайд

Edge AI или облако: когда тащить нейросеть на железо

Признаки, фреймворк выбора и прикидка экономии — короткий PDF-гайд на почту.

PDF · 5 страниц · без спама. Нажимая «Получить», соглашаетесь с обработкой персональных данных

Читать дальше
— заявка

Опишите задачу  ответим как инженеры. 

Оставьте имя и Telegram — остальное обсудим. Без брифов на 40 слайдов и звонков по три раза.

Отвечаем за пару часовотвечает инженер, а не отдел продажNDA по запросу

Сюда напишем — это быстрее всего

Или сразу написать в Telegram

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