Ratnopam Chakrabarti é um desenvolvedor de software que trabalha atualmente para a Ericsson Inc. Ele tem se concentrado em IoT, tecnologias máquina a máquina, carros conectados e domínios de cidades inteligentes por um bom tempo. Ele adora aprender novas tecnologias e colocá-las em prática. Quando não está trabalhando, gosta de passar o tempo com seu filho de 3 anos.
Impressionante AWS (Amazon Web Services)
Em Partes 1 e Parte 2 da série, falei principalmente sobre o Couchbase. Nesta parte, vou me concentrar no AWS e, mais especificamente, na API AWS Reckognition.
Criar um bucket S3
Como pré-requisito para executar o aplicativo photogallery, você precisa criar um bucket s3 usando sua conta do Amazon Web Services. Você pode usar a opção modelo de cloudformation Mencionei na Parte 1 da série para criá-lo automaticamente; caso contrário, você sempre poderá criá-lo manualmente usando o Console da AWS.
Política de balde
Tanto o Couchbase quanto o S3 usam o conceito de "bucket" para armazenar dados. Tentarei mencionar o contexto adequado ao me referir ao termo "bucket" - se é um bucket do Couchbase ou um bucket do S3. Tente não se confundir entre os dois, embora o objetivo subjacente de um "bucket" seja armazenar dados no Couchbase e no S3.
Aqui, estou me referindo a um bucket S3.
Para permitir que os usuários armazenem imagens em um bucket s3, precisamos criar uma política de bucket. Por padrão, o acesso a um bucket s3 é privado. Para substituir a política padrão, criamos a seguinte política que permite que todos os usuários armazenem objetos no s3 e busquem objetos do s3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
{ "Versão": "2012-10-17", "Id": "Policy1493677249191", "Declaração": [ { "Sid": "Stmt1493677246291", "Efeito": "Permitir", "Principal": "*", "Ação": "s3:GetObject", "Recurso": "arn:aws:s3:::la-image-tagger-chakrar27/*" } ] } |
No meu caso, o nome do bucket criado é la-image-tagger-chakrar27.
Análise de imagens usando reconhecimento de imagem
No final de 2016, a AWS lançou o Rekognition, um serviço de processamento de imagens que pode analisar uma imagem e inferir informações úteis sobre ela. Para obter um estudo detalhado, consulte a documentação do AWS Rekognition aqui.
No contexto do aplicativo de galeria de fotos, usei o detectLabels() API que o AWS Rekognition oferece. Ele retorna um par de valores-chave de rótulos com pontuações de confiança. O trecho de código a seguir faz o truque:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
(função(nome do arquivo, res) { var Reconhecimento = novo aws.Reconhecimento(); var parâmetros = { Imagem: { S3Objeto: { Balde: S3_BUCKET, Nome: nome do arquivo } }, MaxLabels: 5, MinConfiança: 50 }; Reconhecimento.detectLabels(parâmetros, função(erro, dados) { se (erro) { console.registro("Erro no REKO" + erro); } mais { // resposta bem-sucedida dados = JSON.stringify(dados); } }) } |
O código acima chama a função detectLabels API e retorna um conjunto de rótulos com base na análise da imagem. Nesse caso, limitei o número máximo de rótulos a 5 e a porcentagem mínima de confiança a 50%.
Depois que os rótulos são retornados, eles são analisados usando JSON e colocados em etiquetas array. Quando isso for feito, o salvar() é chamada para armazenar o documento no bucket do Couchbase.
O Rekognition oferece algumas APIs interessantes, como detectFaces() e compareFaces() que abrem um espectro totalmente novo de casos de uso; no entanto, por enquanto, eu me limitei ao simples detectLabels() API para começar.
Executar o aplicativo
Para executar o aplicativo de nó photogallery, você precisa ter a chave de acesso S3 e as chaves secretas disponíveis. Você pode usar o módulo "dotenv" do node para armazená-las em um arquivo chamado .env em seu código-fonte. Se fizer isso, você deve adicionar o arquivo .env ao .gitignore:
1 2 3 |
módulos_nó/ *.env |
Você não quer expor as chaves de acesso do AWS ao mundo, a menos que esteja em um clima extremamente filantrópico. Eu, no entanto, prefiro passar esses valores como uma variável de ambiente. Veja a seguir como executar o aplicativo node usando variáveis de ambiente:
1 |
env AWS_ACCESS_KEY=<Seu Acesso Chave> AWS_SECRET_KEY=<Seu Secreto chave> S3_BUCKET=<S3-balde-nome> HOST=http://localhost:3000 COUCHBASE_HOST=127.0.0.1:8091 COUCHBASE_BUCKET=photogallery node upload.js |
Esta postagem faz parte do Programa de Redação da Comunidade Couchbase