Zephyrnet Logo

Como implementar a verificação de identidade usando Amazon Rekognition

Data:

Introdução

No cenário digital atual, aderir às regulamentações Conheça seu Cliente (KYC) é fundamental para empresas que operam em serviços financeiros, mercados on-line e outros setores que exigem identificação do usuário. Tradicionalmente, os processos KYC dependiam da verificação manual de documentos, uma abordagem demorada e propensa a erros. Este guia analisa como o Amazon Rekognition, um poderoso serviço de IA baseado em nuvem da AWS, especializado em reconhecimento e análise facial, pode revolucionar sua estratégia KYC online, transformando-a em um processo simplificado, seguro e econômico.

KYC com reconhecimento Amazon da AWS

Objetivos de aprendizagem

  • Entenda a importância das regulamentações Know Your Customer (KYC) em vários setores e os desafios associados aos processos de verificação manual.
  • Explore os recursos do Amazon Rekognition como um serviço de IA baseado em nuvem especializado em reconhecimento e análise facial.
  • Aprenda as etapas envolvidas na implementação da verificação de identidade usando o Amazon Rekognition, incluindo integração de usuários, extração de texto, detecção de vivacidade, análise facial e correspondência facial.
  • Entenda a importância de aproveitar a verificação de identidade orientada por IA para aprimorar as medidas de segurança, simplificar os processos de autenticação do usuário e melhorar as experiências do usuário.

Este artigo foi publicado como parte do Blogatona de Ciência de Dados.

Conteúdo

Compreendendo os desafios KYC

As regulamentações KYC exigem que as empresas verifiquem a identidade de seus usuários para mitigar fraudes, lavagem de dinheiro e outros crimes financeiros. Esta verificação normalmente envolve a coleta e validação de documentos de identificação emitidos pelo governo. Embora estas regulamentações sejam essenciais para manter um ecossistema financeiro seguro, os processos de verificação manual criam desafios:

  • Impacto pandémico: Durante a pandemia, o setor financeiro enfrentou desafios significativos na integração de novos clientes, uma vez que a circulação foi restrita. Portanto, a verificação manual em massa não é possível. Portanto, ao implementar o KYC online, sua empresa estará pronta para esses eventos futuros.
  • Erros humanos: A verificação manual é suscetível a erros, permitindo potencialmente que registros fraudulentos passem despercebidos.
  • Gerenciando IDs: Sendo a documentação uma cópia impressa, a gestão da mesma é um desafio crescente. As cópias podem ser perdidas, queimadas, roubadas, mal utilizadas, etc.

O que é o reconhecimento da Amazon?

Amazon Rekognition é um poderoso serviço de análise de imagens e vídeos oferecido pela Amazon Web Services (AWS). Ele utiliza algoritmos avançados de aprendizado de máquina para analisar o conteúdo visual em imagens e vídeos, permitindo que os desenvolvedores extraiam informações valiosas e executem diversas tarefas, como detecção de objetos, reconhecimento facial e verificação de identidade. O diagrama simplista abaixo dá uma boa ideia dos recursos e serviços envolvidos.

Fonte AWS: diferentes serviços sob Rekogni

Verificação de identidade com Amazon Rekognition

Antes de levá-lo para a implementação, deixe-me dar uma ideia de alto nível e as etapas envolvidas na implementação da verificação de identidade para nosso KYC online.

  1. Integração do usuário: Este processo será específico para o negócio. No entanto, no mínimo, a empresa precisará de nome, nome do meio, sobrenome, data de nascimento, data de validade da carteira de identidade e foto tamanho passaporte. Toda esta informação pode ser recolhida solicitando ao utilizador que carregue uma imagem de um bilhete de identidade nacional.
  2. Extrair texto: O serviço AWS Textract pode extrair perfeitamente todas as informações acima do cartão de identificação carregado. Além disso, também podemos consultar o Textract para obter informações específicas do cartão de identificação.
  3. Vivacidade e reconhecimento facial: Para garantir que o usuário que está tentando fazer seu KYC esteja ativo na tela e ao vivo quando a sessão de liveness for iniciada. O Amazon Rekognition pode detectar e comparar rostos com precisão em imagens ou streams de vídeo.
  4. Análise Facial: Depois que um rosto é capturado, ele fornece informações detalhadas sobre atributos faciais, como idade, sexo, emoções e pontos de referência faciais. Além disso, também validará se o usuário possui óculos escuros ou se seu rosto está coberto por outros objetos.
  5. Correspondência facial: Após a verificação do Liveness, podemos realizar a correspondência facial para verificar a identidade dos indivíduos com base nas imagens de referência extraídas da carteira de identidade nacional e na imagem atual da sessão Liveness.
