Mejores prácticas | Utilice WebSocket para crear un servicio de comparación de rostros y cuerpos en tiempo real

Para mejorar la experiencia del usuario, aumentar la velocidad de verificación y mejorar la seguridad durante el proceso de verificación, los productos face-core introducirán algunas tecnologías de comunicación en tiempo real para recordar a los usuarios que ajusten su postura en tiempo real, guiarlos para realizar movimientos corporales en vivo, y realizar detección de cuerpos vivos en tiempo real. Face Kernel utiliza dos tecnologías de comunicación en tiempo real: WebSocket y WebRTC.

Este artículo presentará principalmente WebSocket utilizado en la capa flotante del cuerpo central de la cara.

La tecnología central utilizada por los cuerpos vivos de capa flotante: WebSocket

En el cuerpo vivo de capa flotante, nuestra característica principal es el "tiempo real": detección en tiempo real de la distancia y la oclusión del rostro, etc. Antes del nacimiento de WebSocket, el navegador necesitaba solicitar datos del servidor a través de solicitudes HTTP. Aunque las versiones HTTP posteriores han sido compatibles o los desarrolladores inteligentes han implementado varias soluciones de solicitud de datos en "tiempo casi real": sondeo, sondeo largo, conexiones largas, etc. Pero estos métodos son inseparables del par Solicitud/Respuesta , es decir, el navegador necesita iniciar una solicitud antes de que el servidor esté calificado para enviar una respuesta.

Sondeo y sondeo largo

El "tiempo real" inicial no es realmente tiempo real, pero el cliente pregunta al servidor de vez en cuando si hay datos nuevos, y el intervalo de sondeo del cliente determina qué tan en tiempo real son los datos.

Insertar descripción de la imagen aquí

El proceso de votación es el siguiente:

  1. El cliente inicia la solicitud
  2. El servidor responde inmediatamente , independientemente de si hay datos nuevos o no.
  3. Después de esperar n segundos (es decir, un intervalo de sondeo), el cliente inicia una solicitud nuevamente.
  4. El servidor todavía responde inmediatamente.
  5. Así que de ida y vuelta.

Se puede ver que si la actualización de datos ocurre entre dos encuestas (en términos generales, el intervalo de encuesta es en segundos, por lo que los datos casi siempre aparecerán entre dos encuestas), entonces los últimos datos pasarán por un cierto período de tiempo. en la entrega.

Entonces, los desarrolladores inteligentes inventaron una solución de sondeo a largo plazo.

Insertar descripción de la imagen aquí

El proceso de votación larga es el siguiente:

  1. El cliente inicia una solicitud.
  2. El servidor no responde inmediatamente, sino que espera hasta que llegue la actualización de datos antes de responder al cliente. (Por supuesto, si aún no hay actualización de datos después de un cierto tiempo de espera, responderá).
  3. Después de que el cliente procesa la respuesta, inicia inmediatamente la siguiente solicitud de sondeo larga.
  4. Así que de ida y vuelta.

En comparación con el sondeo, la ventaja del sondeo prolongado es que las actualizaciones de datos se pueden entregar al cliente casi sin demora. Al mismo tiempo, también reduce el número de conexiones establecidas entre el cliente y el servidor, reduciendo el coste de establecimiento de la conexión.

Conexiones cortas y largas

Las encuestas y las encuestas largas a menudo se comparan con conexiones cortas y conexiones largas. En general, un enlace corto significa que se establece una nueva conexión TCP para la comunicación con cada solicitud, mientras que una conexión larga significa que la misma conexión TCP se reutiliza para múltiples solicitudes.
Insertar descripción de la imagen aquí

Sin embargo, ya sea una conexión corta o una conexión larga, un sondeo o un sondeo largo, todas las actualizaciones de datos requieren que el cliente inicie una solicitud antes de que el servidor pueda enviarla. Sin embargo, durante el proceso de vida de la capa flotante, muchas actualizaciones de datos llegan en lotes y deben entregarse al cliente a tiempo, por lo que se necesita un método de comunicación más en tiempo real.

WebSocket

WebSocket proporciona una capacidad de comunicación bidireccional entre el navegador y el servidor. Similar a Socket, es un protocolo de capa de aplicación basado en una conexión TCP. Utilice el protocolo HTTP para conectarse. Una vez que la conexión se establece correctamente, ambos extremos pueden enviar información activamente a la otra parte.

Insertar descripción de la imagen aquí

¿Cómo establece WebSocket una conexión?

Con la ayuda del protocolo HTTP, puede tomar la conexión TCP en la que se basa HTTP, ponerse su propia máscara y comunicarse con su propio protocolo.

Para seguir siendo compatible con los servidores HTTP, WebSocket elige utilizar el protocolo HTTP para establecer conexiones. Primero, el cliente enviará una solicitud de actualización HTTP solicitando el protocolo de actualización:

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

Esta es una solicitud HTTP Get muy estándar. Hay un encabezado clave dentro:

  1. Actualización: la actualización es el campo de encabezado utilizado para definir el protocolo de conversión en HTTP1.1. Significa que si el servidor lo admite, cambie el protocolo de capa de aplicación actual, pero la conexión TCP basada en él no se moverá. Por ejemplo, cambie a WebSocket y HTTP2.0.

Después de que el servidor recibe una solicitud de cambio de protocolo, juzgará sus propias capacidades. Si admite el protocolo, responderá con una respuesta de actualización exitosa: protocolos de cambio:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

En este punto, la conexión TCP basada en HTTP se ha reutilizado como una conexión WebSocket. A continuación se muestra una versión nodejs de la demostración del servidor websocket.

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!')
        })
    });
})

