Передовая практика | Используйте WebSocket для создания службы сравнения лиц и тел в реальном времени
Передовая практика | Используйте WebSocket для создания службы сравнения лиц и тел в реальном времени

Чтобы улучшить взаимодействие с пользователем, увеличить скорость проверки и повысить безопасность во время процесса проверки, продукты face-core будут использовать некоторые технологии связи в реальном времени, которые будут напоминать пользователям о необходимости корректировать свою позу в реальном времени и направлять пользователей выполнять действия в реальном времени. движения тела и выполнять обнаружение тела в реальном времени. Face Kernel использует две технологии связи в реальном времени — WebSocket и WebRTC.

В этой статье в основном будет представлен WebSocket, используемый в плавающем слое тела ядра лица.

Основная технология, используемая живыми телами с плавающим слоем — WebSocket

в живых организмах,Нашей основной особенностью является «реальное время» — определение расстояния до лица, окклюзии лица и т. д. в реальном времени. До рождения WebSocket,Браузеру необходимо запрашивать данные с сервера посредством HTTP-запросов. Хотя последующие версии HTTP поддерживают или умные разработчики реализовали различные решения для запроса данных «квази-реального времени»: опрос, длинный опрос、Долгая связь и т.д.。Но эти методы неотделимы отЗапрос/Ответ,То есть браузеру необходимо инициировать запрос,Сервер имеет право отправить ответ.

Опрос и длинный опрос

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

Процесс голосования выглядит следующим образом:

  1. Клиент инициирует запрос
  2. Сервернемедленноответ,Независимо от того, есть новые данные или нет.
  3. После ожидания n секунд (то есть интервала опроса) клиент снова инициирует запрос.
  4. Сервер все еще отвечает.
  5. Так туда и обратно.

Видно, что если обновление данных происходит между двумя опросами (вообще говоря, интервал опроса составляет секунды, поэтому данные почти всегда будут появляться между двумя опросами), то самые последние данные будут проходить через определенный промежуток времени. в доставке.

Поэтому умные разработчики изобрели решение для длительного опроса.

длинный Процесс голосования выглядит следующим образом:

  1. Клиент инициирует запрос。
  2. Сервер не отвечает,Вместо этого он ждет, пока не поступит обновление данных, прежде чем ответить клиенту. (конечно,Если после определенного времени ожидания обновления данных по-прежнему нет, он ответит. )
  3. После того, как клиент обработает ответ,немедленно Начать дальшедлинный опроспросить。
  4. Так туда и обратно.

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

Короткое соединение и длинное соединение

Опрос и длинный опрос часто сравнивают с короткими связями и длинными связями. В общем, короткая ссылка означает, что для связи с каждым запросом устанавливается новое TCP-соединение, а длинное соединение означает, что одно и то же TCP-соединение повторно используется для нескольких запросов;

Однако, будь то короткое или длинное соединение, опрос или длительный опрос, все обновления данных требуют, чтобы клиент инициировал запрос, прежде чем сервер сможет его отправить. Однако в процессе существования плавающего слоя многие обновления данных поступают пакетами и должны быть доставлены клиенту вовремя, поэтому необходим метод связи, более эффективный в режиме реального времени.

WebSocket

WebSocket обеспечивает возможность двусторонней связи между браузером и сервером. Подобно Socket, это протокол прикладного уровня, основанный на TCP-соединении. Используйте протокол HTTP для подключения. После успешного установления соединения оба конца могут активно отправлять информацию другой стороне.

Как WebSocket устанавливает соединение?

С помощью протокола HTTP вы можете подключиться к TCP-соединению, на котором основан HTTP, надеть собственную маску и взаимодействовать по собственному протоколу.

Чтобы оставаться совместимым с HTTP-серверами, WebSocket предпочитает использовать протокол HTTP для установления соединений. Сначала клиент отправит HTTP-запрос на обновление с запросом протокола обновления:

Язык кода:txt
копировать
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Это очень стандартный HTTP-запрос Get. Внутри есть ключевой заголовок:

  1. Обновление: обновление — это поле заголовка, используемое для определения протокола преобразования в HTTP1.1. Это значит, что если сервер его поддерживает, переключите текущий протокол прикладного уровня, но TCP-соединение на его основе не будет перемещаться. Например, перейдите на WebSocket и HTTP2.0.

После того, как сервер получит запрос на переключение протокола, он вынесет оценку своих собственных возможностей. Если он поддерживает протокол, он ответит успешным ответом на обновление — протоколы переключения:

Язык кода:txt
копировать
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

На этом этапе TCP-соединение на основе HTTP было повторно использовано как соединение WebSocket. Ниже представлена ​​версия nodejs демо-версии сервера веб-сокетов.

Язык кода:javascript
копировать
httpserver.on('upgrade', function upgrade(request, socket, head) {
    wsserver.handleUpgrade(request, socket, head, function done(ws) {
        ws.on('message', (data, isBinary) => {
            ws.send('message: ' + data + 'recieved!')
        })
    });
})

Поскольку установление соединения WebSocket основано на протоколе HTTP, многие студенты ошибочно полагают, что WebSocket — это протокол, основанный на протоколе HTTP. Но на самом деле WebSocket не имеет ничего общего с HTTP после установления соединения. Как и протокол HTTP, это протокол прикладного уровня, основанный на протоколе TCP.

Формат кадра WebSocket

