Compartilhar via


Tutorial: detectar atividade em rostos

A detecção de atividade facial é usada para determinar se um rosto em uma transmissão de vídeo de entrada é real (ao vivo) ou falso (falsificado). É um bloco de construção importante em um sistema de autenticação biométrica para evitar impostores tentando obter acesso ao sistema ao usar uma fotografia, vídeo, máscara ou outros meios para usurpar a identidade de outra pessoa.

O objetivo da detecção de atividade é garantir que o sistema interaja com uma pessoa fisicamente presente e dinâmica no momento da autenticação. Esses sistemas são cada vez mais importantes com o aumento das finanças digitais, do controle de acesso remoto e dos processos de verificação de identidade online.

A solução de detecção de atividade facial da IA do Azure protege com sucesso contra vários tipos de falsificação, que vão desde impressões em papel, máscaras 2D/3D e apresentações falsas em telefones e laptops. A detecção de atividade é uma área ativa de pesquisa, com melhorias contínuas sendo feitas para combater ataques de falsificação cada vez mais sofisticados. Melhorias contínuas são distribuídas para o cliente e os componentes de serviço ao longo do tempo à medida que a solução geral fica mais robusta para novos tipos de ataques.

Importante

Os SDKs do cliente da Detecção Facial para atividade são um recurso fechado. Solicite acesso ao recurso de atividade preenchendo o formulário de admissão de Reconhecimento Facial. Quando sua assinatura do Azure receber acesso, baixe o SDK de atividade da Detecção Facial.

Introdução

A integração da solução de atividade envolve dois componentes distintos: um aplicativo móvel/web front-end e um servidor/orquestrador de aplicativos.

Diagrama do fluxo de trabalho de atividade na Detecção Facial da IA do Azure.

  • Aplicativo front-end: o aplicativo front-end recebe autorização do servidor de aplicativos para iniciar a detecção de atividade. Seu objetivo principal é ativar a câmera e orientar os usuários finais com precisão por meio do processo de detecção de atividade.
  • Servidor de aplicativos: o servidor de aplicativos serve como um servidor back-end para criar sessões de detecção de atividade e obter um token de autorização do serviço Detecção Facial para uma sessão específica. Esse token autoriza o aplicativo front-end a executar a detecção de atividade. Os objetivos do servidor de aplicativos são gerenciar as sessões, conceder autorização para o aplicativo front-end e exibir os resultados do processo de detecção de atividade.

Além disso, combinamos a verificação facial com a detecção de atividade para confirmar se aquela pessoa é a pessoa específica que você designou. A tabela a seguir descreve os detalhes dos recursos de detecção de atividade:

Recurso Descrição
Detecção de atividade Determina se uma entrada é real ou falsa, e apenas o servidor de aplicativos tem autoridade para iniciar a verificação de atividade e consultar o resultado.
Detecção de atividade com verificação facial Determina se uma entrada é real ou falsa e verifica a identidade da pessoa com base em uma imagem de referência que você forneceu. O servidor de aplicativos ou o aplicativo front-end podem fornecer uma imagem de referência. Somente o servidor de aplicativos tem autoridade para inicializar a verificação de atividade e consultar o resultado.

Este tutorial demonstra como operar um aplicativo front-end e um servidor de aplicativos para executar a detecção de atividade e a detecção de atividade com verificação facial em vários SDKs de linguagem.

Pré-requisitos

  • Assinatura do Azure – Criar uma gratuitamente
  • Sua conta do Azure deve ter a função Colaborador dos Serviços Cognitivos atribuída para que você concorde com os termos e condições da IA responsável e crie um recurso. Para que essa função seja atribuída à sua conta, siga as etapas descritas na documentação Atribuir funções ou entre em contato com o administrador.
  • Depois de obter sua assinatura do Azure, crie um recurso da Detecção Facial no portal do Azure para obter a chave e o ponto de extremidade. Após a implantação, selecione Ir para recurso.
    • Você precisa da chave e do ponto de extremidade do recurso criado para conectar seu aplicativo ao serviço de Detecção Facial.
    • Use o tipo de preço gratuito (F0) para experimentar o serviço e atualizar mais tarde para um nível pago para produção.
  • Acessar o SDK do Detecção Facial da Pesquisa Visual de IA do Azure para dispositivos móveis (IOS e Android) e na Web. Para começar, você precisa solicitar os recursos de acesso limitado por reconhecimento facial para obter acesso ao SDK. Para obter mais informações, consulte a página Acesso limitado por Detecção Facial.