Dado que el establecimiento de una conexión WebSocket se basa en el protocolo HTTP, muchos estudiantes creen erróneamente que WebSocket es un protocolo basado en el protocolo HTTP. Pero, de hecho, WebSocket no tiene nada que ver con HTTP una vez establecida la conexión. Al igual que el protocolo HTTP, es un protocolo de capa de aplicación basado en el protocolo TCP.

Formato de marco WebSocket

WebSocket utiliza un formato de marco binario personalizado para dividir cada mensaje de la aplicación en uno o más marcos. El par espera hasta recibir el mensaje completo antes de ensamblarlo y procesarlo.

  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 ...                |
 +---------------------------------------------------------------+

Introduce principalmente dos campos clave:

  • ALETA. Ocupa 1 bit. Indica si hay fotogramas posteriores. Un mensaje puede dividirse en varios fotogramas, el receptor determina que el fotograma es el último y concatena los fotogramas anteriores para formar un mensaje. TCP no tiene paquetes adhesivos, que son un problema causado por un diseño irrazonable del protocolo de la capa de aplicación.
  • código de operación. Ocupa 4 bits.
    • 8 significa cerrar cuadro (cerrar conexión). Esta instrucción de control debe enviarse cuando se cierra activamente la conexión. De lo contrario, websocket informará un error 1006. Este código de error se puede utilizar para distinguir si la conexión se cierra normalmente o debido a otras condiciones anormales.
    • 9 representa un marco de ping y 10 representa un marco de ping. El mecanismo de ping/pong sirve para detectar si la conexión se desconecta cuando no hay comunicación de mensajes durante un tiempo prolongado. Actualmente, el servidor solo puede enviar un ping al navegador y el navegador devuelve un mensaje pong. Actualmente, el navegador no dispone de una interfaz abierta para enviar instrucciones de control.

Implemente un servicio de comparación simple en tiempo real usando WebSocket

Simplemente podemos usar la interfaz de análisis y detección de rostros y la interfaz de comparación de rostros para crear un servicio de comparación y detección de rostros en tiempo real.

前端 服务端 腾讯云 建立WebSocket连接 开始定时发送截帧 调用人脸检测与分析接口 返回人脸位置信息 传入比对图与前端截帧,调用人脸比对接口 返回比对结果 返回比对结果 断开连接 前端 服务端 腾讯云

En términos de capacidades de IA, utilizaremos las dos interfaces proporcionadas por Tencent Cloud: interfaz de detección y análisis de rostros y comparación de rostros :

  • La interfaz de detección y análisis de rostros se utiliza para detectar la posición y la oclusión de la cara, y regresa de acuerdo con la interfaz para solicitar al usuario que ajuste la postura.
  • La interfaz de comparación de rostros se utiliza para comparar los fotogramas pasados ​​desde el front-end con la comparación almacenada en el servidor para obtener una similitud, que se utiliza para determinar si es la misma persona.

En el front-end, usamos la API getUserMedia para abrir la cámara y obtener la transmisión de video; usamos la API WebSocket para establecer una conexión WebSocket con el servidor. Una vez establecida correctamente la conexión, se pueden interceptar fotogramas de la transmisión de vídeo y enviarlos al servidor para su detección.

En el lado del servidor, podemos usar el paquete Nodejs+ ws npm para construir un servidor WebSocket simple. Después de recibir la captura del cuadro, el servidor puede llamar a la interfaz proporcionada por Tencent Cloud para su detección y verificación.

Experimenta un cuerpo vivo flotante

El cuerpo vivo de capa flotante de núcleo facial también es una solución de detección de cuerpos vivos en tiempo real basada en la solución anterior y maneja más detalles para que la experiencia sea más fluida. Puede seguir los pasos a continuación para solicitar y experimentar el servicio in vivo de capa flotante corporal y núcleo facial.

1. Activar el servicio de verificación facial

Obtenga más información sobre el producto Tencent Cloud AI Face Core en el sitio web oficial de Tencent Cloud . Haga clic para solicitar una prueba gratuita y experimentarlo.

Insertar descripción de la imagen aquí

2. Solicite el proceso comercial y obtenga RuleId

Una vez que el servicio Face ID se haya activado correctamente, puede ir a la consola para crear un proceso comercial: https://console.cloud.tencent.com/faceid
Insertar descripción de la imagen aquí

Seleccione "WeChat H5 (capa flotante/modo normal)", ingrese el nombre de la cuenta oficial para la prueba y haga clic en Siguiente.
Insertar descripción de la imagen aquí

Luego complete la información relevante de acuerdo con las indicaciones de la consola.
Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Una vez completada la solicitud, verifique su RuleId en la consola.

3. Llame a la interfaz de autenticación previa para obtener la conexión de experiencia.

Podemos usar API Explorer para llamar a la interfaz de autenticación de nombre real y obtener la conexión de experiencia. El parámetro de entrada RuleId se completa con el RuleId solicitado en el paso anterior. Haga clic para iniciar la llamada.
Insertar descripción de la imagen aquí

4. Utilice WeChat para abrir la conexión de la experiencia.

Después de llamar con éxito a la interfaz DetectAuth, habrá una URL en el paquete de devolución, puede abrirla usando WeChat para experimentarla.

{
    
    
    "Response": {
    
    
        "BizToken": "CE661F1A-0F1E-45BD-BE13-34C05CEA7681",
        "Url": "https://xxxxxxxxxxxxx",
        "RequestId": "f904f4cf-75db-4f8f-a5ec-dc4f942c7f7a"
    }
}

Documentación de referencia

Supongo que te gusta

Origin blog.csdn.net/tencentAI/article/details/129404008
Recomendado
Clasificación