{"id":3708,"date":"2017-06-07T04:57:03","date_gmt":"2017-06-07T11:57:03","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3708"},"modified":"2025-06-13T20:40:57","modified_gmt":"2025-06-14T03:40:57","slug":"build-photogallery-app-aws-rekognition-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/build-photogallery-app-aws-rekognition-couchbase\/","title":{"rendered":"Criar um aplicativo de galeria de fotos com marca\u00e7\u00e3o autom\u00e1tica usando o AWS Rekognition e o Couchbase - Parte 1"},"content":{"rendered":"<p><em><a href=\"https:\/\/www.linkedin.com\/in\/ratnopam-chakrabarti\" target=\"_blank\" rel=\"noopener noreferrer\">Ratnopam Chakrabarti<\/a>\u00a0\u00e9 um desenvolvedor de software que trabalha atualmente para a Ericsson Inc. Ele tem se concentrado em IoT, tecnologias m\u00e1quina a m\u00e1quina, carros conectados e dom\u00ednios de cidades inteligentes por um bom tempo. Ele adora aprender novas tecnologias e coloc\u00e1-las em pr\u00e1tica. Quando n\u00e3o est\u00e1 trabalhando, gosta de passar o tempo com seu filho de 3 anos.<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2542\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/02\/ratnopamchakrabarti2.jpeg\" alt=\"Ratnopam Chakrabarti\" width=\"150\" height=\"200\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/ratnopamchakrabarti2.jpeg 150w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/ratnopamchakrabarti2-15x20.jpeg 15w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/p>\n<p>Esta \u00e9 a Parte 1 de uma s\u00e9rie de publica\u00e7\u00f5es em que apresentarei um aplicativo de galeria de fotos que permite que os usu\u00e1rios carreguem qualquer imagem de sua escolha (em formato .png ou .jpg) e vejam todas as imagens que foram carregadas por outros usu\u00e1rios. O aplicativo permite que os usu\u00e1rios \"curtam\" uma determinada imagem. Depois que um usu\u00e1rio carrega uma imagem, o aplicativo usa o servi\u00e7o Amazon Web Services' <a href=\"\/blog\/pt\/\">API de reconhecimento<\/a> para digitalizar e detectar r\u00f3tulos para essa imagem. Os r\u00f3tulos retornados com maior confian\u00e7a s\u00e3o usados para marcar as imagens. O aplicativo tamb\u00e9m permite que os usu\u00e1rios cliquem em uma determinada etiqueta para visualizar todas as imagens com essa etiqueta.<\/p>\n<h3>Demonstra\u00e7\u00e3o<\/h3>\n<p>Aqui est\u00e1 um <u><a href=\"https:\/\/vimeo.com\/218099240\" target=\"_blank\" rel=\"noopener noreferrer\">link<\/a><\/u>\u00a0para a demonstra\u00e7\u00e3o do aplicativo finalizado.<\/p>\n<h3>A pilha de tecnologia<\/h3>\n<p>Couchbase - Para armazenar metadados de imagens<\/p>\n<p>Express - Para criar o front-end com o n\u00f3<\/p>\n<p>AWS SDK e S3 - Para armazenar os arquivos de imagem e tamb\u00e9m para o reconhecimento de imagens<\/p>\n<p>Node.js - Para criar o back-end do aplicativo<\/p>\n<p>Al\u00e9m disso, o jQuery \u00e9 usado para fazer chamadas Ajax do lado do cliente para os arquivos server.js.<\/p>\n<p>O Node.js \u00e9 usado para criar todas as APIs RESTful que o aplicativo utiliza. Ele usa as seguintes depend\u00eancias para realizar o trabalho:<\/p>\n<pre class=\"lang:default decode:true\">package.json\r\n\r\n\u00a0 \u00a0 \"aws-sdk\": \"*\",\r\n\r\n\u00a0 \u00a0 \"couchbase\": \"^2.3.3\",\r\n\r\n\u00a0 \u00a0 \"express\": \"4.13.0\",\r\n\r\n\u00a0 \u00a0 \"formidable\": \"1.0.17\",\r\n\r\n\u00a0 \u00a0 \"gm\": \"^1.20.0\",\r\n\r\n\u00a0 \u00a0 \"hogan-express\": \"^0.5.2\",\r\n\r\n\u00a0 \u00a0 \"knox\": \"^0.9.2\",\r\n\r\n\u00a0 \u00a0 \"socket.io\": \"1.0.5\",\r\n\r\n\u00a0 \u00a0 \"uuid\": \"^2.0.1\"\r\n\r\n<\/pre>\n<p>Veja para que servem esses m\u00f3dulos:<\/p>\n<ul>\n<li>O aws-sdk - usado para chamar as APIs do AWS Rekognition<\/li>\n<li>knox - usado para interagir com o Amazon S3<\/li>\n<li>gm - usado para redimensionar a imagem (n\u00e3o queremos armazenar imagens de tamanho grande no S3, afinal, ele tem um pre\u00e7o)<\/li>\n<li>formidable - usado para processar os arquivos de entrada<\/li>\n<li>hogan-express - fornece <u><a href=\"https:\/\/mustache.github.io\/mustache.5.html\" target=\"_blank\" rel=\"noopener noreferrer\">Bigode<\/a><\/u>\u00a0mecanismo de modelo para a estrutura express<\/li>\n<li>socket.io - usado para emitir eventos do servidor para o cliente que podem ser acionados<\/li>\n<li>couchbase - usado para interagir com o banco de dados do Couchbase<\/li>\n<li>uuid - usado para gerar IDs de documentos aleat\u00f3rios para armazenar documentos JSON no Couchbase<\/li>\n<\/ul>\n<h3>Fun\u00e7\u00e3o do Couchbase<\/h3>\n<p>Estou usando o Couchbase neste aplicativo para<\/p>\n<ol>\n<li>armazenar metadados da imagem, como o nome do arquivo<\/li>\n<li>armazenar outras informa\u00e7\u00f5es \u00fateis, como o n\u00famero de \"curtidas\" de uma imagem e as tags atribu\u00eddas a uma imagem<\/li>\n<\/ol>\n<p>Nesta postagem (Parte 1), descreverei as etapas necess\u00e1rias para usar o Couchbase com o aplicativo de galeria de fotos. O c\u00f3digo-fonte completo do aplicativo est\u00e1 dispon\u00edvel em <u><a href=\"https:\/\/github.com\/ratchakr\/ImageTagger\/tree\/staging\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a><\/u>.<\/p>\n<h3>Instalar o Couchbase e outros m\u00f3dulos do Node<\/h3>\n<p>Para instalar todos os m\u00f3dulos listados no package.json acima, v\u00e1 para o diret\u00f3rio raiz do aplicativo e digite:<\/p>\n<pre class=\"lang:default decode:true\">npm install\r\n\r\n<\/pre>\n<p>Depois que todos os m\u00f3dulos, inclusive o Couchbase, estiverem instalados, sua tarefa agora \u00e9 us\u00e1-los no aplicativo.<\/p>\n<h4>Config.json<\/h4>\n<p>Defina algumas das informa\u00e7\u00f5es configur\u00e1veis em um arquivo .json chamado config.json.<\/p>\n<pre class=\"lang:default decode:true\">{\r\n\r\n\u00a0 \u00a0 \"couchbase\": {\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"server\": \"127.0.0.1:8091\",\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"bucket\": \"photogallery\"\r\n\r\n\u00a0 \u00a0 }\r\n\r\n}<\/pre>\n<p>Aqui, especifiquei o host e a porta do Couchbase Server e tamb\u00e9m o bucket em que as informa\u00e7\u00f5es de metadados da imagem ser\u00e3o armazenadas.<\/p>\n<p>server = 127.0.0.1:8091 (se voc\u00ea estiver executando o Couchbase localmente)<\/p>\n<p>Depois que a configura\u00e7\u00e3o \u00e9 definida, a pr\u00f3xima tarefa \u00e9 importar essa configura\u00e7\u00e3o para o aplicativo expresso.<\/p>\n<p>Aqui est\u00e1 um trecho do c\u00f3digo do aplicativo:<\/p>\n<pre class=\"lang:default decode:true\">var couchbase = require(\"couchbase\");\r\n\r\nvar config = require(\".\/config\");\r\n\r\nmodule.exports.bucket = (new couchbase.Cluster(process.env.COUCHBASE_HOST || config.couchbase.server)).openBucket(\r\n\r\n\u00a0 \u00a0 process.env.COUCHBASE_BUCKET || config.couchbase.bucket);<\/pre>\n<p>Estamos usando algumas vari\u00e1veis de ambiente aqui para identificar o host do Couchbase e o bucket. Se elas n\u00e3o forem fornecidas em tempo de execu\u00e7\u00e3o, os valores ser\u00e3o padronizados para o config.json mencionado acima.<\/p>\n<h3>Executar e configurar o Couchbase<\/h3>\n<p>Como pr\u00e9-requisito para executar o aplicativo localmente, primeiro \u00e9 necess\u00e1rio instalar e executar o Couchbase Server. V\u00e1 para o diret\u00f3rio <u><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\" target=\"_blank\" rel=\"noopener noreferrer\">BASE DE SOF\u00c1<\/a><\/u><u><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u00a0DOWNLOAD <\/a><\/u><u><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\" target=\"_blank\" rel=\"noopener noreferrer\">P\u00c1GINA<\/a><\/u>\u00a0e instale de acordo com seu pr\u00f3prio sistema operacional. No meu caso, estou executando uma instala\u00e7\u00e3o do Couchbase 4.6 em meu sistema Windows. Quando o Couchbase estiver instalado e funcionando, crie um bucket chamado \"photogallery\". Esse bucket armazenar\u00e1 todas as meta-informa\u00e7\u00f5es da imagem. Um aspecto importante a ser observado \u00e9 que \u00e9 necess\u00e1rio criar um \u00edndice no bucket antes de us\u00e1-lo. Para criar um \u00edndice:<\/p>\n<pre class=\"lang:default decode:true\">CREATE PRIMARY INDEX ON &lt;bucketname&gt;\r\n\r\n<\/pre>\n<p>Depois que o \u00edndice for criado, v\u00e1 at\u00e9 a guia \u00cdndice e o \u00edndice dever\u00e1 ser listado.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/06\/pasted-image-0.png\" alt=\"pasted image 0\" \/><\/p>\n<p>Em um ambiente de produ\u00e7\u00e3o, n\u00e3o \u00e9 recomend\u00e1vel ter um \u00edndice secund\u00e1rio global, pois isso pode causar degrada\u00e7\u00e3o do desempenho. No entanto, para a escala do nosso aplicativo, n\u00e3o h\u00e1 problema em t\u00ea-lo.<\/p>\n<h3>Salvar e recuperar documentos no Couchbase<\/h3>\n<p>O aplicativo de galeria de fotos faz as seguintes coisas:<\/p>\n<ul>\n<li>Quando o usu\u00e1rio seleciona o arquivo e clica em upload, o aplicativo armazena o arquivo em um bucket do Amazon S3.<\/li>\n<li>Depois que o arquivo \u00e9 salvo no S3 com \u00eaxito, ele chama a API do AWS Rekognition para atribuir tags \u00e0 imagem.<\/li>\n<li>Depois que as tags s\u00e3o atribu\u00eddas, o aplicativo armazena as informa\u00e7\u00f5es de metadados da imagem no Couchbase <em>Galeria de fotos<\/em>\u00a0balde.<\/li>\n<\/ul>\n<p>Para salvar os dados no Couchbase, precisamos do seguinte trecho de c\u00f3digo:<\/p>\n<pre class=\"lang:default decode:true\">\/\/ import variables\r\n\r\nvar uuid = require(\"uuid\");\r\n\r\nvar db = require(\"..\/upload\").bucket;\r\n\r\nvar config = require(\"..\/config\");\r\n\r\nvar N1qlQuery = require('couchbase').N1qlQuery;\r\n\r\n\/\/define a model\r\n\r\nfunction ImageModel() { };\r\n\r\n\/\/ define the save function\r\n\r\n\u00a0 \u00a0 ImageModel.save = function(data, callback) {\r\n\r\n\u00a0 \u00a0 var jsonObject = {\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 filename: data.filename,\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 likes: data.likes,\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 tags: data.tags\r\n\r\n\u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 \/\/ If the document id doesn't exist create a unique id for inserting\r\n\r\n\u00a0 \u00a0 var documentId = data.id ? data.id : uuid.v4();\r\n\r\n\u00a0 \u00a0 db.upsert(documentId, jsonObject, function(error, result) {\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 if(error) {\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 callback(error, null);\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return;\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 callback(null, {message: \"success\", data: result});\r\n\r\n\u00a0 \u00a0 });\r\n\r\n}<\/pre>\n<p>O que o c\u00f3digo acima faz \u00e9 importar as depend\u00eancias apropriadas para interagir com o banco de dados Couchbase e definir uma fun\u00e7\u00e3o para salvar os dados. Um corpo JSON \u00e9 criado com o nome do arquivo, os gostos e as tags de uma imagem e, em seguida, a fun\u00e7\u00e3o upsert() \u00e9 chamada para salvar os dados. Se um documento n\u00e3o tiver um atributo \"id\" atribu\u00eddo, a fun\u00e7\u00e3o criar\u00e1 um usando uuid.v4().<\/p>\n<p>Para a recupera\u00e7\u00e3o de documentos, d\u00ea uma olhada no seguinte trecho de c\u00f3digo:<\/p>\n<pre class=\"lang:default decode:true\">\/*\r\n\r\n\u00a0* Get all documents from Couchbase Server using N1QL\r\n\r\n\u00a0*\/\r\n\r\nImageModel.getAll = function(callback) {\r\n\r\n\u00a0 \u00a0 var statement = \"SELECT META(photos).id, filename, likes, tags \" +\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"FROM `\" + config.couchbase.bucket + \"` AS photos\";\r\n\r\n\u00a0 \u00a0 var query = N1qlQuery.fromString(statement).consistency(N1qlQuery.Consistency.REQUEST_PLUS);\r\n\r\n\u00a0 \u00a0 db.query(query, function(error, result) {\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 if(error) {\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return callback(error, null);\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 callback(null, result);\r\n\r\n\u00a0 \u00a0 });\r\n\r\n};<\/pre>\n<p>O trecho de c\u00f3digo acima retorna todas as imagens do compartimento usando a consulta N1QL. Isso \u00e9 \u00fatil para listar todas as imagens do compartimento da galeria de fotos. Observe que o bucket do Couchbase armazena somente o nome do arquivo, uma parte da url do Amazon s3 \u00e9 est\u00e1tica e a url completa \u00e9 criada anexando o nome do arquivo \u00e0 url est\u00e1tica do s3 de uma imagem.<\/p>\n<p>Parte est\u00e1tica -&gt; <u><a href=\"https:\/\/s3.amazonaws.com\/la-image-tagger-chakrar27\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/s3.amazonaws.com\/la-image-tagger-chakrar27\/<\/a><\/u><\/p>\n<p>Parte din\u00e2mica -&gt; nome do arquivo<\/p>\n<p>Aqui, <a href=\"https:\/\/s3.amazonaws.com\/la-image-tagger-chakrar27\/\" target=\"_blank\" rel=\"noopener noreferrer\">la-image-tagger-chakrar27<\/a>\u00a0\u00e9 o bucket s3 que criei. Para criar esse bucket, fa\u00e7a upload de\u00a0<u><a href=\"https:\/\/github.com\/ratchakr\/ImageTagger\/blob\/staging\/CloudFormation_s3_bucket.json\" target=\"_blank\" rel=\"noopener noreferrer\">este<\/a><\/u>\u00a0modelo cloudformation para o AWS e crie uma pilha. Ele criar\u00e1 o bucket s3.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/community\/community-writers-program\/\"><em>Esta postagem faz parte do Programa de Reda\u00e7\u00e3o da Comunidade Couchbase<\/em><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Nesta publica\u00e7\u00e3o, apresentaremos um aplicativo de galeria de fotos que permite que os usu\u00e1rios carreguem qualquer imagem de sua escolha (em formato .png ou .jpg) e vejam todas as imagens que foram carregadas por outros usu\u00e1rios. O aplicativo permite que os usu\u00e1rios \"curtam\" uma determinada imagem.<\/p>","protected":false},"author":53,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1810,1816],"tags":[10124],"ppma_author":[9026],"class_list":["post-3708","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-mobile","category-couchbase-server","tag-amazon-web-services-aws"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Building a photogallery app with auto tagging - Part 1<\/title>\n<meta name=\"description\" content=\"Learn the photo gallery application which allows users to upload any image of their choice and view all the images that have been uploaded by other users.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/build-photogallery-app-aws-rekognition-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Build a photogallery app with auto tagging using AWS Rekognition and Couchbase \u2013 Part 1\" \/>\n<meta property=\"og:description\" content=\"Learn the photo gallery application which allows users to upload any image of their choice and view all the images that have been uploaded by other users.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/build-photogallery-app-aws-rekognition-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-07T11:57:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:40:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/ratnopamchakrabarti2.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Laura Czajkowski, Developer Community Manager, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Laura Czajkowski, Developer Community Manager, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/\"},\"author\":{\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220\"},\"headline\":\"Build a photogallery app with auto tagging using AWS Rekognition and Couchbase \u2013 Part 1\",\"datePublished\":\"2017-06-07T11:57:03+00:00\",\"dateModified\":\"2025-06-14T03:40:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/\"},\"wordCount\":978,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Amazon Web Services (AWS)\"],\"articleSection\":[\"Couchbase Mobile\",\"Couchbase Server\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/\",\"name\":\"Building a photogallery app with auto tagging - Part 1\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-06-07T11:57:03+00:00\",\"dateModified\":\"2025-06-14T03:40:57+00:00\",\"description\":\"Learn the photo gallery application which allows users to upload any image of their choice and view all the images that have been uploaded by other users.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Build a photogallery app with auto tagging using AWS Rekognition and Couchbase \u2013 Part 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220\",\"name\":\"Laura Czajkowski, Developer Community Manager, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9deb07d5daaa00220534c31768bc4409\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g\",\"caption\":\"Laura Czajkowski, Developer Community Manager, Couchbase\"},\"description\":\"Laura Czajkowski is the Snr. Developer Community Manager at Couchbase overseeing the community. She\u2019s responsible for our monthly developer newsletter.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/laura-czajkowski\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Building a photogallery app with auto tagging - Part 1","description":"Aprenda o aplicativo de galeria de fotos que permite que os usu\u00e1rios carreguem qualquer imagem de sua escolha e visualizem todas as imagens que foram carregadas por outros usu\u00e1rios.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/build-photogallery-app-aws-rekognition-couchbase\/","og_locale":"pt_BR","og_type":"article","og_title":"Build a photogallery app with auto tagging using AWS Rekognition and Couchbase \u2013 Part 1","og_description":"Learn the photo gallery application which allows users to upload any image of their choice and view all the images that have been uploaded by other users.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/build-photogallery-app-aws-rekognition-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-06-07T11:57:03+00:00","article_modified_time":"2025-06-14T03:40:57+00:00","og_image":[{"width":150,"height":200,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/02\/ratnopamchakrabarti2.jpeg","type":"image\/jpeg"}],"author":"Laura Czajkowski, Developer Community Manager, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Laura Czajkowski, Developer Community Manager, Couchbase","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/"},"author":{"name":"Laura Czajkowski, Developer Community Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220"},"headline":"Build a photogallery app with auto tagging using AWS Rekognition and Couchbase \u2013 Part 1","datePublished":"2017-06-07T11:57:03+00:00","dateModified":"2025-06-14T03:40:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/"},"wordCount":978,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Amazon Web Services (AWS)"],"articleSection":["Couchbase Mobile","Couchbase Server"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/","name":"Building a photogallery app with auto tagging - Part 1","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-06-07T11:57:03+00:00","dateModified":"2025-06-14T03:40:57+00:00","description":"Aprenda o aplicativo de galeria de fotos que permite que os usu\u00e1rios carreguem qualquer imagem de sua escolha e visualizem todas as imagens que foram carregadas por outros usu\u00e1rios.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Build a photogallery app with auto tagging using AWS Rekognition and Couchbase \u2013 Part 1"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5f1a0ece4e644bc8c037686fbc8f3220","name":"Laura Czajkowski, gerente da comunidade de desenvolvedores, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9deb07d5daaa00220534c31768bc4409","url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","caption":"Laura Czajkowski, Developer Community Manager, Couchbase"},"description":"Laura Czajkowski \u00e9 a Snr. Developer Community Manager da Couchbase, supervisionando a comunidade. Ela \u00e9 respons\u00e1vel pelo nosso boletim informativo mensal para desenvolvedores.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/laura-czajkowski\/"}]}},"authors":[{"term_id":9026,"user_id":53,"is_guest":0,"slug":"laura-czajkowski","display_name":"Laura Czajkowski, Developer Community Manager, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bc8eebaf25cbe39bc12fd7b1ef92550becc3953ab877a3f0285a59ec2d30b754?s=96&d=mm&r=g","author_category":"","last_name":"Czajkowski","first_name":"Laura","job_title":"","user_url":"","description":"Laura Czajkowski \u00e9 a Snr. Developer Community Manager da Couchbase, supervisionando a comunidade. Ela \u00e9 respons\u00e1vel pelo nosso boletim informativo mensal para desenvolvedores."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=3708"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/3708\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=3708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=3708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=3708"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=3708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}