Configurar aplicativos front-end e servidores de aplicativos para executar a detecção de atividade

Fornecemos SDKs em diferentes linguagens para aplicativos front-end e servidores de aplicativos. Confira as instruções a seguir para configurar seus aplicativos front-end e servidores de aplicativos.

Baixar o SDK para aplicativo de front-end

Depois de ter acesso ao SDK, siga as instruções no repositório GitHub azure-ai-vision-sdk para integrar a interface do usuário e o código ao seu aplicativo móvel nativo. O SDK de atividade dá suporte a aplicativos móveis Java/Kotlin para Android, Swift para aplicativos móveis iOS e JavaScript para aplicativos Web:

Depois de adicionar o código ao seu aplicativo, o SDK tratará a inicialização da câmera, orientando o usuário final a ajustar a própria posição, compondo o conteúdo de atividade e chamando o serviço de nuvem da Detecção Facial da IA do Azure para processar o conteúdo de atividade.

Baixar a biblioteca de clientes da Detecção Facial da IA do Azure para um servidor de aplicativos

O servidor/orquestrador de aplicativos é responsável por controlar o ciclo de vida de uma sessão de atividade. O servidor de aplicativos precisa criar uma sessão antes de executar a detecção de atividade e, em seguida, pode consultar o resultado e excluir a sessão quando a verificação de atividade for concluída. Oferecemos uma biblioteca em várias linguagens para implementar facilmente seu servidor de aplicativos. Siga estas etapas para instalar o pacote desejado:

Criar variáveis de ambiente

Nesse exemplo, grave as credenciais em variáveis de ambiente no computador local que executa o aplicativo.

Acesse o portal do Azure. Se o recurso que você criou na seção Pré-requisitos tiver sido implantado com sucesso, selecione Ir para o Recurso em Próximas Etapas. Encontre a chave e o ponto de extremidade em Gerenciamento de Recursos na página Chaves e ponto de extremidade. Sua chave de recurso não é igual à sua ID de assinatura do Azure.

Para definir a variável de ambiente da chave e do ponto de extremidade, abra uma janela do console e siga as instruções para o sistema operacional e o ambiente de desenvolvimento.

  • Para definir a variável de ambiente FACE_APIKEY, substitua <your_key> por uma das chaves do recurso.
  • Para definir a variável de ambiente FACE_ENDPOINT, substitua <your_endpoint> pelo ponto de extremidade do recurso.

Importante

Se você usar uma chave de API, armazene-a com segurança em outro lugar, como no Azure Key Vault. Não inclua a chave da API diretamente no seu código e nunca a publique publicamente.

Para obter mais informações sobre a segurança dos serviços de IA, veja Autenticar solicitações para serviços de IA do Azure.

setx FACE_APIKEY <your_key>
setx FACE_ENDPOINT <your_endpoint>

Depois de adicionar as variáveis de ambiente, é aconselhável reiniciar todos os programas em execução que precisarem lê-las, incluindo a janela do console.

Executar a detecção de atividade

As etapas de alto nível envolvidas na orquestração de atividade são ilustradas abaixo:

Diagrama do fluxo de trabalho de atividade na Detecção Facial da IA do Azure.

  1. O aplicativo front-end inicia a verificação de atividade e notifica o servidor de aplicativos.

  2. O servidor de aplicativos cria uma nova sessão de atividade no serviço de Detecção Facial da IA do Azure. O serviço cria uma sessão de atividade e responde com um token de autorização de sessão. Mais informações sobre cada parâmetro de solicitação envolvido na criação de uma sessão de atividade são referenciadas na Operação da Sessão de Criação de Atividade.

    var endpoint = new Uri(System.Environment.GetEnvironmentVariable("FACE_ENDPOINT"));
    var credential = new AzureKeyCredential(System.Environment.GetEnvironmentVariable("FACE_APIKEY"));
    
    var sessionClient = new FaceSessionClient(endpoint, credential);
    
    var createContent = new CreateLivenessSessionContent(LivenessOperationMode.Passive)
    {
        DeviceCorrelationId = "723d6d03-ef33-40a8-9682-23a1feb7bccd",
        SendResultsToClient = false,
    };
    
    var createResponse = await sessionClient.CreateLivenessSessionAsync(createContent);
    var sessionId = createResponse.Value.SessionId;
    Console.WriteLine($"Session created.");
    Console.WriteLine($"Session id: {sessionId}");
    Console.WriteLine($"Auth token: {createResponse.Value.AuthToken}");
    

    Aqui está um exemplo de corpo da resposta:

    {
        "sessionId": "a6e7193e-b638-42e9-903f-eaf60d2b40a5",
        "authToken": "<session-authorization-token>"
    }
    
  3. O servidor de aplicativos fornece o token de autorização de sessão para o aplicativo front-end.

  4. O aplicativo front-end fornece o token de autorização de sessão durante a inicialização do SDK da Visão de IA do Azure.

    mServiceOptions?.setTokenCredential(com.azure.android.core.credential.TokenCredential { _, callback ->
        callback.onSuccess(com.azure.android.core.credential.AccessToken("<INSERT_TOKEN_HERE>", org.threeten.bp.OffsetDateTime.MAX))
    })
    
  5. Em seguida, o SDK inicia a câmera, orienta o usuário a se posicionar corretamente e, em seguida, prepara o conteúdo para chamar o ponto de extremidade do serviço de detecção de atividade.

  6. O SDK chama o serviço de Detecção Facial da Visão de IA do Azure para executar a detecção de atividade. Depois que o serviço responder, o SDK notificará o aplicativo front-end de que a verificação de atividade foi concluída.

  7. O aplicativo front-end retransmite a conclusão da verificação de atividade para o servidor de aplicativos.

  8. O servidor de aplicativos agora pode consultar o resultado da detecção de atividade do serviço de Detecção Facial da Visão de IA do Azure.

    var getResultResponse = await sessionClient.GetLivenessSessionResultAsync(sessionId);
    
    var sessionResult = getResultResponse.Value;
    Console.WriteLine($"Session id: {sessionResult.Id}");
    Console.WriteLine($"Session status: {sessionResult.Status}");
    Console.WriteLine($"Liveness detection request id: {sessionResult.Result?.RequestId}");
    Console.WriteLine($"Liveness detection received datetime: {sessionResult.Result?.ReceivedDateTime}");
    Console.WriteLine($"Liveness detection decision: {sessionResult.Result?.Response.Body.LivenessDecision}");
    Console.WriteLine($"Session created datetime: {sessionResult.CreatedDateTime}");
    Console.WriteLine($"Auth token TTL (seconds): {sessionResult.AuthTokenTimeToLiveInSeconds}");
    Console.WriteLine($"Session expired: {sessionResult.SessionExpired}");
    Console.WriteLine($"Device correlation id: {sessionResult.DeviceCorrelationId}");
    

    Aqui está um exemplo de corpo da resposta:

    {
        "status": "ResultAvailable",
        "result": {
            "id": 1,
            "sessionId": "a3dc62a3-49d5-45a1-886c-36e7df97499a",
            "requestId": "cb2b47dc-b2dd-49e8-bdf9-9b854c7ba843",
            "receivedDateTime": "2023-10-31T16:50:15.6311565+00:00",
            "request": {
                "url": "/face/v1.1-preview.1/detectliveness/singlemodal",
                "method": "POST",
                "contentLength": 352568,
                "contentType": "multipart/form-data; boundary=--------------------------482763481579020783621915",
                "userAgent": ""
            },
            "response": {
                "body": {
                    "livenessDecision": "realface",
                    "target": {
                        "faceRectangle": {
                            "top": 59,
                            "left": 121,
                            "width": 409,
                            "height": 395
                        },
                        "fileName": "content.bin",
                        "timeOffsetWithinFile": 0,
                        "imageType": "Color"
                    },
                    "modelVersionUsed": "2022-10-15-preview.04"
                },
                "statusCode": 200,
                "latencyInMilliseconds": 1098
            },
            "digest": "537F5CFCD8D0A7C7C909C1E0F0906BF27375C8E1B5B58A6914991C101E0B6BFC"
        },
        "id": "a3dc62a3-49d5-45a1-886c-36e7df97499a",
        "createdDateTime": "2023-10-31T16:49:33.6534925+00:00",
        "authTokenTimeToLiveInSeconds": 600,
        "deviceCorrelationId": "723d6d03-ef33-40a8-9682-23a1feb7bccd",
        "sessionExpired": false
    }
    
  9. O servidor de aplicativos poderá excluir a sessão se você não consultar mais o resultado.

    await sessionClient.DeleteLivenessSessionAsync(sessionId);
    Console.WriteLine($"The session {sessionId} is deleted.");
    

Executar a detecção de atividade com verificação facial

