{"id":314,"date":"2022-05-03T09:00:42","date_gmt":"2022-05-03T00:00:42","guid":{"rendered":"https:\/\/is-ai.jp\/?p=314"},"modified":"2022-04-28T09:21:06","modified_gmt":"2022-04-28T00:21:06","slug":"%e3%83%8f%e3%83%b3%e3%83%89%e3%83%88%e3%83%a9%e3%83%83%e3%82%ad%e3%83%b3%e3%82%b0%e3%81%a7%e3%83%9d%e3%83%bc%e3%82%ba%e8%aa%8d%e8%ad%98","status":"publish","type":"post","link":"https:\/\/is-ai.jp\/?p=314","title":{"rendered":"\u30cf\u30f3\u30c9\u30c8\u30e9\u30c3\u30ad\u30f3\u30b0\u3067\u30dd\u30fc\u30ba\u8a8d\u8b58"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u306f\u3058\u3081\u306b<\/h4>\n\n\n\n<p>python\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306b<strong>mediapipe<\/strong>\u3068\u3044\u3046\u6a5f\u68b0\u5b66\u7fd2\u7cfb\u306e\u4fbf\u5229\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u3042\u308a\u307e\u3059\u3002\u5b58\u5728\u306f\u77e5\u3063\u3066\u3044\u3066\u3001\u89e6\u3063\u3066\u307f\u305f\u3044\u306a\u30fc\u3068\u5e38\u3005\u601d\u3063\u3066\u3044\u305f\u306e\u3067\u3059\u304c\u3001\u4eca\u56de\u3084\u3063\u3068\u91cd\u3044\u8170\u3092\u4e0a\u3052\u307e\u3057\u305f!!<\/p>\n\n\n\n<p>\u305d\u3082\u305d\u3082medapipe\u3068\u306f?\u3068\u3044\u3046\u7d39\u4ecb\u304b\u3089\u3001\u305d\u306e\u4e2d\u306e\u4e00\u3064\u3001\u624b\u306e\u30dd\u30fc\u30ba\u63a8\u5b9a\u3092\u984c\u6750\u306b\u6319\u3052\u3066\u3001\u8efd\u3044\u624b\u8a71\u306e\u8a8d\u8b58\u307e\u3067\u5b9f\u88c5\u3057\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059!!<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>mediapipe\u3068\u306f?<\/p>\n\n\n\n<p>\u4e00\u8a00\u3067\u8a00\u3046\u3068\u3001google\u304c\u63d0\u4f9b\u3057\u3066\u3044\u308b<strong>\u6a5f\u68b0\u5b66\u7fd2\u8a70\u3081\u5408\u308f\u305b\u30bb\u30c3\u30c8<\/strong>\u3067\u3059\u3002\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306b\u5bfe\u5fdc\u3057\u3066\u304a\u308a\u3001\u5927\u4f53\u306eOS\u3067\u5b9f\u88c5\u304c\u53ef\u80fd\u3068\u3044\u3046\u7279\u5fb4\u304c\u3042\u308a\u307e\u3059\u3002\u3059\u3054\u3044\u3002\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\u63d0\u4f9b\u3057\u3066\u3044\u308b\u30e2\u30c7\u30eb\u306f\u4ee5\u4e0b\u306e12\u500b\u3067\u3059\u3002\u30c7\u30e2\u52d5\u753b\u3092\u898b\u308b\u3068\u8ed2\u4e26\u307f\u7cbe\u5ea6\u304c\u9ad8\u304f\u3066\u3073\u3063\u304f\u308a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/is-ai.jp\/wp-content\/uploads\/2022\/04\/de1b8d49bd4ec25570d0be7d51bcc100.png\" alt=\"\" class=\"wp-image-323\" width=\"674\" height=\"555\" srcset=\"https:\/\/is-ai.jp\/wp-content\/uploads\/2022\/04\/de1b8d49bd4ec25570d0be7d51bcc100.png 757w, https:\/\/is-ai.jp\/wp-content\/uploads\/2022\/04\/de1b8d49bd4ec25570d0be7d51bcc100-300x247.png 300w\" sizes=\"(max-width: 674px) 100vw, 674px\" \/><figcaption>\u53c2\u8003 : https:\/\/google.github.io\/mediapipe\/<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u5b9f\u88c5<\/h4>\n\n\n\n<p>\u5192\u982d\u3067\u3082\u8ff0\u3079\u3066\u3044\u308b\u3088\u3046\u306b\u3001\u4eca\u56de\u306f\u3053\u306e\u4e2d\u306e<strong> Hands<\/strong> \u624b\u306e\u30dd\u30fc\u30ba\u63a8\u5b9a\u30e2\u30c7\u30eb\u3092\u4f7f\u7528\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305a\u306f\u3001\u52d5\u4f5c\u78ba\u8a8d\u3092\u3057\u3066\u307f\u307e\u3057\u3087\u3046!<\/p>\n\n\n\n<p>pip\u3067mediapipe\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30fb\u30fb\u30fb<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>pip install mediapipe\npip install opencv-python<\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code>import cv2\nimport mediapipe as mp\nimport time\n\ncap = cv2.VideoCapture(0)\n\nmp_hands = mp.solutions.hands\nhands = mp_hands.Hands()\nmp_draw = mp.solutions.drawing_utils\n\nwhile True:\n    _, img = cap.read()\n    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n    results = hands.process(imgRGB)\n\n    if results.multi_hand_landmarks:\n        for hand_landmarks in results.multi_hand_landmarks:\n            for i, lm in enumerate(hand_landmarks.landmark):\n                height, width, channel = img.shape\n                cx, cy = int(lm.x * width), int(lm.y * height)\n                cv2.putText(img, str(i+1), (cx+10, cy+10), cv2.FONT_HERSHEY_PLAIN, 4, (255, 255, 255), 5, cv2.LINE_AA)\n                cv2.circle(img, (cx, cy), 10, (255, 0, 255), cv2.FILLED)\n            mp_draw.draw_landmarks(img, hand_landmarks, mp_hands.HAND_CONNECTIONS)\n\n    cv2.imshow(&quot;Image&quot;, img)\n    if cv2.waitKey(1) & 0xFF == ord(&#39;q&#39;):\n        break<\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>\u5b9f\u884c\u7d50\u679c\u304c\u3053\u3061\u3089!<\/p>\n\n\n\n<p>\u304b\u306a\u308a\u7dba\u9e97\u306b\u624b\u306e\u30dd\u30fc\u30ba\u60c5\u5831\u3092\u53d6\u5f97\u3067\u304d\u3066\u3044\u307e\u3059\u306d!!<br>\u307e\u305f\u3001z\u5ea7\u6a19\u307e\u3067\u3057\u3063\u304b\u308a\u63a8\u6e2c\u3067\u304d\u3066\u3044\u3066\u7cbe\u5ea6\u306e\u9ad8\u3055\u306b\u9a5a\u304d\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/is-ai.jp\/wp-content\/uploads\/2022\/04\/8591a6e9eb366a54ea54f3b76d1f290b.png\" alt=\"\" class=\"wp-image-315\" width=\"268\" height=\"257\" srcset=\"https:\/\/is-ai.jp\/wp-content\/uploads\/2022\/04\/8591a6e9eb366a54ea54f3b76d1f290b.png 1015w, https:\/\/is-ai.jp\/wp-content\/uploads\/2022\/04\/8591a6e9eb366a54ea54f3b76d1f290b-300x288.png 300w, https:\/\/is-ai.jp\/wp-content\/uploads\/2022\/04\/8591a6e9eb366a54ea54f3b76d1f290b-768x738.png 768w\" sizes=\"(max-width: 268px) 100vw, 268px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>\u6b21\u306b\u8003\u3048\u308b\u306e\u306f\u8a8d\u8b58\u3055\u305b\u305f\u3044\u624b\u8a71\u306e\u767b\u9332\u3067\u3059\u306d\u3002<\/p>\n\n\n\n<p>\u4eca\u56de\u306f\u30b7\u30f3\u30d7\u30eb\u306b\u5ea7\u6a19\u3092\u8a18\u9332\u3057\u3066\u304a\u304d\u3001\u7d76\u5bfe\u5ea7\u6a19\u7cfb\u306b\u79fb\u52d5\u3002\u7d9a\u3044\u3066\u3001\u5404\u5ea7\u6a19\u3054\u3068\u306ecos\u985e\u4f3c\u5ea6\u3092\u53d6\u5f97\u3059\u308b\u3053\u3068\u3067\u30dd\u30fc\u30ba\u3092\u8b58\u5225\u3057\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\u767b\u9332\u3057\u305f\u5ea7\u6a19\u3068\u3001\u73fe\u6642\u70b9\u306e\u5ea7\u6a19\u540c\u58eb\u3067cos\u985e\u4f3c\u5ea6\u3092\u6c42\u3081\u3001\u305d\u306e\u5e73\u5747\u5024\u3092\u624b\u5168\u4f53\u306e\u985e\u4f3c\u5ea6\u3068\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code>def manual_cos(A, B):\n    dot = np.sum(A*B, axis=-1)\n    A_norm = np.linalg.norm(A, axis=-1)\n    B_norm = np.linalg.norm(B, axis=-1)\n    cos = dot \/ (A_norm*B_norm+1e-7)\n\n    return cos[1:].mean()<\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>\u6b21\u306b\u3001\u30ad\u30fc\u3092\u62bc\u3057\u305f\u6642\u306b\u30cf\u30f3\u30c9\u30b5\u30a4\u30f3\u3092\u4fdd\u5b58\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u304d\u307e\u3059\u3002\u4eca\u56de\u306f s\u3001d\u3001f \u3092\u62bc\u4e0b\u3057\u305f\u6642\u306e\u30dd\u30fc\u30ba3\u7a2e\u985e\u3092\u4fdd\u5b58\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002\uff08\u4ee5\u4e0b\u30b3\u30fc\u30c9\u306f\u305d\u306e\u4e00\u90e8\uff09<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code>if cv2.waitKey(1) & 0xFF == ord(&#39;s&#39;):\n    saved_array = landmark2np(hand_landmarks)\n    start = time.time()\n    print(&#39;saved&#39;)\n\n# ~~ \u7701\u7565 ~~<\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>\u4eca\u56de\u306fcos\u985e\u4f3c\u5ea6\u306e\u5e73\u5747\u5024\u304c99%\u4ee5\u4e0a\u306e\u6642\u306b\u540c\u4e00\u306e\u30dd\u30fc\u30ba\u3068\u5224\u65ad\u3057\u3066\u3044\u307e\u3059\u3002\u304b\u306a\u308a\u8fd1\u3044\u30dd\u30fc\u30ba\u3092\u3057\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u306e\u3067\u3001\u8aa4\u691c\u51fa\u30ea\u30b9\u30af\u306f\u4e0b\u304c\u308a\u307e\u3059\u304c\u3001\u8907\u96d1\u306a\u30dd\u30fc\u30ba\u3092\u3059\u308b\u3068\u81ea\u5206\u81ea\u8eab\u3067\u518d\u73fe\u3067\u304d\u306a\u3044\u3068\u3044\u3046\u6b20\u70b9\u304c\u30fb\u30fb\u30fb\u3002<\/p>\n\n\n\n<p>\u305d\u308c\u3092\u8e0f\u307e\u3048\u3066\u3082\u8aa4\u691c\u51fa\u306e\u65b9\u304c\u5acc\u3060\u3063\u305f\u306e\u3067\u3001\u4eca\u56de\u306f\u5f37\u3081\u306e\u5236\u7d04\u3092\u4e0e\u3048\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30c7\u30e2\u52d5\u753b\u2193\u2193<\/strong><\/p>\n\n\n\n<p><video controls=\"\" src=\"https:\/\/is-ai.jp\/wp-content\/uploads\/2022\/04\/8cfa9c0263747696400351be09484083.mov\"><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\u5411\u304d\u3084\u89d2\u5ea6\u307e\u3067\u5168\u3066\u5408\u308f\u305b\u306a\u3044\u3068\u540c\u3058\u30dd\u30fc\u30ba\u3068\u8a8d\u8b58\u3057\u3066\u304f\u308c\u307e\u305b\u3093\u304c\u3001\u304b\u306a\u308a\u9ad8\u3044\u7cbe\u5ea6\u3067save\u3057\u305f\u30dd\u30fc\u30ba\u3092\u8a8d\u8b58\u3057\u3066\u304f\u308c\u3066\u3044\u307e\u3059\u306d!!<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u30b3\u30fc\u30c9<\/h4>\n\n\n\n<p>\u30b3\u30fc\u30c9\u5168\u4f53\u306f\u3053\u3061\u3089\u3067\u3059!!<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code>import cv2\nimport mediapipe as mp\nimport time\nimport numpy as np\nfrom sklearn.metrics.pairwise import cosine_similarity\nimport time\n\ndef landmark2np(hand_landmarks):\n    li = []\n    for j in (hand_landmarks.landmark):\n        li.append([j.x, j.y, j.z])\n\n    return np.array(li) - li[0]\n\n\ndef manual_cos(A, B):\n    dot = np.sum(A*B, axis=-1)\n    A_norm = np.linalg.norm(A, axis=-1)\n    B_norm = np.linalg.norm(B, axis=-1)\n    cos = dot \/ (A_norm*B_norm+1e-7)\n    print(cos[1:].mean())\n\n    return cos[1:].mean()\n\n\ncap = cv2.VideoCapture(0)\nmp_hands = mp.solutions.hands\nhands = mp_hands.Hands()\nmp_draw = mp.solutions.drawing_utils\n\nsaved_array = [None, None, None]\nstart = -100\nscore = [0, 0, 0]\nsaved_no = 0\n\nwhile True:\n    _, img = cap.read()\n    imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)\n    results = hands.process(imgRGB)\n\n    if results.multi_hand_landmarks:\n        for hand_landmarks in results.multi_hand_landmarks:\n            for i, lm in enumerate(hand_landmarks.landmark):\n                height, width, channel = img.shape\n                cx, cy = int(lm.x * width), int(lm.y * height)\n                cv2.putText(img, str(i+1), (cx+10, cy+10), cv2.FONT_HERSHEY_PLAIN, 4, (255, 255, 255), 5, cv2.LINE_AA)\n                cv2.circle(img, (cx, cy), 10, (255, 0, 255), cv2.FILLED)\n            mp_draw.draw_landmarks(img, hand_landmarks, mp_hands.HAND_CONNECTIONS)\n\n\n            if cv2.waitKey(1) & 0xFF == ord(&#39;s&#39;):\n                saved_array[0] = landmark2np(hand_landmarks)\n                start = time.time()\n                saved_no = 1\n                print(&#39;no.1 saved&#39;)\n            \n            if cv2.waitKey(1) & 0xFF == ord(&#39;d&#39;):\n                saved_array[1] = landmark2np(hand_landmarks)\n                start = time.time()\n                saved_no = 2\n                print(&#39;no.2 saved&#39;)\n            \n            if cv2.waitKey(1) & 0xFF == ord(&#39;f&#39;):\n                saved_array[2] = landmark2np(hand_landmarks)\n                start = time.time()\n                saved_no = 3\n                print(&#39;no.3 saved&#39;)\n\n            # cos\u985e\u4f3c\u5ea6\u3067\u30c1\u30a7\u30c3\u30af\n            if saved_array[0] is not None:\n                now_array = landmark2np(hand_landmarks)\n                score[0] = manual_cos(saved_array[0], now_array)\n\n            if saved_array[1] is not None:\n                now_array = landmark2np(hand_landmarks)\n                score[1] = manual_cos(saved_array[1], now_array)\n\n            if saved_array[2] is not None:\n                now_array = landmark2np(hand_landmarks)\n                score[2] = manual_cos(saved_array[2], now_array)\n\n    # 3s \u8868\u793a\n    if time.time() - start &lt; 3:\n        cv2.putText(img, f&#39;No.{saved_no} saved&#39;, (50, 100), cv2.FONT_HERSHEY_SIMPLEX, 3.0, (255, 255, 255), thickness=2)\n\n    elif score[0] &gt; 0.99:\n        cv2.putText(img, &#39;no.1 pose&#39;, (50, 100), cv2.FONT_HERSHEY_SIMPLEX, 3.0, (255, 0, 255), thickness=2)\n\n    elif score[1] &gt; 0.99:\n        cv2.putText(img, &#39;no.2 pose&#39;, (50, 100), cv2.FONT_HERSHEY_SIMPLEX, 3.0, (255, 0, 255), thickness=2)\n\n    elif score[2] &gt; 0.99:\n        cv2.putText(img, &#39;no.3 pose&#39;, (50, 100), cv2.FONT_HERSHEY_SIMPLEX, 3.0, (255, 0, 255), thickness=2)\n        \n\n    cv2.imshow(&quot;Image&quot;, img)\n\n\n    if cv2.waitKey(1) & 0xFF == ord(&#39;q&#39;):\n        break<\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u304a\u308f\u308a\u306b<\/h4>\n\n\n\n<p>\u4eca\u56de\u306f\u30cf\u30f3\u30c9\u30b5\u30a4\u30f3\u3092\u8a8d\u8b58\u3057\u3066\u540c\u3058\u30dd\u30fc\u30ba\u3092\u53d6\u3063\u305f\u304b\u3069\u3046\u304b\u3068\u3044\u3046\u5b9f\u88c5\u3092\u884c\u3044\u307e\u3057\u305f\u3002\u9759\u6b62\u753b\u7684\u306a\u8b58\u5225\u3067\u3057\u305f\u304c\u3001\u52a0\u901f\u5ea6\u306a\u3069\u306e\u6642\u9593\u5909\u5316\u91cf\u3092\u8003\u616e\u306b\u5165\u308c\u308c\u3070\u3001\u6b62\u307e\u3063\u305f\u72b6\u614b\u3060\u3051\u3067\u306a\u304f\u3001\u624b\u3092\u632f\u308a\u4e0b\u308d\u3059\u52d5\u4f5c\u3067\u78ba\u8a8d\u3057\u305f\u308a\u306a\u3069\u3082\u5b9f\u88c5\u3067\u304d\u305d\u3046\u3067\u3059\u306d!<\/p>\n\n\n\n<p>\u307e\u305f\u3002\u4eca\u56de\u306e\u30c7\u30e2\u306f\u7247\u624b\u306e\u307f\u3067\u306e\u52d5\u4f5c\u3092\u524d\u63d0\u3068\u3057\u3066\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059\u3002\u3002\u3002\u305d\u306e\u305f\u3081\u3001\u4e21\u624b\u304c\u6620\u308b\u5834\u5408\u306f\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u63db\u3048\u3066\u4f7f\u7528\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044!<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u306f\u3058\u3081\u306b python\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306bmediapipe\u3068\u3044\u3046\u6a5f\u68b0\u5b66\u7fd2\u7cfb\u306e\u4fbf\u5229\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u3042\u308a\u307e\u3059\u3002\u5b58\u5728\u306f\u77e5\u3063\u3066\u3044\u3066\u3001\u89e6\u3063\u3066\u307f\u305f\u3044\u306a\u30fc\u3068\u5e38\u3005\u601d\u3063\u3066\u3044\u305f\u306e\u3067\u3059\u304c\u3001\u4eca\u56de\u3084\u3063\u3068\u91cd\u3044\u8170\u3092\u4e0a\u3052\u307e\u3057\u305f!! \u305d\u3082\u305d\u3082medapipe\u3068\u2026<\/p>\n","protected":false},"author":1,"featured_media":315,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[27,7,18],"_links":{"self":[{"href":"https:\/\/is-ai.jp\/index.php?rest_route=\/wp\/v2\/posts\/314"}],"collection":[{"href":"https:\/\/is-ai.jp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/is-ai.jp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/is-ai.jp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/is-ai.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=314"}],"version-history":[{"count":6,"href":"https:\/\/is-ai.jp\/index.php?rest_route=\/wp\/v2\/posts\/314\/revisions"}],"predecessor-version":[{"id":330,"href":"https:\/\/is-ai.jp\/index.php?rest_route=\/wp\/v2\/posts\/314\/revisions\/330"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/is-ai.jp\/index.php?rest_route=\/wp\/v2\/media\/315"}],"wp:attachment":[{"href":"https:\/\/is-ai.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=314"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/is-ai.jp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=314"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/is-ai.jp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}