A capacidade de coletar informações a partir de imagens tem um profundo potencial comercial. E, bem, também pode ser divertido. Neste artigo, descreverei como usamos
Simplificando, a detecção de objetos de imagem é o processo de detecção e extração de informações sobre entidades em uma determinada imagem. Isso envolve detectar objetos, atividades, lugares, animais, produtos, etc.
A detecção de objetos de imagem tem uma ampla variedade de casos de uso em diversos setores. Grandes setores como bancos, seguros, mídias sociais, aplicativos de namoro, agências de notícias e FinTech usam a detecção de objetos de uma forma ou de outra.
Recentemente, recebemos a tarefa de construir um recurso de detecção de objetos de imagem para uma startup de mídia social. O caso de uso era simples: os usuários deveriam poder selecionar algumas de suas fotos favoritas e enviá-las para serem apresentadas em uma das páginas de mídia social da startup.
A equipe de marketing de mídia social precisava de uma maneira de pesquisar determinados temas nas imagens enviadas – como fotos do oceano, pontos turísticos populares, animais, shows musicais, etc.
Analisar imagens e classificá-las com base no cenário e nos objetos contidos na imagem não é uma tarefa simples. A visão humana é simplesmente notável, e construir um aplicativo capaz de replicar a capacidade do cérebro de detectar objetos é imensamente complexo. Existe toda uma indústria de visão computacional dedicada a fazer exatamente isso.
Realizar a detecção de objetos do zero normalmente é um processo de várias etapas que envolve:
Nosso objetivo com esse recurso, como todos os outros no projeto, era construí-lo rapidamente e testar sua eficácia em um ambiente de produção o mais rápido possível. Além disso, não queríamos dedicar recursos de desenvolvimento à criação de uma solução desde o início, quando poderíamos aproveitar os serviços de nuvem existentes.
Cue Serverless – todo o back-end da startup é totalmente sem servidor e orientado a eventos. Com essa arquitetura, conseguimos ter equipes de desenvolvedores que só precisam se concentrar em recursos que diferenciam o aplicativo de mídia social dos demais. Serverless também nos permite construir serviços altamente escaláveis e, ao mesmo tempo, pagar apenas exatamente pelo que usamos – uma consideração importante para uma startup em expansão.
Portanto, para alcançar esse recurso, usamos o Amazon Rekognition — um serviço de análise de imagens e vídeos totalmente sem servidor. Usando o Rekognition, conseguimos desenvolver esse fluxo de trabalho complexo e crítico em questão de horas . Vamos mergulhar nisso.
Amazon Rekognition é uma oferta AWS Serverless que usa aprendizado profundo para realizar análises de imagens e vídeos. Ser totalmente sem servidor significa que com o Rekognition não precisamos nos preocupar com a complexidade da infraestrutura subjacente; pagamos apenas pelo que usamos e nos fornece software pré-escrito para tarefas de análise de imagens e vídeos. O Rekognition oferece uma variedade de recursos, incluindo detecção de rótulos de imagens, detecção de rosto, detecção de celebridades, moderação de conteúdo e detecção de texto.
A melhor parte? O Rekognition abstrai o trabalho pesado de construção, treinamento e análise de modelos de aprendizado profundo. A análise de imagens e vídeos é rápida e simples, com configuração mínima necessária. Não precisávamos nos preocupar em construir e treinar nossos próprios conjuntos de dados e provisionar a capacidade do servidor para que nosso serviço fosse escalonado. Tudo o que precisávamos nos preocupar era com a integração.
A arquitetura é direta. Nosso aplicativo móvel carrega imagens dos telefones dos usuários em um bucket S3. O upload para o S3 aciona uma função Lambda que, por sua vez, chama a API Rekognition e armazena os resultados no DynamoDB para consulta.
Diagrama de arquitetura de detecção de objetos de imagem sem servidor usando AWS
Escrever código é divertido, certo? Bem, escrever menos código é ainda mais divertido.
O Rekognition expõe um conjunto de APIs para as quais você envia dados de imagem, para as quais realiza a análise e retorna os resultados. Para nosso caso de uso, usamos o
Uma versão simplificada de nosso arquivo de infraestrutura como código de estrutura sem servidor se parece com isto:
//serverless.yamlfunctions: imageLabelDetection: handler: image-label-detection.handler events: - s3: bucket: my-image-bucket event: s3:ObjectCreated:* existing: true iamRoleStatements: - Effect: Allow Action: rekognition:DetectLabels Resource: "*" - Effect: Allow Action: s3:GetObject Resource: arn:aws:s3:::my-image-bucket
Nosso código Lambda simplesmente chama a API Rekognition e armazena os resultados no DynamoDB, mas você pode usar o que fizer sentido para seu caso de uso. Obtemos o nome do bucket S3 e o nome do objeto da imagem do evento S3 e os passamos para a função detectLabels do
Também passamos dois parâmetros opcionais (MaxLabels e MinConfidence) para especificar o limite do nível de confiança e um número máximo de rótulos que queremos retornar. No exemplo abaixo, obteremos apenas até 20 rótulos na resposta, e todos os rótulos terão um nível de confiança superior a 80%.
//image-label-detecion.jsconst AWS = require("aws-sdk");const rekognition = new AWS.Rekognition();exports.handler = async (event) => { const imageDetails = event.Records[0].s3; const bucketName = imageDetails.bucket.name; const objectKey = imageDetails.object.key; const rekognitionResp = await rekognition .detectLabels({ Image: { S3Object: { Bucket: bucketName, Name: objectKey, }, }, MaxLabels: 20, MinConfidence: 80, }) .promise(); // Send to data store, eg DynamoDB // ... };
Quem não ama a foto de um cachorro? Abaixo está uma resposta para uma imagem que carregamos em nosso bucket S3. Como você pode ver, o Rekognition determina corretamente que se trata da imagem de um cachorro em um caminho de cascalho ao ar livre (e nos diz onde o cachorro está na imagem!).
Resposta de reconhecimento (esquerda), imagem carregada (direita).
Então, o que penso depois de usar o Rekognition em produção por alguns meses? Aqui está uma lista das principais conclusões:
TLDR: O Rekognition nos permitiu construir rapidamente um recurso de detecção de objetos de imagem que é preciso, rápido e escalonável.