A combinação da verificação facial com a detecção de atividade permite a verificação biométrica de uma determinada pessoa suspeita com uma garantia adicional de que ela está fisicamente presente no sistema. A integração da atividade com a verificação é feita em duas partes:

  1. Selecione uma boa imagem de referência.
  2. Configure a orquestração da atividade com a verificação.

Diagrama do fluxo de trabalho da atividade de verificação com detecção facial da Detecção Facial da IA do Azure.

Selecionar uma imagem de referência

Use as seguintes dicas para garantir que suas imagens de entrada forneçam os resultados de reconhecimento mais precisos.

Requisitos técnicos

  • Os formatos de imagem de entrada com suporte incluem JPEG, PNG, GIF (o primeiro quadro), BMP.
  • O tamanho do arquivo de imagem não deve ser maior do que 6 MB.
  • Você pode utilizar o atributo qualityForRecognition na operação de detecção facial ao usar modelos de detecção aplicáveis como uma diretriz geral sobre a probabilidade de a imagem ter qualidade suficiente para tentar o reconhecimento facial. Apenas imagens com qualidade "high" são recomendadas para registro de pessoas e as com qualidade igual ou superior a "medium" são recomendadas para cenários de identificação.

Requisitos de composição

  • A foto está é clara e nítida, sem desfoque, pixelizada, distorcida ou danificada.
  • A foto não está alterada para remover manchas faciais ou a aparência do rosto.
  • A foto deve estar em um formato de cor RGB com suporte (JPEG, PNG, WEBP, BMP). O tamanho recomendado de Detecção Facial é de 200x200 pixels. Tamanhos de Detecção Facial maiores que 200x200 pixels não resultarão em qualidade de IA melhor e não devem ter mais de 6 MB.
  • O usuário não está usando óculos, máscaras, chapéus, fones de ouvido, tocas na cabeça ou coberturas faciais. O rosto deve estar livre de obstruções.
  • Joias faciais são permitidas desde que não ocultem seu rosto.
  • Apenas um rosto deve estar visível na foto.
  • O rosto deve estar em pose neutra voltada para a frente com os dois olhos abertos, com a boca fechada, sem expressões faciais extremas ou inclinação de cabeça.
  • O rosto deve estar sem sombras ou olhos vermelhos. Se alguma dessas coisas ocorrerem, tire a foto novamente.
  • O plano de fundo deve ser uniforme e simples, sem nenhuma sombra.
  • O rosto deve estar centralizado dentro da imagem e preencher pelo menos 50% da imagem.

Configure a orquestração da atividade com a verificação.

As etapas de alto nível envolvidas na atividade com a orquestração de verificação são ilustradas abaixo:

  1. Forneça a imagem de referência da verificação através de um dos dois métodos a seguir:

    • O servidor de aplicativos fornece a imagem de referência ao criar a sessão de atividade. Mais informações sobre cada parâmetro de solicitação envolvido na criação de uma sessão de atividade com verificação são referenciadas na Operação da Sessão de Criação de Atividade com Verificação.

      var endpoint = new Uri(System.Environment.GetEnvironmentVariable("FACE_ENDPOINT"));
      var credential = new AzureKeyCredential(System.Environment.GetEnvironmentVariable("FACE_APIKEY"));
      
      var sessionClient = new FaceSessionClient(endpoint, credential);
      
      var createContent = new CreateLivenessWithVerifySessionContent(LivenessOperationMode.Passive)
      {
          DeviceCorrelationId = "723d6d03-ef33-40a8-9682-23a1feb7bccd"
      };
      using var fileStream = new FileStream("test.png", FileMode.Open, FileAccess.Read);
      
      var createResponse = await sessionClient.CreateLivenessWithVerifySessionAsync(createContent, fileStream);
      
      var sessionId = createResponse.Value.SessionId;
      Console.WriteLine("Session created.");
      Console.WriteLine($"Session id: {sessionId}");
      Console.WriteLine($"Auth token: {createResponse.Value.AuthToken}");
      Console.WriteLine("The reference image:");
      Console.WriteLine($"  Face rectangle: {createResponse.Value.VerifyImage.FaceRectangle.Top}, {createResponse.Value.VerifyImage.FaceRectangle.Left}, {createResponse.Value.VerifyImage.FaceRectangle.Width}, {createResponse.Value.VerifyImage.FaceRectangle.Height}");
      Console.WriteLine($"  The quality for recognition: {createResponse.Value.VerifyImage.QualityForRecognition}");
      

      Aqui está um exemplo de corpo da resposta:

      {
          "verifyImage": {
              "faceRectangle": {
                  "top": 506,
                  "left": 51,
                  "width": 680,
                  "height": 475
              },
              "qualityForRecognition": "high"
          },
          "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567",
          "authToken": "<session-authorization-token>"
      }
      
    • O aplicativo front-end fornece a imagem de referência ao inicializar o SDK. Não há suporte para esse cenário na solução web.

      val singleFaceImageSource = VisionSource.fromFile("/path/to/image.jpg")
      mFaceAnalysisOptions?.setRecognitionMode(RecognitionMode.valueOfVerifyingMatchToFaceInSingleFaceImage(singleFaceImageSource))
      
  2. Agora, o servidor de aplicativos pode consultar o resultado da verificação, além do resultado da atividade.

    var getResultResponse = await sessionClient.GetLivenessWithVerifySessionResultAsync(sessionId);
    var sessionResult = getResultResponse.Value;
    Console.WriteLine($"Session id: {sessionResult.Id}");
    Console.WriteLine($"Session status: {sessionResult.Status}");
    Console.WriteLine($"Liveness detection request id: {sessionResult.Result?.RequestId}");
    Console.WriteLine($"Liveness detection received datetime: {sessionResult.Result?.ReceivedDateTime}");
    Console.WriteLine($"Liveness detection decision: {sessionResult.Result?.Response.Body.LivenessDecision}");
    Console.WriteLine($"Verification result: {sessionResult.Result?.Response.Body.VerifyResult.IsIdentical}");
    Console.WriteLine($"Verification confidence: {sessionResult.Result?.Response.Body.VerifyResult.MatchConfidence}");
    Console.WriteLine($"Session created datetime: {sessionResult.CreatedDateTime}");
    Console.WriteLine($"Auth token TTL (seconds): {sessionResult.AuthTokenTimeToLiveInSeconds}");
    Console.WriteLine($"Session expired: {sessionResult.SessionExpired}");
    Console.WriteLine($"Device correlation id: {sessionResult.DeviceCorrelationId}");
    

    Aqui está um exemplo de corpo da resposta:

    {
        "status": "ResultAvailable",
        "result": {
            "id": 1,
            "sessionId": "3847ffd3-4657-4e6c-870c-8e20de52f567",
            "requestId": "f71b855f-5bba-48f3-a441-5dbce35df291",
            "receivedDateTime": "2023-10-31T17:03:51.5859307+00:00",
            "request": {
                "url": "/face/v1.1-preview.1/detectlivenesswithverify/singlemodal",
                "method": "POST",
                "contentLength": 352568,
                "contentType": "multipart/form-data; boundary=--------------------------590588908656854647226496",
                "userAgent": ""
            },
            "response": {
                "body": {
                    "livenessDecision": "realface",
                    "target": {
                        "faceRectangle": {
                            "top": 59,
                            "left": 121,
                            "width": 409,
                            "height": 395
                        },
                        "fileName": "content.bin",
                        "timeOffsetWithinFile": 0,
                        "imageType": "Color"
                    },
                    "modelVersionUsed": "2022-10-15-preview.04",
                    "verifyResult": {
                        "matchConfidence": 0.9304124,
                        "isIdentical": true
                    }
                },
                "statusCode": 200,
                "latencyInMilliseconds": 1306
            },
            "digest": "2B39F2E0EFDFDBFB9B079908498A583545EBED38D8ACA800FF0B8E770799F3BF"
        },
        "id": "3847ffd3-4657-4e6c-870c-8e20de52f567",
        "createdDateTime": "2023-10-31T16:58:19.8942961+00:00",
        "authTokenTimeToLiveInSeconds": 600,
        "deviceCorrelationId": "723d6d03-ef33-40a8-9682-23a1feb7bccd",
        "sessionExpired": true
    }
    
  3. O servidor de aplicativos poderá excluir a sessão se você não consultar mais o resultado.

    await sessionClient.DeleteLivenessWithVerifySessionAsync(sessionId);
    Console.WriteLine($"The session {sessionId} is deleted.");
    

Limpar os recursos

Se quiser limpar e remover uma assinatura dos Serviços de IA do Azure, você poderá excluir o recurso ou grupo de recursos. Excluir o grupo de recursos também exclui todos os recursos associados a ele.

Para saber mais sobre outras opções nas APIs de atividade, consulte a referência do SDK da Visão de IA do Azure.

Para saber mais sobre os recursos disponíveis para orquestrar a solução de atividade, consulte a referência da API REST de Sessão.