{"id":6570,"date":"2019-04-02T10:18:00","date_gmt":"2019-04-02T01:18:00","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=6570"},"modified":"2019-05-03T14:21:39","modified_gmt":"2019-05-03T05:21:39","slug":"python%ea%b3%bc-opencv-15-%ec%9d%b4%eb%af%b8%ec%a7%80%ec%9d%98-%eb%93%b1%ec%b9%98%ec%84%a0contours-2-5","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=6570","title":{"rendered":"Python\uacfc OpenCV \u2013 16 : \uc774\ubbf8\uc9c0\uc758 \ub4f1\uce58\uc120(Contours) \u2013 2\/5"},"content":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_imgproc\/py_contours\/py_contour_features\/py_contour_features.html#contour-features \uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uae00\uc5d0\uc11c\ub294 \ub4f1\uce58\uc120\uc5d0\uc11c \uba74\uc801, \uac00\uc7a5\uc790\ub9ac \uae38\uc774, \uc911\uc2ec\uc120, \ubc14\uc6b4\ub529 \ubc15\uc2a4(Bounding Box) \ub4f1\uc744 \ucd94\ucd9c\ud558\ub294 \ub0b4\uc6a9\uc5d0 \ub300\ud55c \ub2e4\uc591\ud55c \ud568\uc218\ub97c \uc0b4\ud3b4 \ubd05\ub2c8\ub2e4.<\/p>\n<p>\uc774\ubbf8\uc9c0\uc5d0\ub294 Moments\ub77c\ub294 \uc18d\uc131\uc744 \ud1b5\ud574 \uac1d\uccb4\uc758 \ubb34\uac8c\uc911\uc2ec\uc810\uc774\ub098 \uba74\uc801\ub4f1\uacfc \uac19\uc740 \uba87\uac00\uc9c0 \ud2b9\uc131\uc744 \uacc4\uc0b0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubbf8\uc9c0 Moments\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc740 https:\/\/en.wikipedia.org\/wiki\/Image_moment \uc744 \ucc38\uace0\ud558\uae30 \ubc14\ub78d\ub2c8\ub2e4. \uc5ec\uae30\uc11c \uac1d\uccb4\ub294 \uc774\ubbf8\uc9c0\uc5d0\uc11c \ucd94\ucd9c\ud55c \ub4f1\uce58\uc120\uc73c\ub85c \uad6c\uc131\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<\/p>\n<p>cv2.moments \ud568\uc218\uac00 \uc774\ubbf8\uc9c0\uc758 Moments\ub97c \uacc4\uc0b0\ud558\ub294\ub370, \uc608\uc81c\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\r\nimport cv2\r\nimport numpy as np\r\n\r\nimg = cv2.imread('.\/data\/cornerTest.jpg', cv2.COLOR_BGR2GRAY)\r\nret,thresh = cv2.threshold(img,127,255,0)\r\nimage, contours,hierarchy = cv2.findContours(thresh, 1, 2)\r\n\r\ncnt = contours[0]\r\nM = cv2.moments(cnt)\r\nprint(M)\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc774\ubbf8\uc9c0\uc758 Moments \ud2b9\uc131\ub4e4\uc774 \ucd9c\ub825\ub429\ub2c8\ub2e4.<\/p>\n<pre>\r\n{'m00': 58816.0, 'm10': 14851193.5, 'm01': 14810238.5, 'm20': 4092644028.833333, 'm11': 3834175447.5, 'm02': 4001879218.1666665, 'm30': 1206388074009.75, 'm21': 1075214481081.5, 'm12': 1056320648809.1666, 'm03': 1146271400880.25, 'mu20': 342678910.93272305, 'mu11': 94551573.98514414, 'mu02': 272568071.0828414, 'mu30': -69863083.65454102, 'mu21': -3088048920.343384, 'mu12': -1781659324.0393372, 'mu03': 1304351953.3330078, 'nu20': 0.09905956288466355, 'nu11': 0.027332401528683933, 'nu02': 0.07879234209158287, 'nu30': -8.327392546410929e-05, 'nu21': -0.0036808274437723507, 'nu12': -0.0021236647166352715, 'nu03': 0.0015547339404300424}\r\n<\/pre>\n<p>\uc704\uc758 \uac12 \uc911 m00\uc740 \uac1d\uccb4\uc758 \ub113\uc774\uc774\uace0, \ubb34\uac8c \uc911\uc2ec\uc810 cx, cy\ub294 \uac01\uac01 m10\/m00, m01\/m00\uc785\ub2c8\ub2e4. \uac1d\uccb4\uc758 \ub113\uc774\ub294 cv2.contourArea \ud568\uc218\ub97c \ud1b5\ud574\uc11c\ub3c4 \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\r\narea = cv2.contourArea(cnt)\r\n<\/pre>\n<p> \uac1d\uccb4, \uc989 \ub4f1\uce58\uc120\uc758 \uac00\uc7a5\uc790\ub9ac \uae38\uc774\ub294 \ub2e4\uc74c\ucc98\ub7fc \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\r\nperimeter = cv2.arcLength(cnt,True)\r\n<\/pre>\n<p>\ud568\uc218\uc758 \ub450\ubc88\uc9f8 \uc778\uc790\ub294 \ub4f1\uce58\uc120\uc774 \ud3d0\ud569 \uc5ec\ubd80\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub4f1\uce58\uc120\uc740 \ub9e4\uc6b0 \ub9ce\uc740 \uc88c\ud45c\ub85c \uad6c\uc131\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc5d0 \ub300\ud574 \ud544\uc694\uc5d0 \ub9de\uac8c \uac04\ub7b5\ud654\uac00 \ud544\uc694\ud55c\ub370, \uac04\ub7b5\ud654 \uc54c\uace0\ub9ac\uc998\uc740 Douglas-Peucker Algorithm\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc544\ub798\uc758 \uc608\uc81c\ub294 \uc5b4\ub5a4 \ub4f1\uce58\uc120\uc5d0 \ub300\ud574 \uc790\uc2e0\uc758 \uac00\uc7a5\uc790\ub9ac \uae38\uc774\uc758 10% \uae38\uc774\uac12\uc744 \uae30\uc900\uc73c\ub85c \uac04\ub7b5\ud654\uac00 \uc801\uc6a9\ud574 \uc0c8\ub85c\uc6b4 \ub4f1\uce58\uc120\uc744 \uacc4\uc0b0\ud569\ub2c8\ub2e4.<\/p>\n<pre>\r\nepsilon = 0.1*cv2.arcLength(cnt,True)\r\napprox = cv2.approxPolyDP(cnt,epsilon,True)\r\n<\/pre>\n<p>\uc544\ub798 \uadf8\ub9bc\uc744 \ubcf4\uba74..<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/04\/approx.jpg\" alt=\"\" width=\"607\" height=\"148\" class=\"aligncenter size-full wp-image-6572\" \/><\/p>\n<p>\uccab\ubc88\uc9f8 \uc774\ubbf8\uc9c0\uac00 \uc785\ub825\ub41c \ub4f1\uce58\uc120\uc774\uace0.. \ub450\ubc88\uc9f8\uac00 \uac00\uc7a5\uc790\ub9ac \uac70\ub9ac\uc758 10% \uae38\uc774\ub97c \uae30\uc900\uc73c\ub85c \uac04\ub7b5\ud654\ub41c \ub4f1\uce58\uc120, \uc138\ubc88\uc9f8\uac00 1% \uae38\uc774\ub97c \uae30\uc900\uc73c\ub85c \uac04\ub7b5\ud654\ub41c \ub4f1\uce58\uc120\uc744 \ucd08\ub85d\uc0c9 \uc120\uc73c\ub85c \ud45c\uae30\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc9c0\uae08\uae4c\uc9c0\uc758 \ub0b4\uc6a9\uc744 \ub418\uc9da\uc5b4 \ubcf4\uba74, \ub4f1\uce58\uc120\uc740 \ud558\ub098\uc758 2\ucc28\uc6d0 \ub3c4\ud615\uc73c\ub85c \uc0dd\uac01\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub3c4\ud615\uc5d0 \ub300\ud55c \uc5f0\uc0b0 \uc911 \ubcfc\ub85d\uaecd\ub300\uae30(Convex Hull) \ub3c4\ud615\uc744 \ucd94\ucd9c\ud558\ub294 \ud568\uc218\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\r\nhull = cv2.convexHull(cnt)\r\n<\/pre>\n<p>\uc8fc\uc5b4\uc9c4 \ub4f1\uce58\uc120\uc774 \ubcfc\ub85d \ub3c4\ud615\uc778\uc9c0\uc758 \uc5ec\ubd80\ub294 \ub2e4\uc74c \ud568\uc218\ub97c \ud1b5\ud574 \uc2dd\ubcc4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\r\nk = cv2.isContourConvex(cnt)\r\n<\/pre>\n<p>\ub4f1\uce58\uc120\uc73c\ub85c \uad6c\uc131\ub41c \ub3c4\ud615\uc5d0 \ub300\ud574.. \uc774 \ub3c4\ud615\uc744 \uac10\uc2f8\ub294 \ub2e4\uc591\ud55c \ub610 \ub2e4\ub978 \ub3c4\ud615\uc744 \uc0dd\uac01\ud574 \ubcfc \uc218 \uc788\ub294\ub370, \uac00\uc7a5 \uc27d\uac8c\ub294 \uc0ac\uac01\uc601\uc5ed\uc744 \uc0dd\uac01\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc544\ub798 \ucf54\ub4dc\uac00 \ubc14\ub85c \ub3c4\ud615\uc744 \uac10\uc2f8\ub294 \uc0ac\uac01\ud615 \uc601\uc5ed\uc744 \ucd94\ucd9c\ud558\ub294 \uc608\uc81c\uc785\ub2c8\ub2e4.<\/p>\n<pre>\r\nimport numpy as np\r\nimport cv2\r\n \r\nimg = cv2.imread('.\/data\/thunder.png')\r\nimgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)\r\nret,thresh = cv2.threshold(imgray,127,255,0)\r\nimage, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)\r\n\r\ncnt = contours[0]\r\n\r\nx,y,w,h = cv2.boundingRect(cnt)\r\nimg = cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)\r\n\r\ncv2.imshow('img', img)\r\ncv2.waitKey()\r\ncv2.destroyAllWindows()\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/04\/opencv_cc_01.png\" alt=\"\" width=\"629\" height=\"660\" class=\"aligncenter size-full wp-image-6576\" \/><\/p>\n<p>\ub2e8\uc21c\ud55c \uc0ac\uac01\ud615\uc774 \uc544\ub2cc \ucd5c\uc18c \ub113\uc774\ub97c \uac16\ub294 \ud68c\uc804\ub41c \uc0ac\uac01\uc601\uc5ed\ub3c4 \uc5bb\uc744 \uc218 \uc788\ub294\ub370, \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\r\nimport numpy as np\r\nimport cv2\r\n \r\nimg = cv2.imread('.\/data\/thunder.png')\r\nimgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)\r\nret,thresh = cv2.threshold(imgray,127,255,0)\r\nimage, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)\r\n\r\ncnt = contours[0]\r\n\r\nrect = cv2.minAreaRect(cnt)\r\nbox = cv2.boxPoints(rect)\r\nbox = np.int0(box)\r\nimg = cv2.drawContours(img,[box],0,(0,0,255),2)\r\n\r\ncv2.imshow('img', img)\r\ncv2.waitKey()\r\ncv2.destroyAllWindows()\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/04\/opencv_cc_02.png\" alt=\"\" width=\"629\" height=\"660\" class=\"aligncenter size-full wp-image-6578\" \/><\/p>\n<p>\ub3c4\ud615\uc744 \uac10\uc2f8\ub294 \uc815\ubc29\uc6d0\uc5d0 \ub300\ud55c \uc608\uc81c \ucf54\ub4dc\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\r\nimport numpy as np\r\nimport cv2\r\n \r\nimg = cv2.imread('.\/data\/thunder.png')\r\nimgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)\r\nret,thresh = cv2.threshold(imgray,127,255,0)\r\nimage, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)\r\n\r\ncnt = contours[0]\r\n\r\n(x,y),radius = cv2.minEnclosingCircle(cnt)\r\ncenter = (int(x),int(y))\r\nradius = int(radius)\r\nimg = cv2.circle(img,center,radius,(0,0,255),2)\r\n\r\ncv2.imshow('img', img)\r\ncv2.waitKey()\r\ncv2.destroyAllWindows()\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/04\/opencv_cc_03.png\" alt=\"\" width=\"629\" height=\"660\" class=\"aligncenter size-full wp-image-6579\" \/><\/p>\n<p>\uac10\uc2f8\ub294 \ucd5c\uc18c \ub113\uc774\uc758 \ud0c0\uc6d0\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\r\nimport numpy as np\r\nimport cv2\r\n \r\nimg = cv2.imread('.\/data\/thunder.png')\r\nimgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)\r\nret,thresh = cv2.threshold(imgray,127,255,0)\r\nimage, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)\r\n\r\ncnt = contours[0]\r\n\r\nellipse = cv2.fitEllipse(cnt)\r\nimg = cv2.ellipse(img,ellipse,(0,0,255),2)\r\n\r\ncv2.imshow('img', img)\r\ncv2.waitKey()\r\ncv2.destroyAllWindows()\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. (\uacb0\uacfc\uac00 \uc880 \uc774\uc0c1\ud55c\ub370&#8230;)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/04\/opencv_cc_04.png\" alt=\"\" width=\"629\" height=\"660\" class=\"aligncenter size-full wp-image-6580\" \/><\/p>\n<p>\ub05d\uc73c\ub85c \ub4f1\uce58\uc120\uc73c\ub85c \uad6c\uc131\ub41c \ub3c4\ud615\uc758 \uc8fc\ucd95\uc5d0 \ub300\ud55c \uc120\uc744 \uc5bb\ub294 \uc608\uc81c\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\r\nimport numpy as np\r\nimport cv2\r\n \r\nimg = cv2.imread('.\/data\/thunder.png')\r\nimgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)\r\nret,thresh = cv2.threshold(imgray,127,255,0)\r\nimage, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)\r\n\r\ncnt = contours[0]\r\n\r\nrows,cols = img.shape[:2]\r\n[vx,vy,x,y] = cv2.fitLine(cnt, cv2.DIST_L2,0,0.01,0.01)\r\nlefty = int((-x*vy\/vx) + y)\r\nrighty = int(((cols-x)*vy\/vx)+y)\r\nimg = cv2.line(img,(cols-1,righty),(0,lefty),(0,0,255),2)\r\n\r\ncv2.imshow('img', img)\r\ncv2.waitKey()\r\ncv2.destroyAllWindows()\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/04\/opencv_cc_05.png\" alt=\"\" width=\"629\" height=\"660\" class=\"aligncenter size-full wp-image-6581\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc774 \uae00\uc758 \uc6d0\ubb38\uc740 https:\/\/opencv-python-tutroals.readthedocs.io\/en\/latest\/py_tutorials\/py_imgproc\/py_contours\/py_contour_features\/py_contour_features.html#contour-features \uc785\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 \ub4f1\uce58\uc120\uc5d0\uc11c \uba74\uc801, \uac00\uc7a5\uc790\ub9ac \uae38\uc774, \uc911\uc2ec\uc120, \ubc14\uc6b4\ub529 \ubc15\uc2a4(Bounding Box) \ub4f1\uc744 \ucd94\ucd9c\ud558\ub294 \ub0b4\uc6a9\uc5d0 \ub300\ud55c \ub2e4\uc591\ud55c \ud568\uc218\ub97c \uc0b4\ud3b4 \ubd05\ub2c8\ub2e4. \uc774\ubbf8\uc9c0\uc5d0\ub294 Moments\ub77c\ub294 \uc18d\uc131\uc744 \ud1b5\ud574 \uac1d\uccb4\uc758 \ubb34\uac8c\uc911\uc2ec\uc810\uc774\ub098 \uba74\uc801\ub4f1\uacfc \uac19\uc740 \uba87\uac00\uc9c0 \ud2b9\uc131\uc744 \uacc4\uc0b0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ubbf8\uc9c0 Moments\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc740 https:\/\/en.wikipedia.org\/wiki\/Image_moment \uc744 \ucc38\uace0\ud558\uae30 \ubc14\ub78d\ub2c8\ub2e4. \uc5ec\uae30\uc11c \uac1d\uccb4\ub294 \uc774\ubbf8\uc9c0\uc5d0\uc11c \ucd94\ucd9c\ud55c \ub4f1\uce58\uc120\uc73c\ub85c \uad6c\uc131\ub41c \uac83\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. cv2.moments \ud568\uc218\uac00 \uc774\ubbf8\uc9c0\uc758 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=6570\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Python\uacfc OpenCV \u2013 16 : \uc774\ubbf8\uc9c0\uc758 \ub4f1\uce58\uc120(Contours) \u2013 2\/5&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[130,131],"tags":[],"class_list":["post-6570","post","type-post","status-publish","format-standard","hentry","category-opencv","category-python"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6570"}],"version-history":[{"count":6,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6570\/revisions"}],"predecessor-version":[{"id":6646,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/6570\/revisions\/6646"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6570"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}