Como o KYC online é feito com o Amazon Rekognition da AWS

Como você pode ver, o Rekognition facilita o registro rápido do usuário, analisando uma selfie capturada e comparando-a com um documento de identidade emitido pelo governo carregado pelo usuário. Os recursos de detecção de vivacidade do Rekognition ajudam a impedir tentativas de falsificação, solicitando que os usuários executem ações específicas, como piscar ou virar a cabeça. Isso garante que o usuário registrado seja uma pessoa real e não uma foto habilmente disfarçada ou profundamente falsa. Este processo automatizado reduz significativamente o tempo de integração, melhorando a experiência do usuário. O Rekognition elimina o potencial de erro humano inerente à verificação manual. Além disso, os algoritmos de reconhecimento facial alcançam altas taxas de precisão, garantindo uma verificação de identidade confiável.

Eu sei que agora você está muito animado para vê-lo em ação, então vamos direto ao assunto.

Implementando verificação de identidade: a solução KYC automatizada

Etapa 1: configurar a conta AWS

Antes de começar, certifique-se de ter uma conta AWS ativa. Você pode se inscrever para uma conta da AWS no site da AWS, caso ainda não o tenha feito. Uma vez inscrito, ative os serviços Rekognition. A AWS fornece documentação e tutoriais abrangentes para facilitar esse processo.

Etapa 2: configurar permissões do IAM

Se você quiser usar Python ou AWS CLI, esta etapa será necessária. Você precisa fornecer permissão para acessar o Rekognition, S3 e Textract. Isso pode ser feito no console.

Etapa 3: fazer upload do ID nacional do usuário

Demonstrarei isso por meio de CLI, Python e uma interface gráfica. Se você está procurando um código para uma interface gráfica, a AWS carregou um ótimo exemplo no git. Este artigo implantou o mesmo código para mostrar uma interface gráfica.

aws textract analyze-id --document-pages 
'{"S3Object":{"Bucket":"bucketARN","Name":"id.jpg"}}'
"IdentityDocuments": [
        {
            "DocumentIndex": 1,
            "IdentityDocumentFields": [
                {
                    "Type": {
                        "Text": "FIRST_NAME"
                    },
                    "ValueDetection": {
                        "Text": "xyz",
                        "Confidence": 93.61839294433594
                    }
                },
                {
                    "Type": {
                        "Text": "LAST_NAME"
                    },
                    "ValueDetection": {
                        "Text": "abc",
                        "Confidence": 96.3537826538086
                    }
                },
                {
                    "Type": {
                        "Text": "MIDDLE_NAME"
                    },
                    "ValueDetection": {
                        "Text": "",
                        "Confidence": 99.16631317138672
                    }
                },
                {
                    "Type": {
                        "Text": "SUFFIX"
                    },
                    "ValueDetection": {
                        "Text": "",
                        "Confidence": 99.16964721679688
                    }
                },
                {
                    "Type": {
                        "Text": "CITY_IN_ADDRESS"
                    },
                    "ValueDetection": {
                        "Text": "",
                        "Confidence": 99.17261505126953
                    }
                },
                {
                    "Type": {
                        "Text": "ZIP_CODE_IN_ADDRESS"
                    },
                    "ValueDetection": {
                        "Text": "",
                        "Confidence": 99.17854309082031
                    }
                },
                {
                    "Type": {
                        "Text": "STATE_IN_ADDRESS"
                    },
                    "ValueDetection": {
                        "Text": "",
                        "Confidence": 99.15782165527344
                    }
                },
                {
                    "Type": {
                        "Text": "STATE_NAME"
                    },
                    "ValueDetection": {
                        "Text": "",
                        "Confidence": 99.16664123535156
                    }
                },
                {
                    "Type": {
                        "Text": "DOCUMENT_NUMBER"
                    },
                    "ValueDetection": {
                        "Text": "123456",
                        "Confidence": 95.29527282714844
                    }
                },
                {
                    "Type": {
                        "Text": "EXPIRATION_DATE"
                    },
                    "ValueDetection": {
                        "Text": "22 OCT 2024",
                        "NormalizedValue": {
                            "Value": "2024-10-22T00:00:00",
                            "ValueType": "Date"
                        },
                        "Confidence": 95.7198486328125
                    }
                },
                {
                    "Type": {
                        "Text": "DATE_OF_BIRTH"
                    },
                    "ValueDetection": {
                        "Text": "1 SEP 1994",
                        "NormalizedValue": {
                            "Value": "1994-09-01T00:00:00",
                            "ValueType": "Date"
                        },
                        "Confidence": 97.41930389404297
                    }
                },
                {
                    "Type": {
                        "Text": "DATE_OF_ISSUE"
                    },
                    "ValueDetection": {
                        "Text": "23 OCT 2004",
                        "NormalizedValue": {
                            "Value": "2004-10-23T00:00:00",
                            "ValueType": "Date"
                        },
                        "Confidence": 96.1384506225586
                    }
                },
                {
                    "Type": {
                        "Text": "ID_TYPE"
                    },
                    "ValueDetection": {
                        "Text": "PASSPORT",
                        "Confidence": 98.65157318115234
                    }
                }

O comando acima usa o comando analyze-id do AWS Textract para extrair informações da imagem já carregada no S3. O JSON de saída também contém caixas delimitadoras, então trunquei para mostrar apenas as informações principais. Como você pode ver, extraiu todas as informações necessárias junto com o nível de confiança do valor do texto.

Usando funções Python

textract_client = boto3.client('textract', region_name='us-east-1')

def analyze_id(document_file_name)->dict:

  if document_file_name is not None:
       with open(document_file_name, "rb") as document_file:
            idcard_bytes = document_file.read()
  '''
  Analyze the image using Amazon Textract.
  '''
  try:
    response = textract_client.analyze_id(
      DocumentPages=[
        {'Bytes': idcard_bytes},
      ])

    return response
  except textract_client.exceptions.UnsupportedDocumentException:
    logger.error('User %s provided an invalid document.' % inputRequest.user_id)
    raise InvalidImageError('UnsupportedDocument')
  except textract_client.exceptions.DocumentTooLargeException:
    logger.error('User %s provided document too large.' % inputRequest.user_id)
    raise InvalidImageError('DocumentTooLarge')
  except textract_client.exceptions.ProvisionedThroughputExceededException:
    logger.error('Textract throughput exceeded.')
    raise InvalidImageError('ProvisionedThroughputExceeded')
  except textract_client.exceptions.ThrottlingException:
    logger.error('Textract throughput exceeded.')
    raise InvalidImageError('ThrottlingException')
  except textract_client.exceptions.InternalServerError:
    logger.error('Textract Internal Server Error.')
    raise InvalidImageError('ProvisionedThroughputExceeded')

result = analyze_id('id.jpeg')
print(result) # print raw output

Usando Interface Gráfica

ID nacional extraído usando AWS Textract | reconhecimento facial para KYC
ID nacional extraído usando AWS Textract | reconhecimento facial para KYC

Como você pode ver, o Textract buscou todas as informações relevantes e também mostra o tipo de ID. Essas informações podem ser utilizadas para cadastrar o cliente ou usuário. Mas antes disso vamos fazer uma verificação de vivacidade para verificar se é uma pessoa real.

Verificação de vivacidade

Assim que o usuário clicar em iniciar verificação na imagem abaixo, ele primeiro detectará o rosto e, se apenas um rosto estiver na tela, iniciará a sessão Liveness. Por motivos de privacidade, não consigo mostrar a sessão completa do Liveness. No entanto, você pode verificar isso link do vídeo de demonstração. A sessão Liveness fornecerá resultados em% de confiança. Também podemos definir um limite abaixo do qual a sessão Liveness falhará. Para aplicações críticas como esta, deve-se manter o limite em 95%.

Verificação de atividade no Amazon Rekognition | reconhecimento facial para KYC

Além da confiança, a sessão Liveness também proporcionará emoções e objetos estranhos detectados no rosto. Se o usuário estiver usando óculos escuros ou mostrando expressões de raiva etc. o aplicativo pode rejeitar a imagem.

Código Python

rek_client = boto3.client('rekognition', region_name='us-east-1')
sessionid = rek_client.create_face_liveness_session(Settings={'AuditImagesLimit':1, 
           'OutputConfig': {"S3Bucket": 'IMAGE_BUCKET_NAME'}})
           
session = rek_client.get_face_liveness_session_results(
            SessionId=sessionid)

Comparação Facial

Depois que o usuário tiver concluído com êxito a sessão Liveness, o aplicativo deverá comparar o rosto com o rosto detectado no ID. Esta é a parte mais crítica da nossa aplicação. Não queremos cadastrar um usuário cujo rosto não corresponda ao ID. O rosto detectado a partir do ID carregado já está armazenado no S3 pelo código que funcionará como imagem de referência. Da mesma forma, o rosto da sessão de atividade também é armazenado no S3. Vamos verificar primeiro a implementação da CLI.

Comando CLI

aws rekognition compare-faces 
      --source-image '{"S3Object":{"Bucket":"imagebucket","Name":"reference.jpg"}}' 
      --target-image '{"S3Object":{"Bucket":"imagebucket","Name":"liveness.jpg"}}' 
      --similarity-threshold 0.9

saída

{
              "UnmatchedFaces": [],
              "FaceMatches": [
                  {
                      "Face": {
                          "BoundingBox": {
                              "Width": 0.12368916720151901,
                              "Top": 0.16007372736930847,
                              "Left": 0.5901257991790771,
                              "Height": 0.25140416622161865
                          },
                          "Confidence": 99.0,
                          "Pose": {
                              "Yaw": -3.7351467609405518,
                              "Roll": -0.10309021919965744,
                              "Pitch": 0.8637830018997192
                          },
                          "Quality": {
                              "Sharpness": 95.51618957519531,
                              "Brightness": 65.29893493652344
                          },
                          "Landmarks": [
                              {
                                  "Y": 0.26721030473709106,
                                  "X": 0.6204193830490112,
                                  "Type": "eyeLeft"
                              },
                              {
                                  "Y": 0.26831310987472534,
                                  "X": 0.6776827573776245,
                                  "Type": "eyeRight"
                              },
                              {
                                  "Y": 0.3514654338359833,
                                  "X": 0.6241428852081299,
                                  "Type": "mouthLeft"
                              },
                              {
                                  "Y": 0.35258132219314575,
                                  "X": 0.6713621020317078,
                                  "Type": "mouthRight"
                              },
                              {
                                  "Y": 0.3140771687030792,
                                  "X": 0.6428444981575012,
                                  "Type": "nose"
                              }
                          ]
                      },
                      "Similarity": 100.0
                  }
              ],
              "SourceImageFace": {
                  "BoundingBox": {
                      "Width": 0.12368916720151901,
                      "Top": 0.16007372736930847,
                      "Left": 0.5901257991790771,
                      "Height": 0.25140416622161865
                  },
                  "Confidence": 99.0
              }
          }

Como você pode ver acima, mostrou que não existe rosto incomparável e o rosto corresponde com um nível de confiança de 99%. Ele também retornou caixas delimitadoras como uma saída extra. Agora vamos ver a implementação do Python.

Código Python

rek_client = boto3.client('rekognition', region_name='us-east-1')

response = rek_client.compare_faces(
      SimilarityThreshold=0.9,
      SourceImage={
            'S3Object': {
              'Bucket': bucket,
              'Name': idcard_name
          }
      },
      TargetImage={
          'S3Object': {
              'Bucket': bucket,
              'Name': name
          }
      })

if len(response['FaceMatches']) == 0:
      IsMatch = 'False'
      Reason = 'Property FaceMatches is empty.'
    
facenotMatch = False
for match in response['FaceMatches']:
    similarity:float = match['Similarity']
    if similarity > 0.9:
        IsMatch = True,
        Reason = 'All checks passed.'
    else:
        facenotMatch = True

O código acima irá comparar o rosto detectado no cartão de identificação e na sessão Liveness, mantendo o limite em 90%. Se o rosto corresponder, a variável IsMatch será definida como True. Assim, com apenas uma chamada de função, podemos comparar as duas faces, ambas já carregadas no bucket S3.

Finalmente, podemos registrar o usuário válido e completar seu KYC. Como você pode ver, isso é totalmente automatizado e iniciado pelo usuário, e nenhuma outra pessoa está envolvida. O processo também encurtou a integração do usuário em comparação com o processo manual atual.

Etapa 4: consultar documento como GPT

Gostei de um dos recursos muito úteis do Textract: você pode fazer perguntas específicas, como “Qual é o número de identidade”. Deixe-me mostrar como fazer isso usando AWS CLI.

aws textract analyze-document --document '{"S3Object":{"Bucket":"ARN","Name":"id.jpg"}}' 
--feature-types '["QUERIES"]' --queries-config '{"Queries":[{"Text":"What is the Identity No"}]}'

Observe que anteriormente usei a função analyze-id, mas agora usei analyze-document para consultar o documento. Isto é muito útil se houver campos específicos no cartão de identificação que não são extraídos pela função analyze-id. A função de análise de identificação funciona bem para todos os cartões de identificação dos EUA, mas também funciona bem com cartões de identificação do governo indiano. Ainda assim, se alguns dos campos não forem extraídos, o recurso de consulta poderá ser usado.

A AWS usa o serviço cognito para gerenciar a identidade do usuário, o ID do usuário e os IDs faciais armazenados no DynamoDB. O código de amostra da AWS também compara as imagens do banco de dados existente para que o mesmo usuário não possa se registrar novamente usando um ID ou nome de usuário diferente. Este tipo de validação é essencial para um sistema KYC automatizado e robusto.

Conclusão

Ao adotar o AWS Rekognition for Automated Self KYC, você pode transformar o processo de integração do usuário de um obstáculo trabalhoso em uma experiência tranquila e segura. O Amazon Rekognition oferece uma solução robusta para implementação de sistemas de verificação de identidade com recursos avançados de reconhecimento facial. Ao aproveitar seus recursos, os desenvolvedores podem aprimorar as medidas de segurança, simplificar os processos de autenticação do usuário e oferecer experiências de usuário perfeitas em vários aplicativos e setores.

Com o guia completo descrito acima, você estará bem equipado para embarcar em sua jornada para implementar a verificação de identidade usando o Amazon Rekognition de maneira eficaz. Aproveite o poder da verificação de identidade baseada em IA e desbloqueie novas possibilidades no domínio do gerenciamento de identidade digital.

Principais lições

  • O Amazon Rekognition oferece recursos avançados de reconhecimento e análise facial, facilitando processos de verificação de identidade simplificados e seguros.
  • Ele permite a integração automatizada de usuários, extraindo informações essenciais de cartões de identificação emitidos pelo governo e realizando verificações de atividade.
  • As etapas de implementação incluem a configuração de serviços AWS, configuração de permissões IAM e utilização de funções Python ou interfaces gráficas para extração de texto e comparações faciais.
  • As verificações de vivacidade em tempo real aumentam a segurança, garantindo que os usuários estejam presentes durante a verificação, enquanto as comparações faciais validam as identidades em relação às imagens de referência.

A mídia mostrada neste artigo não é propriedade da Analytics Vidhya e é usada a critério do Autor.

local_img

Inteligência mais recente

local_img