Melhore a escalabilidade das APIs sem estado do Amazon Rekognition usando o PlatoBlockchain Data Intelligence de várias regiões. Pesquisa vertical. Ai.

Melhore a escalabilidade para APIs sem estado do Amazon Rekognition usando várias regiões

Na anterior no blog, descrevemos uma solução completa de verificação de identidade em uma única região da AWS. A solução usa o Reconhecimento da Amazônia APIs Detectar Faces para detecção de rosto e Comparar rostos para comparação facial. Pensamos nessas APIs como APIs sem estado porque elas não dependem de um Amazon Rekognition coleção de rosto. Eles também são idempotentes, o que significa que chamadas repetidas com os mesmos parâmetros retornarão o mesmo resultado. Eles fornecem opções flexíveis na passagem de imagens, seja por meio de um Serviço de armazenamento simples da Amazon (Amazon S3) local ou bytes brutos.

Nesta postagem, nos concentramos em Imagem do Amazon Rekognition APIs sem estado e discutem duas opções de transmissão de imagens e quando escolher uma em detrimento da outra do ponto de vista da arquitetura do sistema. Em seguida, discutimos como dimensionar as APIs sem estado para superar algumas limitações regionais. Ao falar sobre escalabilidade, geralmente nos referimos ao máximo de transações por segundo (TPS) que a solução pode suportar. Por exemplo, ao hospedar um grande evento que usa visão computacional para detectar rostos ou rótulos de objetos, você pode encontrar um pico de tráfego e não deseja que o sistema seja acelerado. Isso significa que às vezes você precisa aumentar o TPS e até mesmo ir além da cota de serviço regional que as APIs do Amazon Rekognition têm. Este post propõe uma solução para aumentar o TPS das APIs sem estado usando várias regiões.

APIs sem estado do Amazon Rekognition

Das APIs de imagem do Amazon Rekognition disponíveis, Comparar rostos, Detectar Faces, Detectar rótulos, DetectarModeraçãoLabels, Detectar Equipamento de Proteção, Detectar Texto e Reconhecer Celebridades são apátridas. Eles fornecem opções do Amazon S3 e de bytes brutos para passar imagens. Por exemplo, na sintaxe de solicitação do DetectFaces API, existem duas opções para passar para o Image campo: Bytes or S3Object.

Quando se utiliza o S3Object opção, uma arquitetura típica é a seguinte.

Esta solução tem o seguinte fluxo de trabalho:

  1. O aplicativo cliente acessa uma página da Web hospedada com Amplificar AWS.
  2. O aplicativo cliente é autenticado e autorizado com Amazon Cognito.
  3. O aplicativo cliente carrega uma imagem em um bucket do S3.
  4. O Amazon S3 aciona um AWS Lambda função para chamar o Amazon Rekognition.
  5. A função do Lambda chama as APIs do Amazon Rekognition com a opção S3Object.
  6. A função Lambda persiste o resultado para um Amazon DynamoDB tabela.

Escolha o S3Object opção nos seguintes cenários:

  • A imagem é um arquivo formatado em PNG ou JPEG
  • Você implanta toda a pilha na mesma região em que o Amazon Rekognition está disponível
  • A cota de serviço regional da API do Amazon Rekognition atende aos requisitos do sistema

Quando você não atende a todos esses requisitos, você deve escolher o Bytes opção.

Use as APIs sem estado do Amazon Rekognition em uma região diferente

Um exemplo de uso do Bytes A opção é quando você deseja implantar seu caso de uso em uma região em que o Amazon Rekognition não está geralmente disponível, por exemplo, se você tiver presença de cliente na América do Sul (sa-east-1) Região. Para residência de dados, o bucket S3 que você usa para armazenar as imagens dos usuários deve estar em sa-east-1, mas você deseja usar o Amazon Rekognition para sua solução, mesmo que não esteja geralmente disponível em sa-east-1. Uma solução é usar o Bytes opção para chamar o Amazon Rekognition em uma região diferente onde o Amazon Rekognition está disponível, como us-east-1. O diagrama a seguir ilustra essa arquitetura.

Reconhecimento em diferentes regiões

Depois que a função Lambda é acionada (Etapa 4), em vez de chamar o Amazon Rekognition diretamente com o local S3 da imagem, a função precisa recuperar a imagem do bucket S3 (Etapa 5) e, em seguida, chamar o Amazon Rekognition com os bytes brutos da imagem (Etapa 6). Veja a seguir um trecho de código da função Lambda:

rekognition_region = os.getenv("REKOGNITION_REGION")
s3 = boto3.client('s3')
rekognition = boto3.client('rekognition', region_name=rekognition_region)

def handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(
    event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    s3_res = s3.get_object(Bucket=bucket, Key=key)
    rekognition_res = rekognition.detect_faces(Image={"Bytes": s3_res['Body'].read()}, Attributes=['ALL'])
    print(json.dumps(rekognition_res))

Observe que o trecho de código anterior funciona diretamente para os formatos JPEG ou PNG. Para outros formatos de imagem, como BMP, é necessário processamento extra de imagem para convertê-la em bytes JPEG ou PNG antes de enviar para o Amazon Rekognition. O código a seguir converte bytes BMP em JPEG:

import io
from PIL import Image

s3_res = s3.get_object(Bucket=bucket, Key=key)
bmp_img = Image.open(io.BytesIO(s3_res['Body'].read()))
buffered = io.BytesIO()
rgb_img = bmp_img.convert('RGB')
rgb_img.save(buffered, format="JPEG")
rekognition_res = rekognition.detect_faces(Image={"Bytes": buffered.getvalue()}, Attributes=['ALL'])

Amplie o TPS das APIs sem estado espalhando chamadas de API em várias regiões

Outro caso de uso do Bytes A opção é que você pode aumentar o TPS das APIs sem estado espalhando as chamadas de API em várias regiões. Dessa forma, você não fica limitado pela cota de serviço regional da API porque pode obter TPS adicionais de outras regiões.

No exemplo a seguir, uma função do Lambda é criada para chamar o Amazon Rekognition DetectLabels API com o Bytes opção. Para aumentar o TPS máximo, você pode distribuir as chamadas de API em várias regiões com pesos. O TPS máximo que você pode atingir é calculado com: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). O exemplo a seguir usa us-east-1 e us-west-2 Regiões.

espalhar o tráfego Rekognition

O trecho de código para chamar o DetectLabels API é a seguinte:

region_1 = os.getenv("REKOGNITION_REGION_1")
region_2 = os.getenv("REKOGNITION_REGION_2")
region_1_traffic_percentage = int(os.getenv("REGION_1_TRAFFIC_PERCENTAGE"))

# randomly generate a number between 1, 100
random_num = random.randint(1, 100)
region = region_1 if random_num <= region_1_traffic_percentage else region_2
rekognition = boto3.client('rekognition', region_name=region)
response = rekognition.detect_labels(Image={"Bytes": image_bytes})
print(response)

Porque us-east-1 e us-west-2 ambos têm no máximo 50 TPS para a API Amazon Rekognition DetectFaces, você pode distribuir uniformemente as chamadas de API com peso 50/50 definindo a variável de ambiente REGION_1_TRAFFIC_PERCENTAGE para 50. Dessa forma, você pode atingir min (50/50%, 50/50%) = 100 TPS em teoria.

Para validar a ideia, a função Lambda é exposta como uma API REST com Gateway de API da Amazon. em seguida JMeter é usado para carregar o teste da API.

teste de carga de chamadas da API do Rekognition

REGION_1_TRAFFIC_PERCENTAGE é primeiro definido como 100, desta forma todos DetectFaces As chamadas de API são enviadas para us-east-1 só. Em teoria, o TPS máximo que pode ser alcançado é limitado pela cota de serviço em us-east-1, que é 50 TPS. Teste de carga no terminal de API personalizado, começando com 50 threads simultâneos, adicionando 5 threads gradualmente até ProvisionedThroughputExceededException retornado do Amazon Rekognition é observado.

REGION_1_TRAFFIC_PERCENTAGE é então definido como 50, desta forma todos DetectLabels As chamadas de API são enviadas uniformemente para us-east-1 e us-west-2. Em teoria, o TPS máximo que pode ser alcançado é a cota de serviço que as duas Regiões combinam, que é de 100 TPS. Inicie o teste de carga novamente a partir de 100 threads para encontrar o TPS máximo.

A tabela a seguir resume os resultados do teste de carga.

Porcentagem de chamadas de API DetectLabels para us-east-1 Porcentagem de chamadas de API DetectLabels para us-west-2 TPS máximo em teoria Máximo de execuções simultâneas sem ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Conclusão

Muitos clientes estão usando APIs sem estado do Amazon Rekognition Image para vários casos de uso, incluindo verificação de identidade, moderação de conteúdo, processamento de mídia e muito mais. Esta postagem discutiu as duas opções de transmissão de imagens e como usar a opção de bytes brutos para os seguintes casos de uso:

  • Disponibilidade regional do Amazon Rekognition
  • Residência de dados do cliente
  • Ampliação do TPS das APIs sem estado do Amazon Rekognition

Confira como o Amazon Rekognition é usado em diferentes casos de uso de visão computacional e comece sua jornada de inovação.


Sobre os autores

Melhore a escalabilidade das APIs sem estado do Amazon Rekognition usando o PlatoBlockchain Data Intelligence de várias regiões. Pesquisa vertical. Ai.Sharon Lic é um arquiteto de soluções da AWS, baseado na área de Boston, MA. Ela trabalha com clientes corporativos, ajudando-os a resolver problemas difíceis e desenvolver na AWS. Fora do trabalho, ela gosta de passar tempo com a família e explorar os restaurantes locais.

Melhore a escalabilidade das APIs sem estado do Amazon Rekognition usando o PlatoBlockchain Data Intelligence de várias regiões. Pesquisa vertical. Ai.Vaibhav Xá é um Arquiteto de Soluções Sênior da AWS e gosta de ajudar seus clientes com tudo na nuvem e possibilitar sua jornada de adoção da nuvem. Fora do trabalho, ele adora viajar, explorar novos lugares e restaurantes, cozinhar, seguir esportes como críquete e futebol, assistir filmes e séries (fã da Marvel) e atividades de aventura como caminhadas, pára-quedismo e a lista continua.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS