{"id":2252,"date":"2018-05-10T10:21:15","date_gmt":"2018-05-10T10:21:15","guid":{"rendered":"https:\/\/www.enprowess.com\/blogs\/?p=2252"},"modified":"2022-04-28T11:17:13","modified_gmt":"2022-04-28T05:47:13","slug":"liferay-machine-learning-tensorflow","status":"publish","type":"post","link":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/","title":{"rendered":"Liferay and Machine learning with TensorFlow!"},"content":{"rendered":"<style>\ntable, th, td { border: 1px solid black; } th, td { padding: 10px; }\n.clear {height:30px;}\n.blogimg {margin-left:20px!important;}\n<\/style>\n<p><strong>&#8220;The field of machine learning is concerned with the question of how to construct computer programs that automatically improve with experience&#8221; \u2013 Tom M. Mitchell.<\/strong><\/p>\n<p>As Artificial intelligence and Machine learning are in action now, there are various APIs and libraries available with Java too. Let\u2019s look at TensorFlow &#8211; TensorFlow is an open source software library for machine learning, developed by Google and currently used in many of their projects. An easy, fast and fun way to get started with it is \u2013 Automation of tag assignments in Liferay on uploaded images based on a pre-trained model.<\/p>\n<p>What is needed:<\/p>\n<p>a) TensorFlow libraries:<\/p>\n<ul>\n<ul>\n<li>libtensorflow_jni-1.8.0.jar<\/li>\n<li>libtensorflow-1.8.0.jar<\/li>\n<li>tensorflow-1.8.0.jar<\/li>\n<\/ul>\n<\/ul>\n<p>Source: https:\/\/mvnrepository.com\/artifact\/org.tensorflow\/tensorflow\/1.8.0<\/p>\n<div class=\"clear\"><\/div>\n<p>b) Inception5h.<\/p>\n<ul>\n<ul>\n<li>inception5h.zip (Extract it, this contains Graph file, Model directory and Label file)<\/li>\n<\/ul>\n<\/ul>\n<p>Source: https:\/\/storage.googleapis.com\/download.tensorflow.org\/models\/inception5h.zip<\/p>\n<div class=\"clear\"><\/div>\n<p>c) Liferay 7:<\/p>\n<ul>Source: https:\/\/www.liferay.com\/downloads<\/ul>\n<div class=\"clear\"><\/div>\n<p><strong><u>Lets look at the steps.<\/u><\/strong><br \/>\n1) Portlet developed in Liferay that asks you to upload image.<br \/>\n<img loading=\"lazy\" class=\"blogimg aligncenter size-full wp-image-2274\" src=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2018\/05\/TensorFlow1.png\" alt=\"Liferay 7\" width=\"650\" height=\"350\" \/><\/p>\n<p>2) Pass on the uploaded image path to LabelImage.class (TensorFlow-Inception5h), which return the metadata of the image.<\/p>\n<p>Important snippet:<\/p>\n<table class=\"blogimg\">\n<tbody>\n<tr>\n<td>byte[] graphDef = readAllBytesOrExit(Paths.get(MODEL_DIR, GRAPH_FILE));<br \/>\nList labels = readAllLinesOrExit(Paths.get(MODEL_DIR, LABEL_FILE));<br \/>\nbyte[] imageBytes = readAllBytesOrExit(Paths.get(imageFile));<\/p>\n<div style=\"margin-left:5px\">try(Tensor image = constructAndExecuteGraphToNormalizeImage(imageBytes)) {<\/div>\n<div style=\"margin-left:15px\">float[] labelProbabilities = executeInceptionGraph(graphDef, image);<br \/>\nint bestLabelIdx = maxIndex(labelProbabilities);<br \/>\nmetadata = labels.get(bestLabelIdx);<br \/>\nString output = String.format(&#8220;BEST MATCH: %s (%.2f%% likely)&#8221;, metadata,<br \/>\nlabelProbabilities[bestLabelIdx] * 100f);<br \/>\n}<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"clear\"><\/div>\n<p>3) Image is stored in Liferay in with relevant folder, along with metadata tags.<\/p>\n<div class=\"clear\"><\/div>\n<p><img loading=\"lazy\" class=\"blogimg aligncenter size-full wp-image-2275\" src=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2018\/05\/TensorFlow2.png\" alt=\"stored in Liferay in with relevant folde\" width=\"650\" height=\"400\" \/><\/p>\n<p>Note: inception5h contains trained model from google and it is test on around 2000+ images (I guess). Result won\u2019t be 100% correct, but that\u2019s all machine learning \ud83d\ude42<\/p>\n<p>Implementation reference:<\/p>\n<ul>\n<li>https:\/\/www.tensorflow.org\/install\/install_java<\/li>\n<li>https:\/\/github.com\/tensorflow\/tensorflow\/tree\/r1.8\/tensorflow\/java\/src\/main\/java\/org\/tensorflow\/examples<\/li>\n<\/ul>\n<p>And that\u2019s not all about it, this is just an example. Model used in this example is not trained in context-of\/integration-with Liferay. There can be 100s of use case where this can be applied, like predict the user action, predict the prices, navigation suggestion, image recognition and metadata extraction and many more.<\/p>\n<p>With Liferay (integration or in Liferay context), we can look forward to\u2026<\/p>\n<ul>\n<li>Training a model with updates.<\/li>\n<li>Offline employ batch normalization to speed up training of the model.<\/li>\n<li>Transfer learning by taking a pre-trained model and fine-tuning it for another task.<\/li>\n<\/ul>\n<div class=\"clear\"><\/div>\n<p>Post by,<br \/>\nVipul Dave<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;The field of machine learning is concerned with the question of how to construct computer programs that automatically improve with experience&#8221; \u2013 Tom M. Mitchell. As Artificial intelligence and Machine learning are in action now, there are various APIs and libraries available with Java too. Let\u2019s look at TensorFlow &#8211; TensorFlow is an open source&hellip; <a class=\"more-link\" href=\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/\">Continue reading <span class=\"screen-reader-text\">Liferay and Machine learning with TensorFlow!<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":2273,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8,46],"tags":[10,91,93,92,94],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v17.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Liferay and Machine learning with TensorFlow! - EnProwess Blog<\/title>\n<meta name=\"description\" content=\"Liferay and Machine learning with TensorFlow! \u00b7 1) Portlet developed in Liferay that asks you to upload image. \u00b7 2) Pass on the uploaded image\" \/>\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.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Liferay and Machine learning with TensorFlow! - EnProwess Blog\" \/>\n<meta property=\"og:description\" content=\"Liferay and Machine learning with TensorFlow! \u00b7 1) Portlet developed in Liferay that asks you to upload image. \u00b7 2) Pass on the uploaded image\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/\" \/>\n<meta property=\"og:site_name\" content=\"EnProwess Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-05-10T10:21:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-28T05:47:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2018\/05\/liferay-tensorflow.png\" \/>\n\t<meta property=\"og:image:width\" content=\"699\" \/>\n\t<meta property=\"og:image:height\" content=\"147\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#organization\",\"name\":\"EnProwess\",\"url\":\"https:\/\/www.enprowess.com\/blogs\/\",\"sameAs\":[],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#logo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2021\/07\/enprowess_logo.jpg\",\"contentUrl\":\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2021\/07\/enprowess_logo.jpg\",\"width\":1057,\"height\":697,\"caption\":\"EnProwess\"},\"image\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#website\",\"url\":\"https:\/\/www.enprowess.com\/blogs\/\",\"name\":\"EnProwess Blog\",\"description\":\"Your Enterprise solution partner\",\"publisher\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.enprowess.com\/blogs\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2018\/05\/liferay-tensorflow.png\",\"contentUrl\":\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2018\/05\/liferay-tensorflow.png\",\"width\":699,\"height\":147,\"caption\":\"Liferay and Machine learning with TensorFlow!\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#webpage\",\"url\":\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/\",\"name\":\"Liferay and Machine learning with TensorFlow! - EnProwess Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#primaryimage\"},\"datePublished\":\"2018-05-10T10:21:15+00:00\",\"dateModified\":\"2022-04-28T05:47:13+00:00\",\"description\":\"Liferay and Machine learning with TensorFlow! \\u00b7 1) Portlet developed in Liferay that asks you to upload image. \\u00b7 2) Pass on the uploaded image\",\"breadcrumb\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog\",\"item\":\"https:\/\/www.enprowess.com\/blogs\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Liferay DXP\",\"item\":\"https:\/\/www.enprowess.com\/blogs\/category\/liferay-dxp\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Liferay and Machine learning with TensorFlow!\"}]},{\"@type\":\"TechArticle\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#\/schema\/person\/cb84840e7dba202419065ea1c9fe7f11\"},\"headline\":\"Liferay and Machine learning with TensorFlow!\",\"datePublished\":\"2018-05-10T10:21:15+00:00\",\"dateModified\":\"2022-04-28T05:47:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#webpage\"},\"wordCount\":415,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2018\/05\/liferay-tensorflow.png\",\"keywords\":[\"liferay7\",\"LiferayDXP\",\"Machine Learning\",\"TensorFlow\",\"Vipul Dave\"],\"articleSection\":[\"Liferay\",\"Liferay DXP\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#\/schema\/person\/cb84840e7dba202419065ea1c9fe7f11\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.enprowess.com\/blogs\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b43445b202a083f6e4a2f2e7d6f43d62?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b43445b202a083f6e4a2f2e7d6f43d62?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"url\":\"https:\/\/www.enprowess.com\/blogs\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Liferay and Machine learning with TensorFlow! - EnProwess Blog","description":"Liferay and Machine learning with TensorFlow! \u00b7 1) Portlet developed in Liferay that asks you to upload image. \u00b7 2) Pass on the uploaded image","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.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/","og_locale":"en_US","og_type":"article","og_title":"Liferay and Machine learning with TensorFlow! - EnProwess Blog","og_description":"Liferay and Machine learning with TensorFlow! \u00b7 1) Portlet developed in Liferay that asks you to upload image. \u00b7 2) Pass on the uploaded image","og_url":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/","og_site_name":"EnProwess Blog","article_published_time":"2018-05-10T10:21:15+00:00","article_modified_time":"2022-04-28T05:47:13+00:00","og_image":[{"width":699,"height":147,"url":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2018\/05\/liferay-tensorflow.png","type":"image\/png"}],"twitter_card":"summary","twitter_misc":{"Written by":"admin","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.enprowess.com\/blogs\/#organization","name":"EnProwess","url":"https:\/\/www.enprowess.com\/blogs\/","sameAs":[],"logo":{"@type":"ImageObject","@id":"https:\/\/www.enprowess.com\/blogs\/#logo","inLanguage":"en-US","url":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2021\/07\/enprowess_logo.jpg","contentUrl":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2021\/07\/enprowess_logo.jpg","width":1057,"height":697,"caption":"EnProwess"},"image":{"@id":"https:\/\/www.enprowess.com\/blogs\/#logo"}},{"@type":"WebSite","@id":"https:\/\/www.enprowess.com\/blogs\/#website","url":"https:\/\/www.enprowess.com\/blogs\/","name":"EnProwess Blog","description":"Your Enterprise solution partner","publisher":{"@id":"https:\/\/www.enprowess.com\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.enprowess.com\/blogs\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"ImageObject","@id":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#primaryimage","inLanguage":"en-US","url":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2018\/05\/liferay-tensorflow.png","contentUrl":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2018\/05\/liferay-tensorflow.png","width":699,"height":147,"caption":"Liferay and Machine learning with TensorFlow!"},{"@type":"WebPage","@id":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#webpage","url":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/","name":"Liferay and Machine learning with TensorFlow! - EnProwess Blog","isPartOf":{"@id":"https:\/\/www.enprowess.com\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#primaryimage"},"datePublished":"2018-05-10T10:21:15+00:00","dateModified":"2022-04-28T05:47:13+00:00","description":"Liferay and Machine learning with TensorFlow! \u00b7 1) Portlet developed in Liferay that asks you to upload image. \u00b7 2) Pass on the uploaded image","breadcrumb":{"@id":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog","item":"https:\/\/www.enprowess.com\/blogs\/"},{"@type":"ListItem","position":2,"name":"Liferay DXP","item":"https:\/\/www.enprowess.com\/blogs\/category\/liferay-dxp\/"},{"@type":"ListItem","position":3,"name":"Liferay and Machine learning with TensorFlow!"}]},{"@type":"TechArticle","@id":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#article","isPartOf":{"@id":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#webpage"},"author":{"@id":"https:\/\/www.enprowess.com\/blogs\/#\/schema\/person\/cb84840e7dba202419065ea1c9fe7f11"},"headline":"Liferay and Machine learning with TensorFlow!","datePublished":"2018-05-10T10:21:15+00:00","dateModified":"2022-04-28T05:47:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#webpage"},"wordCount":415,"commentCount":0,"publisher":{"@id":"https:\/\/www.enprowess.com\/blogs\/#organization"},"image":{"@id":"https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#primaryimage"},"thumbnailUrl":"https:\/\/www.enprowess.com\/blogs\/wp-content\/uploads\/2018\/05\/liferay-tensorflow.png","keywords":["liferay7","LiferayDXP","Machine Learning","TensorFlow","Vipul Dave"],"articleSection":["Liferay","Liferay DXP"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.enprowess.com\/blogs\/liferay-machine-learning-tensorflow\/#respond"]}]},{"@type":"Person","@id":"https:\/\/www.enprowess.com\/blogs\/#\/schema\/person\/cb84840e7dba202419065ea1c9fe7f11","name":"admin","image":{"@type":"ImageObject","@id":"https:\/\/www.enprowess.com\/blogs\/#personlogo","inLanguage":"en-US","url":"https:\/\/secure.gravatar.com\/avatar\/b43445b202a083f6e4a2f2e7d6f43d62?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b43445b202a083f6e4a2f2e7d6f43d62?s=96&d=mm&r=g","caption":"admin"},"url":"https:\/\/www.enprowess.com\/blogs\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/posts\/2252"}],"collection":[{"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/comments?post=2252"}],"version-history":[{"count":35,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/posts\/2252\/revisions"}],"predecessor-version":[{"id":3222,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/posts\/2252\/revisions\/3222"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/media\/2273"}],"wp:attachment":[{"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/media?parent=2252"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/categories?post=2252"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.enprowess.com\/blogs\/wp-json\/wp\/v2\/tags?post=2252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}