ESP32-CAM и OV2640: Face Detection на Edge с AI-агентом ASI Biont — автоматизация контроля доступа

Введение: когда пропускной режим тормозит бизнес

Каждый день сотни сотрудников проходят через проходную, предъявляя бейджи или карточки. Охрана сверяет лица с фотографиями, тратя на каждого человека 5–10 секунд. В час пик у турникетов скапливаются очереди, а служба безопасности вынуждена работать на износ. Знакомая картина?

Решение — Edge AI и on-device ML. Установив камеру OV2640 на базе ESP32-CAM, можно распознавать лица прямо на периферии, не отправляя видеопоток в облако. Но как превратить «умную камеру» в полноценную систему контроля доступа? Ответ — интеграция с AI-агентом ASI Biont.

ASI Biont — это AI-агент, который умеет подключаться к любому устройству через диалог в чате. Он сам пишет код интеграции, настраивает протоколы и автоматизирует сценарии. В этой статье разберём, как связать ESP32-CAM с OV2640 и ASI Biont, чтобы сотрудники проходили за 0,5 секунды, а все события фиксировались автоматически.

Что за устройство и зачем его подключать к AI-агенту

ESP32-CAM — это компактная плата на базе чипа ESP32 с камерой OV2640 (2 Мп). Она поддерживает Wi-Fi, Bluetooth и может работать автономно. Главная фишка — возможность выполнять алгоритмы компьютерного зрения прямо на устройстве (edge inference). Например, библиотека face detection позволяет обнаруживать лица и отправлять только координаты или ROI-изображение, а не весь видеопоток.

Зачем подключать такую камеру к AI-агенту ASI Biont? Одинокая камера умеет только «видеть» лицо, но не знает, что с ним делать. ASI Biont добавляет логику управления: распознавание конкретного человека, сверка с базой, открытие турникета, запись времени прохода, уведомление охраны об инциденте. Всё это настраивается текстовыми командами в чате — без разработки сложного бэкенда.

Выбираем способ подключения: MQTT — стандарт IoT

ESP32-CAM — IP-устройство, которое работает по Wi-Fi. Для интеграции с ASI Biont есть несколько протоколов: HTTP API, MQTT, WebSocket. Мы выбрали MQTT — лёгкий протокол для умных устройств с минимальным потреблением трафика. Он идеально подходит для периферийных устройств с нестабильным каналом.

В ASI Biont поддержка MQTT реализована через Python-библиотеку paho-mqtt. AI-агент может подписаться на топик, куда камера публикует события, и отправлять команды обратно. Всё подключение настраивается через чат, без панелей управления.

Кейс: проход сотрудника через турникет

Сценарий

  1. Сотрудник подходит к проходной, ESP32-CAM с OV2640 делает кадр.
  2. Алгоритм face detection (например, библиотека facedetect) находит лицо и обрезает его.
  3. Плата отправляет маленькое изображение (или дескриптор лица) по MQTT в топик company/access/face.
  4. ASI Biont получает сообщение, сравнивает с базой разрешённых сотрудников (векторные метрики, например, евклидово расстояние).
  5. Если лицо найдено, AI-агент отправляет команду door_open в топик company/access/control.
  6. ESP32-CAM принимает команду, замыкает реле и открывает турникет.
  7. Время прохода автоматически фиксируется в журнале, в Telegram-бота уходит уведомление.

Пример кода на MicroPython для ESP32-CAM

Ниже приведён упрощённый код, который работает на ESP32-CAM с прошивкой MicroPython. Он использует библиотеку umqtt.simple для MQTT.

import network
import ubinascii
from umqtt.simple import MQTTClient
import time
import facedetect  # гипотетическая библиотека, на практике можно использовать Edge Impulse или OpenMV

# --- Настройки Wi-Fi ---
WIFI_SSID = "office_iot"
WIFI_PASS = "password"

# --- Настройки MQTT ---
MQTT_BROKER = "192.168.1.100"  # адрес брокера (например, Mosquitto)
MQTT_TOPIC_FACE = "company/access/face"
MQTT_TOPIC_CTRL = "company/access/control"

# --- Инициализация сети ---
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.connect(WIFI_SSID, WIFI_PASS)

while not sta.isconnected():
    time.sleep(0.5)

client = MQTTClient(client_id=ubinascii.hexlify(sta.config('mac')).decode(),
                    server=MQTT_BROKER)

# --- Обработка входящих команд ---
def command_callback(topic, msg):
    if msg == b'door_open':
        # Открытие реле (например, GPIO2)
        from machine import Pin
        relay = Pin(2, Pin.OUT)
        relay.value(1)
        time.sleep(1)
        relay.value(0)

client.set_callback(command_callback)
client.connect()
client.subscribe(MQTT_TOPIC_CTRL)

# --- Главный цикл ---
while True:
    # 1. Захват кадра (сокращено)
    frame = camera_capture()  # функция из библиотеки камеры

    # 2. Обнаружение лица
    faces = facedetect.detect(frame)
    if faces:
        # 3. Публикация события (можно отправить только координаты или изображение)
        # В реальности лучше отправить дескриптор лица, но для простоты - просто ID
        client.publish(MQTT_TOPIC_FACE, b"face_detected")

    # 4. Обработка входящих команд
    client.check_msg()
    time.sleep(0.1)

Этот код — заготовка. В реальном проекте вы будете использовать готовые библиотеки для face detection, например, esp32-cam от Espressif или предобученную модель TensorFlow Lite для MicroPython.

Обратная сторона: как ASI Biont обрабатывает событие

На стороне AI-агента подписка на тот же топик. Используя библиотеку paho-mqtt, агент получает сообщение и запускает сценарий. Вот пример кода, который AI-агент может сгенерировать автоматически после того, как вы опишете задачу в чате:

import paho.mqtt.client as mqtt
import requests

# Функция, вызываемая при получении события с камеры
def on_face_detected(client, userdata, message):
    # 1. Извлекаем лицо (в реальности из сообщения пришёл бы дескриптор)
    # 2. Сверяем с базой данных
    # Здесь упрощение: проверяем, есть ли ID в списке разрешённых
    allowed_ids = ["sasha", "maria", "petr"]
    person_id = extract_person_id_from_message(message.payload)

    if person_id in allowed_ids:
        # Отправляем команду на открытие
        client.publish("company/access/control", "door_open")
        # Фиксируем время в журнале
        log_to_db(person_id, datetime.now())
        # Отправляем уведомление в Telegram
        requests.post("https://api.telegram.org/bot<YOUR_BOT_TOKEN>/sendMessage",
                      data={"chat_id": "@security_channel", "text": f"Проход разрешён: {person_id}"})
    else:
        # Отправляем тревогу
        requests.post("https://api.telegram.org/bot<YOUR_BOT_TOKEN>/sendMessage",
                      data={"chat_id": "@security_channel", "text": f"Неизвестный: {person_id}"})

# Настройка клиента
client = mqtt.Client()
client.connect("192.168.1.100", 1883)
client.subscribe("company/access/face")
client.on_message = on_face_detected
client.loop_forever()

Этот код ASI Biont пишет сам. Вам не нужно быть Python-разработчиком — достаточно описать в чате: «Слушай MQTT топик company/access/face, сверяй с базой сотрудников и отправляй команду на открытие». AI-агент сгенерирует и запустит этот скрипт.

Как подключить ESP32-CAM к ASI Biont через чат

ASI Biont не имеет панели управления, где нужно вручную добавлять устройства. Всё делается через диалог в чате. Ниже — пример реального диалога.

Пользователь:

У меня есть ESP32-CAM с OV2640, подключённая к Wi-Fi. Она публикует изображения в MQTT топик company/access/face на брокере 192.168.1.100. Подключись к этому брокеру и обрабатывай события.

ASI Biont:

Окей, подключаюсь. Уточните, как определить ID сотрудника по снимку? Есть ли готовый API или используется локальная база?

Пользователь:

Создай простую базу в SQLite. Назови колонки id, name, face_vector. При получении изображения вычисляй вектор через FaceNet, сравнивай с базой.

ASI Biont:

