{"id":3709,"date":"2017-06-20T05:33:32","date_gmt":"2017-06-20T12:33:32","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=3709"},"modified":"2025-06-13T20:40:54","modified_gmt":"2025-06-14T03:40:54","slug":"build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/","title":{"rendered":"Build a photogallery app with auto tagging using AWS Rekognition and Couchbase \u2013 Part 3"},"content":{"rendered":"<p><em><a href=\"https:\/\/www.linkedin.com\/in\/ratnopam-chakrabarti\" target=\"_blank\" rel=\"noopener noreferrer\">Ratnopam Chakrabarti<\/a>\u00a0is a software developer currently working for Ericsson Inc. He has been focused on IoT, machine-to-machine technologies, connected cars, and smart city domains for quite a while. He loves learning new technologies and putting them to work. When he\u2019s not working, he enjoys spending time with his 3-year-old son.<\/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<h3>Awesome AWS (Amazon Web Services)<\/h3>\n<p>In <a href=\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-couchbase\/\">Parts 1<\/a> and <a href=\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-aws-rekognition-and-couchbase-part2\/\">Part 2<\/a> of the series, I talked mostly about Couchbase. In this part, I\u2019m going to focus on AWS, and more specifically, the AWS Reckognition API.<\/p>\n<h3>Create an S3 Bucket<\/h3>\n<p>As a prerequisite to run the photogallery app, you need to create an s3 bucket using your Amazon Web Services account. You can use the <u><a href=\"https:\/\/github.com\/ratchakr\/ImageTagger\/blob\/staging\/CloudFormation_s3_bucket.json\" target=\"_blank\" rel=\"noopener noreferrer\">cloudformation template<\/a><\/u>\u00a0I mentioned in Part 1 of the series to create it automatically; otherwise you can always create it manually using the AWS Console.<\/p>\n<h3>Bucket Policy<\/h3>\n<p>Couchbase and S3 both use the concept of \u201cbucket\u201d to store data. I will try to mention proper context while referring to the term \u201cbucket\u201d \u2013 as to whether it\u2019s a Couchbase bucket or an S3 bucket. Try not tot get confused between the two, although the underlying objective of a \u201cbucket\u201d is to store data in both Couchbase and S3.<\/p>\n<p>Here, I am referring to an S3 bucket.<\/p>\n<p>In order to allow users to store images in an s3 bucket, we need to create a bucket policy. By default, access to an s3 bucket is private. In order to override the default policy, we create the following policy which allows all users to store objects into s3 and fetch objects from s3.<\/p>\n<pre class=\"lang:default decode:true\">{\r\n\r\n\u00a0 \u00a0 \"Version\": \"2012-10-17\",\r\n\r\n\u00a0 \u00a0 \"Id\": \"Policy1493677249191\",\r\n\r\n\u00a0 \u00a0 \"Statement\": [\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 {\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Sid\": \"Stmt1493677246291\",\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Effect\": \"Allow\",\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Principal\": \"*\",\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Action\": \"s3:GetObject\",\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Resource\": \"arn:aws:s3:::la-image-tagger-chakrar27\/*\"\r\n\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 ]\r\n\r\n}<\/pre>\n<p>In my case, the created bucket name is <em>la-image-tagger-chakrar27.<\/em><\/p>\n<h3>Image Analysis Using Rekognition<\/h3>\n<p>In late 2016, AWS launched Rekognition, an image processing service that can analyze an image and infer useful information about the image. For a detailed study, please refer to the AWS Rekognition documentation <u><a href=\"https:\/\/aws.amazon.com\/rekognition\/?sc_channel=PS&amp;sc_campaign=acquisition_US_group_3&amp;sc_publisher=google&amp;sc_medium=rekognition_b_group_3&amp;sc_content=aws_recognition_software_exact&amp;sc_detail=aws%20rekognition&amp;sc_category=rekognition&amp;sc_segment=194345255026&amp;sc_matchtype=e&amp;sc_country=us&amp;s_kwcid=AL!4422!3!194345255026!e!!g!!aws%20rekognition&amp;ef_id=WR0nXwAAAGocXyYY:20170519042001:s\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a><\/u>.<\/p>\n<p>In the context of the photogallery app, I used the <em>detectLabels() <\/em>API that AWS Rekognition offers. It returns a key-value pair of labels with confidence scores. The following snippet of code does the trick:<\/p>\n<pre class=\"lang:default decode:true \">(function(filename, res) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var rekognition = new aws.Rekognition();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var params = {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Image: {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0S3Object: {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Bucket: S3_BUCKET,\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Name: filename\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0},\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MaxLabels: 5,\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MinConfidence: 50\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0rekognition.detectLabels(params, function(err, data) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (err) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(\"Error in REKO\" + err);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ successful response\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0data = JSON.stringify(data);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0})\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\r\n\r\n<\/pre>\n<p>The above code calls AWS Rekognition\u2019s <em>detectLabels<\/em>\u00a0API and returns a set of labels based on the image analysis. In this case, I have limited the max number of labels to 5 and the minimum confidence percentage as 50 percent.<\/p>\n<p>Once the labels are returned, it\u2019s parsed using JSON and pushed into <em>tags <\/em>array. Once this is done, the <em>save() <\/em>function is called to store the document into the Couchbase bucket.<\/p>\n<p>Rekognition offers some cool APIs like <em>detectFaces()<\/em>\u00a0and <em>compareFaces()<\/em>\u00a0which open up a whole new spectrum of use cases; however, for now I stuck to the simple <em>detectLabels()<\/em>\u00a0API to start with.<\/p>\n<h3>Run the App<\/h3>\n<p>In order to run the photogallery node app, you need to have the S3 access key and secret keys available with you. You can use the \u201cdotenv\u201d\u00a0module of node to store these in a file named .env in your source\u00a0code. If you do this, you <strong>must add the .env file to .gitignore<\/strong><strong>:<\/strong><\/p>\n<pre class=\"lang:default decode:true \">node_modules\/\r\n\r\n*.env<\/pre>\n<p>You don\u2019t want to expose the\u00a0AWS\u00a0access keys to the world unless you are in an extremely philanthropic mood. I,\u00a0however,\u00a0prefer to pass these values as an environment variable. Here\u2019s how to run the node app using env variables:<\/p>\n<pre class=\"lang:default decode:true \">env AWS_ACCESS_KEY=&lt;Your Access Key&gt; AWS_SECRET_KEY=&lt;Your Secret key&gt; S3_BUCKET=&lt;S3-bucket-name&gt; HOST=https:\/\/localhost:3000 COUCHBASE_HOST=127.0.0.1:8091 COUCHBASE_BUCKET=photogallery \u00a0node upload.js<\/pre>\n<p><a href=\"https:\/\/www.couchbase.com\/community\/community-writers-program\/\"><em>This post is part of the Couchbase Community Writing Program<\/em><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ratnopam Chakrabarti\u00a0is a software developer currently working for Ericsson Inc. He has been focused on IoT, machine-to-machine technologies, connected cars, and smart city domains for quite a while. He loves learning new technologies and putting them to work. When he\u2019s [&hellip;]<\/p>\n","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-3709","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 v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Build a photogallery app with auto tagging \u2013 Part 3<\/title>\n<meta name=\"description\" content=\"Part 1 and Part 2 is mostly about Couchbase. This part focuses on building a photogallery app with auto tagging using AWS Rekognition and Couchbase.\" \/>\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\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\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 3\" \/>\n<meta property=\"og:description\" content=\"Part 1 and Part 2 is mostly about Couchbase. This part focuses on building a photogallery app with auto tagging using AWS Rekognition and Couchbase.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-20T12:33:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:40:54+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=\"4 minutes\" \/>\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-auto-tagging-using-aws-rekognition-couchbase-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/\"},\"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 3\",\"datePublished\":\"2017-06-20T12:33:32+00:00\",\"dateModified\":\"2025-06-14T03:40:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/\"},\"wordCount\":570,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#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\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/\",\"name\":\"Build a photogallery app with auto tagging \u2013 Part 3\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2017-06-20T12:33:32+00:00\",\"dateModified\":\"2025-06-14T03:40:54+00:00\",\"description\":\"Part 1 and Part 2 is mostly about Couchbase. This part focuses on building a photogallery app with auto tagging using AWS Rekognition and Couchbase.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#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-auto-tagging-using-aws-rekognition-couchbase-3\/#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 3\"}]},{\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\":\"en-US\",\"@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\/author\/laura-czajkowski\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Build a photogallery app with auto tagging \u2013 Part 3","description":"Part 1 and Part 2 is mostly about Couchbase. This part focuses on building a photogallery app with auto tagging using AWS Rekognition and Couchbase.","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\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/","og_locale":"en_US","og_type":"article","og_title":"Build a photogallery app with auto tagging using AWS Rekognition and Couchbase \u2013 Part 3","og_description":"Part 1 and Part 2 is mostly about Couchbase. This part focuses on building a photogallery app with auto tagging using AWS Rekognition and Couchbase.","og_url":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/","og_site_name":"The Couchbase Blog","article_published_time":"2017-06-20T12:33:32+00:00","article_modified_time":"2025-06-14T03:40:54+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":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/"},"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 3","datePublished":"2017-06-20T12:33:32+00:00","dateModified":"2025-06-14T03:40:54+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/"},"wordCount":570,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#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":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/","url":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/","name":"Build a photogallery app with auto tagging \u2013 Part 3","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2017-06-20T12:33:32+00:00","dateModified":"2025-06-14T03:40:54+00:00","description":"Part 1 and Part 2 is mostly about Couchbase. This part focuses on building a photogallery app with auto tagging using AWS Rekognition and Couchbase.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/build-photogallery-app-auto-tagging-using-aws-rekognition-couchbase-3\/#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-auto-tagging-using-aws-rekognition-couchbase-3\/#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 3"}]},{"@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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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":"en-US","@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\/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 is the Snr. Developer Community Manager at Couchbase overseeing the community. She\u2019s responsible for our monthly developer newsletter."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/3709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=3709"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/3709\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=3709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=3709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=3709"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=3709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}