Автоматизация контрольно-пропускных пунктов (КПП) — частая задача на производственных и складских площадках. Рассмотрим ситуацию, когда у нас есть одна точка въезда, которая одновременно является и выездом, и нам необходимо не только распознавать номера автомобилей, но и вести точный учет того, кто сейчас находится на территории. В этой статье мы разберем архитектурные подходы, технические нюансы выбора оборудования и программную реализацию интеграции с 1С.
Задача делится на три уровня:
Проанализируем основные варианты реализации, которые обсуждались в профессиональном сообществе и применяются на практике.
Это самый современный и надежный подход, который позволяет снять нагрузку с серверов. Камеры (например, брендов Hikvision, Dahua, Tiandy) имеют встроенный процессор, который сам ищет номер в кадре и распознает его.
Как это работает с 1С:
Камера настраивается на отправку HTTP-запроса (Webhook) при событии «Распознан номер». 1С выступает в роли веб-сервера.
Разберем реализацию на стороне 1С. Нам понадобится создать объект HTTPСервис. Назовем его, например, GateIntegration. В нем создадим шаблон URL /event с методом POST.
Пример кода обработки запроса от камеры:
Функция EventPOST(Запрос)
// Читаем тело запроса (обычно приходит JSON или XML)
СтрокаJSON = Запрос.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
ДанныеСобытия = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
НомерАвто = ДанныеСобытия.plateNumber; // Имя поля зависит от модели камеры
Направление = ДанныеСобытия.direction; // Если камера умеет определять направление
// Запускаем бизнес-логику в фоновом режиме или сразу
ЗафиксироватьПроезд(НомерАвто, Направление);
Ответ = Новый HTTPСервисОтвет(200);
Возврат Ответ;
КонецФункции
Такой подход исключает необходимость держать промежуточный сервер с Windows и тяжелым ПО для видеонаблюдения.
Если камер много или требуется сложная логика охраны, используют связку "Обычная камера + Сервер с ПО". В теме упоминались такие продукты как Трассир и CVS Авто. Также на рынке популярны Автомаршал и Macroscop.
Преимущества:
Интеграция с 1С:
Ранее часто использовали прямое чтение базы данных СКУД из 1С, но мы не рекомендуем этот метод (блокировки, риск повредить базу). Лучше использовать:
Существуют внешние компоненты (например, от ВесыСофт), которые позволяют захватывать видеопоток и распознавать номера прямо внутри интерфейса 1С. Однако, как показывает опыт, качество распознавания таких решений сильно зависит от освещения. Грязные номера, сумерки или блики от солнца могут сделать систему неработоспособной.
Для энтузиастов существует вариант на Python с использованием библиотек OpenCV, Nomeroff Net или YOLO. Это работает так: Python-скрипт забирает RTSP-поток с камеры, распознает номер и отправляет его в 1С через HTTP.
В исходной задаче есть важный нюанс: въезд и выезд осуществляются через одни ворота. Просто распознать номер недостаточно — системе нужно понять, машина въезжает или выезжает.
Рассмотрим способы решения этой логической задачи:
Способ 1. Аппаратный (Индукционные петли или фотоэлементы)
Это самый надежный метод. В асфальт закладываются две индукционные петли или ставятся два ряда фотоэлементов. По последовательности их срабатывания определяется вектор движения.
Эти сигналы заводятся на тревожные входы камеры или контроллера, и в 1С приходит событие уже с флагом направления.
Способ 2. Две камеры
Устанавливаются две камеры, направленные в разные стороны. Одна смотрит на передний номер (при въезде), другая — в "спину" (при выезде), или наоборот. В 1С мы понимаем направление по тому, с какой камеры (ID камеры) пришел сигнал.
Способ 3. Программный (Виртуальные линии)
В софте (Трассир, Автомаршал, или в настройках смарт-камеры) рисуются две линии. Если центр номера пересек линию 1, а потом линию 2 — это въезд. Этот метод дешевле, но может давать сбои, если машина остановилась посередине и сдала назад.
Чтобы в любой момент времени знать, какие машины находятся на площадке, нам недостаточно просто справочника. Наилучшим образом подойдет РегистрНакопления (обороты) или логика на основе РегистрСведений.
Посмотрим на структуру данных, если мы используем РегистрСведений. Назовем его ЖурналПроездов.
ТранспортноеСредство (Справочник).Статус (Перечисление: НаТерритории, ЗаТерриторией).ВремяСобытия, Фотография (ссылка или двоичные данные).Однако для получения списка "Кто сейчас внутри" удобнее использовать РегистрНакопления вида "Остатки".
// Пример записи движения при въезде
НаборЗаписей = РегистрыНакопления.АвтоНаТерритории.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументПроезда);
Движение = НаборЗаписей.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход; // Приход = Въезд
Движение.Период = ТекущаяДата();
Движение.ТранспортноеСредство = НайденноеТС;
НаборЗаписей.Записать();
При выезде мы делаем движение ВидДвиженияНакопления.Расход.
Тогда отчет "Машины на площадке" строится простым запросом к виртуальной таблице Остатки. Те, у кого остаток > 0 — находятся внутри.
В обсуждениях часто встречается мнение, что достаточно любой веб-камеры. Это ошибка. Для стабильного распознавания, особенно ночью, камера должна обладать специфическими функциями:
Для реализации надежной системы учета транспорта: