Как организовать видеонаблюдение, распознавание номеров и подсчет транспорта с интеграцией в 1С?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Промышленность, строительство и АПК
← На главную

Автоматизация контрольно-пропускных пунктов (КПП) — частая задача на производственных и складских площадках. Рассмотрим ситуацию, когда у нас есть одна точка въезда, которая одновременно является и выездом, и нам необходимо не только распознавать номера автомобилей, но и вести точный учет того, кто сейчас находится на территории. В этой статье мы разберем архитектурные подходы, технические нюансы выбора оборудования и программную реализацию интеграции с 1С.

Постановка задачи и выбор архитектуры

Задача делится на три уровня:

  1. Аппаратный уровень: получение качественного изображения номера в любых условиях (день, ночь, грязь, фары).
  2. Уровень распознавания (OCR): преобразование картинки в текст (номер автомобиля).
  3. Уровень бизнес-логики (1С): решение, пускать ли машину, и фиксация факта въезда или выезда.

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

Вариант 1: Использование камер с аналитикой на борту (LPR/ANPR)

Это самый современный и надежный подход, который позволяет снять нагрузку с серверов. Камеры (например, брендов 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 и тяжелым ПО для видеонаблюдения.

Вариант 2: Специализированное ПО (Трассир, Автомаршал, CVS)

Если камер много или требуется сложная логика охраны, используют связку "Обычная камера + Сервер с ПО". В теме упоминались такие продукты как Трассир и CVS Авто. Также на рынке популярны Автомаршал и Macroscop.

Преимущества:

Интеграция с 1С:

Ранее часто использовали прямое чтение базы данных СКУД из 1С, но мы не рекомендуем этот метод (блокировки, риск повредить базу). Лучше использовать:

  1. Файловый обмен: ПО СКУД пишет XML/TXT файл в папку, 1С читает его регламентным заданием.
  2. TCP/IP сокеты: 1С через внешнюю компоненту слушает порт.
  3. HTTP API: Современное ПО СКУД само умеет дергать веб-сервисы 1С (аналогично примеру выше).

Вариант 3: Нативные компоненты для 1С и DIY

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

Для энтузиастов существует вариант на Python с использованием библиотек OpenCV, Nomeroff Net или YOLO. Это работает так: Python-скрипт забирает RTSP-поток с камеры, распознает номер и отправляет его в 1С через HTTP.

Проблема "Одни ворота на въезд и выезд"

В исходной задаче есть важный нюанс: въезд и выезд осуществляются через одни ворота. Просто распознать номер недостаточно — системе нужно понять, машина въезжает или выезжает.

Рассмотрим способы решения этой логической задачи:

Способ 1. Аппаратный (Индукционные петли или фотоэлементы)

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

Эти сигналы заводятся на тревожные входы камеры или контроллера, и в 1С приходит событие уже с флагом направления.

Способ 2. Две камеры

Устанавливаются две камеры, направленные в разные стороны. Одна смотрит на передний номер (при въезде), другая — в "спину" (при выезде), или наоборот. В 1С мы понимаем направление по тому, с какой камеры (ID камеры) пришел сигнал.

Способ 3. Программный (Виртуальные линии)

В софте (Трассир, Автомаршал, или в настройках смарт-камеры) рисуются две линии. Если центр номера пересек линию 1, а потом линию 2 — это въезд. Этот метод дешевле, но может давать сбои, если машина остановилась посередине и сдала назад.

Организация хранения данных в 1С

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

Посмотрим на структуру данных, если мы используем РегистрСведений. Назовем его ЖурналПроездов.

Однако для получения списка "Кто сейчас внутри" удобнее использовать РегистрНакопления вида "Остатки".


// Пример записи движения при въезде
НаборЗаписей = РегистрыНакопления.АвтоНаТерритории.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументПроезда);
    
Движение = НаборЗаписей.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход; // Приход = Въезд
Движение.Период = ТекущаяДата();
Движение.ТранспортноеСредство = НайденноеТС;
    
НаборЗаписей.Записать();

При выезде мы делаем движение ВидДвиженияНакопления.Расход. Тогда отчет "Машины на площадке" строится простым запросом к виртуальной таблице Остатки. Те, у кого остаток > 0 — находятся внутри.

Важные технические нюансы (почему "любая камера" не подойдет)

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

  1. WDR (Wide Dynamic Range): Аппаратный широкий динамический диапазон. Позволяет видеть номер, даже если в камеру светят фары или солнце. Без WDR номер будет белым пятном.
  2. Ручная регулировка выдержки (Shutter Speed): Это критически важно. Ночью автоматика камеры пытается сделать картинку ярче, увеличивая время выдержки (например, до 1/25 сек). Любое движение машины приведет к смазыванию номера. Нам нужно принудительно выставить выдержку около 1/500 или 1/1000 сек. Картинка станет темной, но номер будет четким.
  3. HLC (Highlight Compensation): Компенсация засветки от фар. Камера затемняет яркие участки, чтобы проявить детали номера.

Итог

Для реализации надежной системы учета транспорта:

← На главную