{"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\/es\/build-photogallery-app-aws-rekognition-couchbase\/","title":{"rendered":"Crear una aplicaci\u00f3n de galer\u00eda de fotos con etiquetado autom\u00e1tico mediante AWS Rekognition y Couchbase - Parte 1"},"content":{"rendered":"<p><em><a href=\"https:\/\/www.linkedin.com\/in\/ratnopam-chakrabarti\" target=\"_blank\" rel=\"noopener noreferrer\">Ratnopam Chakrabarti<\/a>\u00a0es un desarrollador de software que trabaja actualmente para Ericsson Inc. Lleva bastante tiempo centrado en IoT, tecnolog\u00edas m\u00e1quina a m\u00e1quina, coches conectados y dominios de ciudades inteligentes. Le encanta aprender nuevas tecnolog\u00edas y ponerlas en pr\u00e1ctica. Cuando no est\u00e1 trabajando, le gusta pasar tiempo con su hijo de 3 a\u00f1os.<\/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 es la primera parte de una serie de entradas en las que te presentar\u00e9 una aplicaci\u00f3n de galer\u00eda de fotos que permite a los usuarios subir cualquier imagen de su elecci\u00f3n (en formato .png o .jpg) y ver todas las im\u00e1genes que han subido otros usuarios. La aplicaci\u00f3n permite a los usuarios \"gustar\" una imagen en particular. Una vez que el usuario sube una imagen, la aplicaci\u00f3n utiliza el servicio de Amazon Web Services <a href=\"\/blog\/es\/\">API de reconocimiento<\/a> para escanear y detectar etiquetas para esa imagen. Las etiquetas m\u00e1s fiables se utilizan para etiquetar las im\u00e1genes. La aplicaci\u00f3n tambi\u00e9n permite a los usuarios hacer clic en una etiqueta concreta para ver todas las im\u00e1genes con esa etiqueta.<\/p>\n<h3>Demo<\/h3>\n<p>He aqu\u00ed una <u><a href=\"https:\/\/vimeo.com\/218099240\" target=\"_blank\" rel=\"noopener noreferrer\">enlace<\/a><\/u>\u00a0a la demo de la aplicaci\u00f3n terminada.<\/p>\n<h3>La pila tecnol\u00f3gica<\/h3>\n<p>Couchbase - Para almacenar metadatos de im\u00e1genes<\/p>\n<p>Express - Para construir el front-end con node<\/p>\n<p>AWS SDK y S3 - Para almacenar los archivos de imagen y tambi\u00e9n para Rekognition imagen<\/p>\n<p>Node.js - Para construir el backend de la aplicaci\u00f3n<\/p>\n<p>Adem\u00e1s, jQuery se utiliza para realizar llamadas Ajax desde el lado del cliente a los archivos server.js.<\/p>\n<p>Node.js se utiliza para construir todas las API RESTful que aprovecha la aplicaci\u00f3n. Utiliza las siguientes dependencias para realizar el trabajo:<\/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>He aqu\u00ed para qu\u00e9 sirven estos m\u00f3dulos:<\/p>\n<ul>\n<li>El aws-sdk - utilizado para llamar a las API de AWS Rekognition<\/li>\n<li>knox - utilizado para interactuar con Amazon S3<\/li>\n<li>gm: se utiliza para cambiar el tama\u00f1o de la imagen (no queremos almacenar im\u00e1genes de gran tama\u00f1o en S3, al fin y al cabo tiene un precio).<\/li>\n<li>formidable - utilizado para procesar los archivos de entrada<\/li>\n<li>hogan-express - proporciona <u><a href=\"https:\/\/mustache.github.io\/mustache.5.html\" target=\"_blank\" rel=\"noopener noreferrer\">Bigote<\/a><\/u>\u00a0motor de plantillas para express framework<\/li>\n<li>socket.io - utilizado para emitir eventos del servidor al cliente sobre los que se puede actuar<\/li>\n<li>couchbase - se utiliza para interactuar con la base de datos Couchbase<\/li>\n<li>uuid - utilizado para generar IDs de documentos aleatorios para almacenar documentos JSON en Couchbase<\/li>\n<\/ul>\n<h3>Papel de Couchbase<\/h3>\n<p>Estoy utilizando Couchbase en esta aplicaci\u00f3n para<\/p>\n<ol>\n<li>almacenar metadatos de la imagen, como el nombre del archivo<\/li>\n<li>almacenar otra informaci\u00f3n \u00fatil, como el n\u00famero de \"me gusta\" de una imagen y las etiquetas asignadas a una imagen<\/li>\n<\/ol>\n<p>En este post (Parte 1), describir\u00e9 los pasos necesarios para usar Couchbase con la aplicaci\u00f3n de galer\u00eda de fotos. El c\u00f3digo fuente completo de la aplicaci\u00f3n est\u00e1 disponible en <u><a href=\"https:\/\/github.com\/ratchakr\/ImageTagger\/tree\/staging\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a><\/u>.<\/p>\n<h3>Instalar Couchbase y otros m\u00f3dulos de Node<\/h3>\n<p>Para instalar todos los m\u00f3dulos enumerados en package.json, vaya al directorio ra\u00edz de la aplicaci\u00f3n y escriba:<\/p>\n<pre class=\"lang:default decode:true\">npm instalar\r\n\r\n<\/pre>\n<p>Una vez instalados todos los m\u00f3dulos, incluido Couchbase, tu tarea ahora es utilizarlo en la aplicaci\u00f3n.<\/p>\n<h4>Config.json<\/h4>\n<p>Define parte de la informaci\u00f3n configurable en un archivo .json llamado 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>Aqu\u00ed, he especificado el host y el puerto de Couchbase Server y tambi\u00e9n el bucket donde se almacenar\u00e1 la informaci\u00f3n de metadatos de la imagen.<\/p>\n<p>server = 127.0.0.1:8091 (si est\u00e1 ejecutando Couchbase localmente)<\/p>\n<p>Una vez definida la configuraci\u00f3n, la siguiente tarea consiste en importarla a la aplicaci\u00f3n expr\u00e9s.<\/p>\n<p>Aqu\u00ed tienes un fragmento del c\u00f3digo de la aplicaci\u00f3n:<\/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 haciendo uso de algunas variables de entorno para identificar el host de Couchbase y el bucket. Si no se proporcionan en tiempo de ejecuci\u00f3n, los valores predeterminados ser\u00e1n los del config.json mencionado anteriormente.<\/p>\n<h3>Ejecutar y configurar Couchbase<\/h3>\n<p>Como requisito previo para ejecutar la aplicaci\u00f3n localmente, primero hay que instalar y ejecutar Couchbase Server. Dir\u00edgete a la p\u00e1gina <u><a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\" target=\"_blank\" rel=\"noopener noreferrer\">SOPORTE<\/a><\/u><u><a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\" target=\"_blank\" rel=\"noopener noreferrer\">\u00a0DESCARGAR <\/a><\/u><u><a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\" target=\"_blank\" rel=\"noopener noreferrer\">P\u00c1GINA<\/a><\/u>\u00a0e instale seg\u00fan su propio sistema operativo. En mi caso, estoy ejecutando una instalaci\u00f3n de Couchbase 4.6 en mi sistema Windows. Una vez que Couchbase est\u00e9 funcionando, cree un bucket llamado \"photogallery\". Este bucket almacenar\u00e1 toda la meta informaci\u00f3n de las im\u00e1genes. Una cosa importante a tener en cuenta, hay que crear un \u00edndice en el bucket antes de usarlo. Para crear un \u00edndice:<\/p>\n<pre class=\"lang:default decode:true\">CREATE PRIMARY INDEX ON &lt;bucketname&gt;\r\n\r\n<\/pre>\n<p>Una vez creado el \u00edndice, dir\u00edjase a la pesta\u00f1a \u00cdndice y el \u00edndice deber\u00eda aparecer en la lista.<\/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>En un entorno de producci\u00f3n, no se recomienda tener un \u00edndice secundario global, ya que podr\u00eda causar una degradaci\u00f3n del rendimiento. Sin embargo, para la escala de nuestra aplicaci\u00f3n, est\u00e1 bien tenerlo.<\/p>\n<h3>Guardar y recuperar documentos en Couchbase<\/h3>\n<p>La aplicaci\u00f3n photogallery hace lo siguiente:<\/p>\n<ul>\n<li>Una vez que el usuario selecciona el archivo y hace clic en cargar, la aplicaci\u00f3n lo almacena en un bucket de Amazon S3.<\/li>\n<li>Una vez que el archivo se ha guardado correctamente en S3, llama a AWS Rekognition API para asignar etiquetas a la imagen.<\/li>\n<li>Una vez asignadas las etiquetas, la aplicaci\u00f3n almacena la informaci\u00f3n de metadatos de la imagen en Couchbase <em>fotogaler\u00eda<\/em>\u00a0cubo.<\/li>\n<\/ul>\n<p>Para guardar los datos en Couchbase, necesitamos el siguiente fragmento 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>Lo que hace el c\u00f3digo anterior es importar las dependencias apropiadas para interactuar con la base de datos Couchbase y definir una funci\u00f3n para guardar los datos. Se crea un cuerpo JSON con nombre de archivo, gustos y etiquetas de una imagen y luego se llama a la funci\u00f3n upsert() para guardar los datos. Si un documento no tiene un atributo \"id\" asignado, la funci\u00f3n crea uno usando uuid.v4().<\/p>\n<p>Para recuperar documentos, eche un vistazo al siguiente fragmento 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>El fragmento de c\u00f3digo anterior devuelve todas las im\u00e1genes del bucket utilizando la consulta N1QL. Esto es \u00fatil para listar todas las im\u00e1genes del bucket photogallery. Tenga en cuenta que el bucket de Couchbase almacena s\u00f3lo el nombre de archivo, una parte de la url de Amazon s3 es est\u00e1tica y la url completa se crea a\u00f1adiendo el nombre de archivo a la url est\u00e1tica de s3 de una imagen.<\/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\u00e1mica -&gt; nombre de archivo<\/p>\n<p>Toma, <a href=\"https:\/\/s3.amazonaws.com\/la-image-tagger-chakrar27\/\" target=\"_blank\" rel=\"noopener noreferrer\">la-image-tagger-chakrar27<\/a>\u00a0es el bucket s3 que he creado. Para crear este bucket, sube\u00a0<u><a href=\"https:\/\/github.com\/ratchakr\/ImageTagger\/blob\/staging\/CloudFormation_s3_bucket.json\" target=\"_blank\" rel=\"noopener noreferrer\">este<\/a><\/u>\u00a0cloudformation a AWS y crear una pila. Se crear\u00e1 el cubo s3.<\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/community\/community-writers-program\/\"><em>Este post forma parte del Programa de Escritura de la Comunidad Couchbase<\/em><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>En este post te presentamos una aplicaci\u00f3n de galer\u00eda de fotos que permite a los usuarios subir cualquier imagen de su elecci\u00f3n (en formato .png o .jpg) y ver todas las im\u00e1genes que han subido otros usuarios. La aplicaci\u00f3n permite a los usuarios \"gustar\" una imagen en particular.<\/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.2 (Yoast SEO v26.2) - 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\/es\/build-photogallery-app-aws-rekognition-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@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\/es\/author\/laura-czajkowski\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Building a photogallery app with auto tagging - Part 1","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.","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\/es\/build-photogallery-app-aws-rekognition-couchbase\/","og_locale":"es_MX","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\/es\/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":"es","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":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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, Directora de la Comunidad de Desarrolladores, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@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 es la Snr. Developer Community Manager en Couchbase supervisando la comunidad. Es responsable de nuestro bolet\u00edn mensual para desarrolladores.","url":"https:\/\/www.couchbase.com\/blog\/es\/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 es la Snr. Developer Community Manager en Couchbase supervisando la comunidad. Es responsable de nuestro bolet\u00edn mensual para desarrolladores."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=3708"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/3708\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=3708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=3708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=3708"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=3708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}