WebSocket использует собственный двоичный формат кадра для разделения каждого сообщения приложения на один или несколько кадров. Узел ожидает получения полного сообщения, прежде чем собирать и обрабатывать его.

Язык кода:txt
копировать
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-------+-+-------------+-------------------------------+
 |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
 |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
 |N|V|V|V|       |S|             |   (if payload len==126/127)   |
 | |1|2|3|       |K|             |                               |
 +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
 |     Extended payload length continued, if payload len == 127  |
 + - - - - - - - - - - - - - - - +-------------------------------+
 |                               |Masking-key, if MASK set to 1  |
 +-------------------------------+-------------------------------+
 | Masking-key (continued)       |          Payload Data         |
 +-------------------------------- - - - - - - - - - - - - - - - +
 :                     Payload Data continued ...                :
 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
 |                     Payload Data continued ...                |
 +---------------------------------------------------------------+

В основном вводит два ключевых поля:

  • ПЛАВНИК. Занимает 1 бит. Указывает, есть ли последующие кадры. Сообщение может быть разбито на несколько кадров.,После того как получатель определяет, что это последний кадр, он объединяет предыдущие кадры, чтобы сформировать сообщение.。В TCP нет липких пакетов. Липкие пакеты — это проблема, вызванная неразумной конструкцией протокола прикладного уровня.
  • opcode。занимать4bit。
    • 8 представляет кадр закрытия (закрытия соединения). Эту команду управления необходимо отправлять при активном закрытии соединения. В противном случае веб-сокет сообщит об ошибке 1006. Этот код ошибки можно использовать, чтобы определить, закрыто ли соединение нормально или из-за других ненормальных условий.
    • 9 означает пинг-фрейм,10 представляет собой рамку для игры в понг. Механизм пинг-понга используется, когда в течение длительного времени нет обмена сообщениями.,Проверьте, не нарушено ли соединение. В настоящее время сервер может отправлять пинги только в браузер.,Браузер возвращаетсяpongинформация。Браузер на данный момент не имеет открытого интерфейса для отправки управляющих инструкций.

Реализация простой службы сравнения в реальном времени с использованием WebSocket.

Мы можем просто использоватьОбнаружение и анализ лицИнтерфейс сСравнение лицИнтерфейс предоставляет услугу обнаружения и сравнения лиц в режиме реального времени.。

Возможности ИИ,Мы будем использовать два интерфейса, предоставленные Tencent Cloud.Обнаружение и анализ лицИнтерфейс сСравнение лиц

  • Интерфейс «Обнаружение и анализ лиц» используется для определения положения и окклюзии лица.,Возврат в соответствии с интерфейсом,Предлагает пользователю отрегулировать свою позу.
  • Интерфейс «Сравнение лиц» используется для сравнения захватов кадров, поступающих с внешнего интерфейса, со сравнениями, хранящимися на стороне сервера.,получить сходство,Используется для определения того, являются ли они одним и тем же человеком.

Внешний интерфейс,мы используемgetUserMediaAPIОткройте камеру для получения видеопотока;использоватьWebSocketAPI与Сервер建立WebSocketсоединять。соединять建立成功后,Вы можете захватывать кадры из видеопотока,Отправлено на сервер для обнаружения.

Серверная часть,мы можем использоватьNodejs+wsэтотnpmПакет создает простойWebSocketСервер。Сервер接到截帧之后就可以调用腾讯云提供的интерфейс进行检测与验证。

Испытайте плавающее живое тело

Живое тело с плавающим слоем лицевого ядра также является решением для обнаружения живого тела в реальном времени, основанным на вышеупомянутом решении. Оно также обрабатывает больше деталей, чтобы сделать процесс более плавным. Вы можете выполнить следующие шаги, чтобы подать заявку и испытать услугу «плавающий слой» для лица и тела in vivo.

1. Активируйте услугу проверки лица

Узнал об этом на официальном сайте Tencent Cloud. Облачный искусственный интеллект Tencent лицо ядро ​​тело продукта, нажмите, чтобы подать заявку на бесплатную пробную версию и испытать его.

2. Подать заявку на бизнес-процесс и получить RuleId

лицо ядро ​​​тело После успешной активации услуги,Вы можете перейти в консоль для создания бизнес-процесса:https://console.cloud.tencent.com/faceid

Выберите «WeChat H5 (плавающий слой/обычный режим)», введите имя официальной учетной записи для тестирования и нажмите «Далее».

Затем заполните соответствующую информацию согласно подсказкам на консоли.

После завершения приложения проверьте свой RuleId на консоли.

3. Вызовите интерфейс предварительной аутентификации, чтобы получить соединение с опытом.

我们可以использоватьAPI ExplorerпозвонитьАутентификация по настоящему имениинтерфейс,Подключитесь к опыту. Входной параметр RuleId заполняется RuleId, примененным на предыдущем шаге. Нажмите, чтобы начать вызов.

4. Используйте WeChat, чтобы открыть соединение с опытом.

После успешного вызова интерфейса DetectAuth в обратном пакете будет URL-адрес. Вы можете открыть его с помощью WeChat, чтобы проверить.

Язык кода:json
копировать
{
    "Response": {
        "BizToken": "CE661F1A-0F1E-45BD-BE13-34C05CEA7681",
        "Url": "https://xxxxxxxxxxxxx",
        "RequestId": "f904f4cf-75db-4f8f-a5ec-dc4f942c7f7a"
    }
}

Справочная документация

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose