Передовая практика | Используйте 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
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.