{"id":2962,"date":"2025-02-06T01:14:14","date_gmt":"2025-02-05T17:14:14","guid":{"rendered":"https:\/\/yowlab.idv.tw\/wordpress\/?p=2962"},"modified":"2025-03-09T14:28:03","modified_gmt":"2025-03-09T06:28:03","slug":"%e5%88%a9%e7%94%a8-faster-whisper-%e4%be%86%e8%bd%89%e6%8f%9b%e9%80%90%e5%ad%97%e7%a8%bf","status":"publish","type":"post","link":"https:\/\/yowlab.idv.tw\/wordpress\/?p=2962","title":{"rendered":"\u5229\u7528 faster-whisper \u4f86\u8f49\u63db\u9010\u5b57\u7a3f"},"content":{"rendered":"<p>\u6559\u5b78\u5f71\u7247\u6642\u9593\u6709\u6642\u5f88\u9577\uff0c\u70ba\u4e86\u7bc0\u7701\u6642\u9593\uff0c\u6211\u6703\u60f3\u5c07\u5f71\u7247\u7684\u5c0d\u8a71\u6293\u51fa\u8b8a\u6210\u9010\u5b57\u7a3f\uff0c\u7136\u5f8c\u76f4\u63a5\u7528\u8b80\u7684\u3002\u800c\u4e14\u9019\u6a23\u4e5f\u4fbf\u65bc\u4f5c\u7b46\u8a18\u3002<\/p>\n<style type=\"text\/css\">\n    li.present01 {line-height:1.5em; background-color:#F5E5C9; padding:5px; border-radius:10px; font-weight:bold; margin:5px;}\n    li.present02 {line-height:1.5em; background-color:#D1EC87; padding:5px; border-radius:10px; font-weight:bold; margin:5px;}\n    li.present03 {line-height:1.5em; background-color:#b3dffa; padding:5px; border-radius:10px; font-weight:bold; margin:5px;}\n    li.present04 {line-height:1.5em; background-color:#FDF6FF; padding:10px; border-radius:10px; font-weight:bold; margin:5px;}\n    ol.lower-alpha {list-style-type:lower-alpha;}\n    ol.lower-roman {list-style-type:lower-roman;}\n    ul.none {list-style-type:none;line-height:1.5em; padding:10px;}\n    ul.note {line-height:1.5em; padding:10px;}\n    .highlight01 {font-weight:bold; line-height:1.5em; background-color:#e7f49c; padding:0px 2px; border:1px; border-radius:10px;}\n    .highlight02 {font-weight:bold; line-height:1.5em; background-color:#F2F26B; padding:1px 1px; border:1px;}\n    .highlight03 {font-weight:bold; line-height:1.5em; background-color:#F9BF72; padding:3px 10px; border:2px; border-radius:10px;}\n    .box01 {margin: 5px; border:1px #19130B solid; border-radius:5px; padding:10px;}\n    .box02 {margin: 5px; font-weight:bold; line-height:1.5em; padding:10px; border:1px #19130B solid; border-radius:5px;}\n    h3 {border:2px #000 solid; border-width:0px 0px 1px 0px; padding-width:0px 0px 3px 0px;}\n    h4 {border:2px #000 solid; border-width:0px 0px 1px 0px; padding-width:3px 0px 3px 0px;margin: 3px 0px 10px 0px ;font-weight:bold; line-height:1.5em;  }\n    h5 {background-color:#eff0f1; padding:10px; font-weight:bold; line-height:2em; border:1px #000 solid; border-width:1px 0px 1px 0px; margin: 5px 0px 20px 0px;}<\/p>\n<p>    pre {margin: 5px; border:0px #19130B solid; border-radius:5px; padding:10px;line-height:2em;}\n<\/style>\n<p>\u9019\u500b\u9700\u6c42\uff0c\u53ef\u4ee5\u900f\u904e\u4e00\u958b\u59cb\u7531 OpenAI \u958b\u767c\u7684 Whisper \u5c08\u6848\u4f86\u6eff\u8db3\uff0c\u4f46\u56e0\u70ba\u6548\u7387\u592a\u6162\u554f\u984c\uff0c\u6240\u4ee5\uff0c\u5f88\u591a\u80fd\u4eba\u7570\u58eb\u4fbf\u958b\u59cb\u70ba\u4ed6\u6539\u9020\uff0c\u76ee\u524d faster-whisper \u5c08\u6848\u662f\u6211\u77e5\u9053\u6548\u7387\u6700\u4f73\u7684\u5de5\u5177\u3002<\/p>\n<p><a href=\"https:\/\/github.com\/SYSTRAN\/faster-whisper\" target=\"_blank\">faster-whisper \u7db2\u7ad9<\/a><br \/>\n<a href=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2025\/02\/Screenshot_20250201_005353.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2025\/02\/Screenshot_20250201_005353-1024x500.png\" alt=\"\" width=\"530\" height=\"259\" class=\"alignnone size-large wp-image-2970\" srcset=\"https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2025\/02\/Screenshot_20250201_005353-1024x500.png 1024w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2025\/02\/Screenshot_20250201_005353-350x171.png 350w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2025\/02\/Screenshot_20250201_005353-768x375.png 768w, https:\/\/yowlab.idv.tw\/wordpress\/wp-content\/uploads\/2025\/02\/Screenshot_20250201_005353.png 1502w\" sizes=\"auto, (max-width: 530px) 100vw, 530px\" \/><\/a><\/p>\n<ol>\n<li class=\"present01\">\u5148\u8a2d\u5b9a\u597d\u4e00\u500b\u5c08\u70ba faster-whisper \u7684\u74b0\u5883<\/li>\n<p>    faster-whisper \u8981\u900f\u904e python \u4f86\u8dd1\uff0c\u6240\u4ee5\uff0c\u8981\u5148\u8a2d\u5b9a\u597d\u4e00\u500b\u5c08\u70ba faster-whisper\u7684 python \u74b0\u5883<br \/>\n    <span class=\"highlight01\">python3 -m venv (\u8def\u5f91)\/faster-whisper<\/span><\/p>\n<li class=\"present01\">\u8a2d\u5b9a\u5b8c\u6210\u5f8c\uff0c\u9032\u5165\u8a72\u74b0\u5883<\/li>\n<p>    source faster-whisper-env\/bin\/activate<\/p>\n<p>    \u53c8\uff0c\u57f7\u884c\u7a0b\u5f0f\u5b8c\u7562\u5f8c\uff0c\u60f3\u96e2\u958b\u6b64\u74b0\u5883\uff1adeactivate\u3002<\/p>\n<li class=\"present01\">\u5b89\u88dd\u6703\u7528\u5230\u7684\u5de5\u5177\u7a0b\u5f0f\u8207\u51fd\u5f0f\u5eab<\/li>\n<p>     sudo apt install pipx<br \/>\n     pipx install &#8211;include-deps faster-whisper<\/p>\n<p>     ##\u57f7\u884c\u6642\u60f3\u770b\u898b\u9032\u5ea6\u72c0\u614b\u689d<br \/>\n     python3 -m pip install tqdm<\/p>\n<p>     ##\u5c07\u8f49\u51fa\u4f86\u7684\u5b57\u5e55\u6a94\uff0c\u518d\u8f49\u7e41\u9ad4\u4e2d\u6587\u4e00\u6b21<br \/>\n     python3 -m pip install opencc<\/p>\n<p>     ##\u64ad\u653e\u8072\u97f3\u7528<br \/>\n     python3 -m pip install pygame<\/p>\n<\/ol>\n<p>&nbsp;<\/p>\n<pre>\r\n<h4>\u8a9e\u97f3\u8f49\u9304\u6210\u6587\u5b57\u7a0b\u5f0f\u78bc\uff1a<\/h4>\r\n<code>\r\n##\u532f\u5165\u6703\u4f7f\u7528\u5230\u7684\u51fd\u5f0f\u5eab\r\nfrom faster_whisper import WhisperModel\r\nfrom tqdm import tqdm\r\nimport time\r\n\r\n##\u8f09\u5165\u6307\u5b9a\u7684\u6a21\u578b:tiny, base, small, medium, large-v1, large-v2, distil-whisper-large-v3\r\nmodel_path = \"\u6a21\u578b\u653e\u7f6e\u7684\u76ee\u9304(ex:\/home\/chungyu\/faster-whisper\/models\/)\"\r\nmodel_name = \"large-v2\"\r\nmodel_nname = model_path + model_name\r\n\r\n##\u8072\u97f3\u6a94\u6848\r\naudio_path = \"\u653e\u7f6e\u8fa8\u8b58\u8f49\u9304\u6a94\u6848\u7684\u76ee\u9304(ex:\/home\/chungyu\/Downloads\/)\"\r\naudio_file = \"\u8981\u8fa8\u8b58\u8f49\u9304\u6a94\u540d(ex:\u738b\u6649\u6046_\u6642\u5149\u5e7d\u8c37.mp3\")\r\n\r\n##\u8f49\u9304\u5de5\u4f5c\u5b8c\u6210\u5f8c\uff0c\u64ad\u653e\u5de5\u4f5c\u5df2\u5b8c\u6210\u901a\u77e5\u97f3\u6548\r\nok_audio_file = \"\u901a\u77e5\u97f3\u6548\u6a94\u540d(ex:work_finish.mp3)\"\r\n\r\n##\u8f49\u9304\u7684\u5b57\u5e55\u6a94\r\noutput_file = audio_path + audio_file[:-4] +\".srt\"\r\n\r\n#### \u4e3b\u7a0b\u5f0f\u958b\u59cb \r\nprint(\"\u8f09\u5165 \" + model_name + \" \u6a21\u578b... \\n\")\r\n\r\nstart_time = time.time()\r\n#model = WhisperModel(\"base\", device=\"cuda\")  # \u6216\u4f7f\u7528 \"cpu\" \u5982\u679c\u6c92\u6709 GPU\r\nmodel = WhisperModel(model_name , device=\"cpu\", compute_type=\"int16\")  # \u6216\u4f7f\u7528 \"cpu\" \u5982\u679c\u6c92\u6709 GPU\r\n\r\nend_time = time.time()\r\nelapsed_time = end_time - start_time\r\nminutes, seconds = divmod(int(elapsed_time), 60)\r\n\r\nprint(model_name + \"\u6a21\u578b\u8f09\u5165\u5b8c\u6210\uff0c\" + f\"\u672c\u6a21\u578b\u8f09\u5165\u5171\u8017\u6642\u9593\uff1a{minutes} \u5206:{seconds} \u79d2\\n\\n\u958b\u59cb\u9032\u884c\u8a9e\u97f3\u8fa8\u8b58\u4f5c\u696d...\\n\\n\" )\r\n\r\n\r\n# \u8f49\u9304\u97f3\u8a0a\u6a94\r\nsegments, info = model.transcribe(audio_path + audio_file , beam_size=5, initial_prompt=\"\u4ee5\u4e0b\u662f\u7e41\u9ad4\u4e2d\u6587\u7684\u53e5\u5b50\", language=\"zh\")\r\n\r\n# \u8f38\u51fa\u8a9e\u8a00\u548c\u8f49\u9304\u5167\u5bb9\r\nprint(\"Detected language '%s' with probability %f\" % (info.language, info.language_probability))\r\n\r\nstart_time = time.time()\r\n\r\n#\u5728\u87a2\u5e55\u4e0a\u986f\u793a\u5075\u6e2c\u5230\u7684\u8a9e\u8a00\u548c\u6bcf\u500b\u7247\u6bb5\u7684\u6642\u9593\u7bc4\u570d\u548c\u6587\u4ef6\u5167\u5bb9\u3002\r\n#for segment in segments:\r\n#    print(f\"[{segment.start:.2f}s - {segment.end:.2f}s] {segment.text}\")\r\n\r\n\r\n# \u624b\u52d5\u6307\u5b9a\u6587\u4ef6\u5168\u90e8\u6bb5\u843d\u6578\r\ntotal_segments = sum(1 for _ in segments)  # \u8a08\u7b97\u6587\u4ef6\u6bb5\u843d\u7e3d\u6578\r\n\r\n#\u5c07\u8f49\u9304\u7d50\u679c\u5132\u5b58\u6210\u6a94\u6848\r\nwith open(output_file, \"w\", encoding=\"utf-8\") as file:\r\n    file.write(f\"Detected language: {info.language}\\n\")\r\n\r\n# \u8f49\u9304\u97f3\u8a0a\u6a94\u6848# \u91cd\u7f6e segments \u751f\u6210\u5668\r\n    segments = model.transcribe(audio_path + audio_file , beam_size=5)[0] # \u518d\u6b21\u8c03\u7528\u4ee5\u91cd\u7f6e\u751f\u6210\u5668\r\n\r\n   ##\u4f7f\u7528 tqdm \u986f\u793a\u9032\u5ea6\u689d\r\n    for segment in tqdm(segments, total=total_segments, desc=\"\u8f49\u9304\u4f5c\u696d\u8655\u7406\u9032\u5ea6\\n\"):\r\n        file.write(f\"[{segment.start:.2f}s - {segment.end:.2f}s] {segment.text}\\n\")\r\n\r\nend_time = time.time()\r\nelapsed_time = end_time - start_time\r\nminutes, seconds = divmod(int(elapsed_time), 60)\r\nprint(f\"\u6b64\u6b21\u8f49\u9304\u4f5c\u696d\u8017\u6642 {minutes} \u5206:{seconds} \u79d2\\n\\n\")\r\n\r\n\r\n### \u78ba\u4fdd\u8f49\u9304\u51fa\u4f86\u7684\u7d50\u679c\u70ba\u6b63(\u7e41)\u9ad4\u4e2d\u6587\uff0c\u6240\u4ee5\u5229\u7528 opencc \u5c07\u6a94\u6848\u518d\u8f49\u8f49\u78bc\u4e00\u6b21\r\nimport opencc\r\n\r\n# \u5275\u5efaOpenCC\u8f49\u63db\u5668\uff0c\u9019\u88e1\u4f7f\u7528s2t.json\u9032\u884c\u7c21\u9ad4\u5230\u7e41\u9ad4\u7684\u8f49\u63db\r\ncc = opencc.OpenCC('s2t.json')\r\n\r\n# \u8b80\u53d6\u7c21\u9ad4\u4e2d\u6587\u6587\u4ef6\r\nwith open(output_file, 'r', encoding='utf-8') as infile:\r\n    simplified_text = infile.read()\r\n\r\n# \u9032\u884c\u8f49\u63db\r\ntraditional_text = cc.convert(simplified_text)\r\n\r\n# \u5c07\u8f49\u63db\u5f8c\u7684\u7e41\u9ad4\u4e2d\u6587\u5beb\u5165\u65b0\u6587\u4ef6\r\nwith open(output_file, 'w', encoding='utf-8') as outfile:\r\n    outfile.write(traditional_text)\r\n\r\nprint(\"\u8f49\u9304\u5b8c\u6210\uff1a\" + output_file )\r\n\r\n###################################\r\n#\r\n# \u7279\u5225\u8aaa\u660e\r\n# \u4e5f\u53ef\u4ee5\u76f4\u63a5\u57f7\u884c\u900f\u904e\u547d\u4ee4\u5217\u57f7\u884c opencc\r\n#\r\n# \u7c21\u9ad4\u4e2d\u6587\u8f49\u6b63\u9ad4(\u7e41\u9ad4\u4e2d\u6587)\r\n# opencc -i \u7c21\u9ad4\u4e2d\u6587.txt  -o \u6b63\u9ad4\u4e2d\u6587.txt -c s2t.json\r\n#\r\n# \u6b63\u9ad4(\u7e41\u9ad4\u4e2d\u6587)\u8f49\u7c21\u9ad4\u4e2d\u6587\r\n# opencc -i \u6b63\u9ad4\u4e2d\u6587.txt  -o \u7c21\u9ad4\u4e2d\u6587.txt -c t2s.json\r\n#\r\n###################################\r\n\r\n\r\n####\u4ee5\u4e0b\u70ba\u5de5\u4f5c\u5b8c\u6210\u5f8c\uff0c\u64ad\u653e\u901a\u77e5\u97f3\u6548\r\n#\u5148\u8a2d\u7f6e\u74b0\u5883\u8b8a\u6578\u4ee5\u96b1\u85cf Pygame \u7684\u6b61\u8fce\u8a0a\u606f\u4ee5\u53ca\u7a0b\u5f0f\u57f7\u884c\u7d50\u675f\u5f8c\u7684\u986f\u793a\u8a0a\u606f\r\nimport os\r\nos.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = '1'\r\n\r\n##\u64ad\u653e\u901a\u77e5\u97f3\u6548\r\nimport pygame\r\npygame.init()\r\npygame.mixer.music.load(audio_path + ok_audio_file)\r\npygame.mixer.music.play()\r\n\r\n# \u7b49\u5f85\u97f3\u6a02\u64ad\u653e\u5b8c\u7562\r\nwhile pygame.mixer.music.get_busy():\r\n    pass\r\npygame.quit()\r\n\r\n<\/code>\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h4>\u5fc3\u5f97\uff1a<\/h4>\n<p>\u6211\u7684\u7b46\u96fb\u56e0\u70ba\u6c92\u6709GPU\uff0c\u6240\u4ee5\u900f\u904e\u672c\u7a0b\u5f0f\u57f7\u884c\u8f49\u9304\u4f5c\u696d\uff0c\u6703\u82b1\u8cbb\u76f8\u7576\u591a\u7684\u6642\u9593\u3002<\/p>\n<p>\u9664\u975e\u6709\u66f4\u597d\u4e0d\u5f37\u529b\u4f9d\u8cf4 GPU \u7684\u6f14\u7b97\u5de5\u5177\u51fa\u73fe\uff0c\u5426\u5247\u6211\u7684\u7b46\u96fb\u4fbf\u6c92\u6709\u52a0\u901f\u524d\u9032\u7684\u6642\u65e5\u3002\u6216\u8005\u662f\u900f\u904e\u5916\u63a5\u5f0f\u986f\u5361\u4f86\u52a0\u901f\uff0c\u4f46\u9019\u6210\u672c\u4e0d\u4f4e\u3002<\/p>\n<p>\u76ee\u524d\u53ef\u77e5\u6210\u672c\u6700\u4f4e\u4f5c\u6cd5\uff0c\u4fbf\u662f\u5c07\u7a0b\u5f0f\u78bc\u653e\u5230 Google Colab \u4e0a\u8dd1\uff0c Google Colab \u5f88\u5927\u65b9\u7684\u63d0\u4f9b\u4e86\u4e0d\u5c0f\u7684 GPU \u4f86\u8b93\u4f7f\u7528\u8005\u5229\u7528\u3002<\/p>\n<p>\u597d\u53cb\u795e\u4eba\u96c4\u54e5\u4fbf\u662f\u5229\u7528\u6b64\u6cd5\uff0c\u958b\u767c\u4e86\u975e\u5e38\u6f02\u4eae\u7684\u8f49\u9304\u7a0b\u5f0f\uff0c\u800c\u4e14\u7121\u511f\u6b61\u6b61\u8fce\u5927\u5bb6\u4f7f\u7528\uff0c\u7db2\u5740\uff1a<a href=\"https:\/\/tinyurl.com\/gsyan-faster-whisper\" target=\"_blank\">https:\/\/tinyurl.com\/gsyan-faster-whisper<\/a>\uff0c\u771f\u662f\u592a\u795e\u4e86\uff01<\/p>\n<p>\u53e6\u5916\uff0c\u6211\u7684\u5ef6\u4f38\u60f3\u6cd5\uff0c\u4e5f\u8a31\u53ef\u4ee5\u900f\u904e\u8a9e\u97f3\u8f49\u9304\uff0c\u4f86\u8b93\u5b78\u751f\u589e\u9032\u81ea\u5df1\u95dc\u65bc\u300c\u8b80\u300d\u7684\u80fd\u529b\u3002<\/p>\n<p><span class=\"highlight01\">\u53c8\uff0c\u60f3\u4e86\u60f3\uff0c\u6cbf\u7528\u4e0a\u9762\u7684\u601d\u7dd2\uff0c\u5728 Colab \u4e0a\u6539\u5beb\u4e86\u4e00\u4e0b\uff0c\u5982\u6b64\u4fbf\u53ef\u4ee5\u9060\u7aef\u57f7\u884c\u4e86\uff01 \u9023\u63a5\u8655\uff1a<a href=\"https:\/\/colab.research.google.com\/drive\/1ysuNzfFMzdtONOAqZgosmv6IqYYhxfXm?usp=sharing\" target=\"_blank\">Voice2Word<\/a><\/span><\/p>\n<div class=\"box01\">\n<h4>2025-03-09 \u589e\u52a0<\/h4>\n<p>\u524d\u9762\u7684\u7a0b\u5f0f\u8457\u91cd\u65bc\u5b57\u5e55\u7684\u63d0\u53d6\uff0c\u6240\u4ee5\u6c92\u6709\u8003\u616e\u5230\u5b57\u5e55\u6a94\uff1aSRT \u771f\u6b63\u683c\u5f0f\u9700\u6c42\uff0c\u6240\u4ee5\u7121\u6cd5\u76f4\u63a5\u62ff\u4f86\u7576\u5b57\u5e55\u6a94\u7528\u3002<\/p>\n<p>\u524d\u5169\u5929\u5229\u7528\u6642\u9593\u4fee\u6539\u4e86\u7a0b\u5f0f\uff0c\u8f49\u63db\u51fa\u4f86\u7684\u5b57\u5e55\u6a94\uff0c\u53ef\u4ee5\u76f4\u63a5\u8207\u5f71\u7247\u914d\u5408\u540c\u6b65\u64ad\u653e\u4e86\u3002<\/p>\n<p><span class=\"highlight01\">\u7db2\u5740\u5982\u4e0b\uff1a<a href=\"https:\/\/colab.research.google.com\/drive\/1ihe033MTALE742oOVh0xjFSEJvH53Olz?usp=drive_link\" target=\"_blank\">Voice2SRT.ipynb<\/a><\/span><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<h3>\u53c3\u8003\u8cc7\u6e90<\/h3>\n<ol>\n<li><a href=\"https:\/\/tinyurl.com\/gsyan-faster-whisper\" target=\"_blank\">\u96c4\u54e5\uff1aFaster Whisper \u8a9e\u97f3\u8fa8\u8b58\u6e2c\u8a66<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>\u6559\u5b78\u5f71\u7247\u6642\u9593\u6709\u6642\u5f88\u9577\uff0c\u70ba\u4e86\u7bc0\u7701\u6642\u9593\uff0c\u6211\u6703\u60f3\u5c07\u5f71\u7247\u7684\u5c0d\u8a71\u6293\u51fa\u8b8a\u6210\u9010\u5b57\u7a3f\uff0c\u7136\u5f8c\u76f4\u63a5\u7528\u8b80 <a class=\"more-link\" href=\"https:\/\/yowlab.idv.tw\/wordpress\/?p=2962\">Continue reading <span class=\"screen-reader-text\">  \u5229\u7528 faster-whisper \u4f86\u8f49\u63db\u9010\u5b57\u7a3f<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,2],"tags":[110,25],"class_list":["post-2962","post","type-post","status-publish","format-standard","hentry","category-3","category-2","tag-faster-whispter","tag-python"],"_links":{"self":[{"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2962","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2962"}],"version-history":[{"count":24,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2962\/revisions"}],"predecessor-version":[{"id":3027,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2962\/revisions\/3027"}],"wp:attachment":[{"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2962"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2962"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yowlab.idv.tw\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2962"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}