Готово. Я написал скрипт на Python, который подписывается на топик, вычисляет вектор и открывает турникет при совпадении. Также настроил Telegram-уведомления в канал "Безопасность". Скрипт выполняется в sandbox и работает 24/7.

Через несколько минут после старта диалога у вас работает полноценный контроль доступа.

Почему это выгодно: AI делает интеграцию за секунды

Ручная разработка такого решения заняла бы несколько дней: нужно писать код приёма MQTT, сопоставление с базой, обработку ошибок, логирование, интеграцию с Telegram. С ASI Biont всё это сводится к диалогу в чате. AI-агент сам выбирает библиотеки, пишет код, запускает и поддерживает его.

Ключевые преимущества

  • Скорость внедрения — первый рабочий прототип появляется за 10–15 минут.
  • Универсальность — ASI Biont одинаково хорошо работает с ESP32, Arduino, промышленными контроллерами, GPS-трекерами и даже с устройствами, для которых нет готовых библиотек.
  • Снижение нагрузки на охрану — автоматическая фиксация прохода, быстрый поиск по событиям.
  • Прозрачность — все данные в журнале, можно интегрировать с 1С, SAP или любой внутренней системой через HTTP API.

Сравнение с традиционным подходом

Критерий Традиционная разработка Интеграция с ASI Biont
Время разработки 3-5 дней 1 час
Необходимость знать Python Высокая Низкая (описываете словами)
Стоимость внедрения Дорого (нанимать разработчика) Подписка на AI-агента
Гибкость Каждое изменение требует кода Описываете новую логику в чате

Важный момент: execute_python — подключение к любому устройству

Хотите подключить нестандартный GPS-трекер с UART-интерфейсом или промышленный контроллер по Modbus? Не нужно ждать, пока разработчики ASI Biont добавят поддержку. Благодаря функции execute_python вы можете в чате описать, какой порт и протокол использовать, и AI-агент сам напишет код на Python с использованием pyserial, paramiko, paho-mqtt, pymodbus, aiohttp или opcua-asyncio. Например, для COM-порта можно использовать Hardware Bridge (bridge.py), который скачивается из дашборда и запускается командой:

python bridge.py --token=ВАШ_ТОКЕН --ports=COM3 --baud 115200 --rate=10

После запуска моста ASI Biont получит доступ к COM-порту и сможет обмениваться данными через industrial_command(protocol='modbus', command='read_holding_registers', ...).

Для ESP32-CAM такой способ не нужен — достаточно Wi-Fi и MQTT. Но если у вас есть устройство на RS-485, вы знаете, как это выручает.

Подводные камни и практические советы

На основе опыта внедрения подобных решений дам несколько рекомендаций:

  1. Не перегружайте Wi-Fi. ESP32-CAM передаёт изображение только при обнаружении движения. Настройте детекцию в самой камере, чтобы не слать пустые кадры.
  2. Используйте локальный MQTT-брокер. Если интернет нестабилен, ставьте Mosquitto на мини-ПК в локальной сети. ASI Biont может подключаться и к локальному брокеру.
  3. Тестируйте face detection на реальных условиях. На точность влияют освещение и угол наклона камеры. Лучше сразу выбрать модель, устойчивую к изменениям.
  4. Безопасность. Меняйте пароли Wi-Fi, используйте TLS для MQTT. ASI Biont поддерживает шифрованные подключения.

Вывод: Edge AI + ASI Biont = умный пропускной пункт

Интеграция ESP32-CAM с OV2640 и AI-агента ASI Biont — это яркий пример того, как современные подходы Edge AI и автоматизация меняют рутину. Вы получаете систему контроля доступа, которая работает без участия охраны, обрабатывает лица на периферии и мгновенно реагирует на события. Время прохода сокращается до 0,5 секунды, а фиксация времени становится автоматической.

Не нужно быть инженером-программистом: просто опишите задачу в чате ASI Biont, и AI-агент сам напишет код, подключится к вашему ESP32-CAM и запустит процесс. Попробуйте сами на asibiont.com — создайте своего агента, подключите устройство и убедитесь, что интеграция занимает минуты, а не недели.

← Все статьи

Комментарии