{"id":1155,"date":"2026-06-19T01:22:29","date_gmt":"2026-06-18T17:22:29","guid":{"rendered":"https:\/\/aikuto.com\/?p=1155"},"modified":"2026-06-24T16:04:37","modified_gmt":"2026-06-24T08:04:37","slug":"whisper-transcribe-audio-documents","status":"publish","type":"post","link":"https:\/\/aikuto.com\/?p=1155","title":{"rendered":"whisper\u8f6c\u5f55\u97f3\u9891\u6587\u6863"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Whisper \u662f OpenAI \u5f00\u53d1\u7684\u4e00\u4e2a\u81ea\u52a8\u8bed\u97f3\u8bc6\u522b\uff08ASR\uff09\u7cfb\u7edf\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e0d\u540c\u5927\u5c0f\u7684\u9884\u8bad\u7ec3\u6a21\u578b\uff0c\u6a21\u578b\u8d8a\u5927\uff0c\u901a\u5e38\u5728\u8f6c\u5f55\u4efb\u52a1\u4e2d\u7684\u51c6\u786e\u6027\u5c31\u8d8a\u9ad8\uff0c\u4f46\u540c\u65f6\u4e5f\u9700\u8981\u66f4\u591a\u7684\u8ba1\u7b97\u8d44\u6e90\u548c\u66f4\u957f\u7684\u63a8\u7406\u65f6\u95f4\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u6a21\u578b\u5927\u5c0f\u4e0e\u7cbe\u5ea6<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Whisper \u4e00\u5171\u6709 5 \u79cd\u4e0d\u540c\u5927\u5c0f\u7684\u6a21\u578b\uff0c\u6309\u7167\u53c2\u6570\u91cf\u4ece\u5c0f\u5230\u5927\u4f9d\u6b21\u4e3a\u00a0<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><strong>tiny<\/strong><\/mark><\/code>\u3001<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><strong>base<\/strong><\/mark><\/code>\u3001<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><strong>small<\/strong><\/mark><\/code>\u3001<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><strong>medium<\/strong><\/mark><\/code>\u00a0\u548c\u00a0<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><strong>large<\/strong><\/mark><\/code>\uff0c\u5176\u4e2d\u00a0<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><strong>large<\/strong><\/mark><\/code>\u00a0\u53c8\u5206\u4e3a\u00a0<code><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">large-v1<\/mark><\/strong><\/code>\u00a0\u548c\u00a0<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><code><strong>large-v2<\/strong><\/code><\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-black-color\">\uff0c<\/mark><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><code><strong>large-v2<\/strong><\/code>\u00a0<\/mark>\u662f\u76ee\u524d\u6700\u65b0\u4e14\u8868\u73b0\u6700\u4f18\u7684\u7248\u672c\u3002\u7cbe\u5ea6\u4e0a\uff0c<code><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><strong>tiny<\/strong><\/mark><\/code>\u00a0\u6a21\u578b\u7684\u51c6\u786e\u6027\u6700\u4f4e\uff0c\u800c\u00a0<mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\"><strong><code>large-v2<\/code>\u00a0<\/strong><\/mark>\u6a21\u578b\u7684\u51c6\u786e\u6027\u6700\u9ad8\u3002\u4ee5\u4e0b\u662f\u5bf9\u5404\u4e2a\u6a21\u578b\u7684\u7b80\u8981\u4ecb\u7ecd\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u6a21\u578b\u540d\u79f0<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u53c2\u6570\u91cf<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u82f1\u6587\u8f6c\u5f55\u901f\u5ea6<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u591a\u8bed\u8a00\u8f6c\u5f55\u901f\u5ea6<\/strong><\/td><td class=\"has-text-align-left\" data-align=\"left\"><strong>\u7279\u70b9<\/strong><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>tiny<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">39M<\/td><td class=\"has-text-align-left\" data-align=\"left\">~32x<\/td><td class=\"has-text-align-left\" data-align=\"left\">~16x<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u901f\u5ea6\u6781\u5feb\uff0c\u4f46\u7cbe\u5ea6\u8f83\u4f4e\uff0c\u9002\u7528\u4e8e\u5bf9\u901f\u5ea6\u8981\u6c42\u6781\u9ad8\u4e14\u5bf9\u8f6c\u5f55\u7cbe\u5ea6\u8981\u6c42\u4e0d\u9ad8\u7684\u573a\u666f\u3002<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>base<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">74M<\/td><td class=\"has-text-align-left\" data-align=\"left\">~16x<\/td><td class=\"has-text-align-left\" data-align=\"left\">~8x<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u901f\u5ea6\u8f83\u5feb\uff0c\u7cbe\u5ea6\u4e00\u822c\uff0c\u80fd\u6ee1\u8db3\u4e00\u4e9b\u57fa\u672c\u7684\u8f6c\u5f55\u9700\u6c42\u3002<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>small<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">244M<\/td><td class=\"has-text-align-left\" data-align=\"left\">~6x<\/td><td class=\"has-text-align-left\" data-align=\"left\">~3x<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u901f\u5ea6\u9002\u4e2d\uff0c\u7cbe\u5ea6\u8f83\u597d\uff0c\u5728\u5927\u591a\u6570\u60c5\u51b5\u4e0b\u80fd\u63d0\u4f9b\u8f83\u4e3a\u51c6\u786e\u7684\u8f6c\u5f55\u7ed3\u679c\u3002<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>medium<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">769M<\/td><td class=\"has-text-align-left\" data-align=\"left\">~2x<\/td><td class=\"has-text-align-left\" data-align=\"left\">~1.5x<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u901f\u5ea6\u76f8\u5bf9\u8f83\u6162\uff0c\u4f46\u7cbe\u5ea6\u8f83\u9ad8\uff0c\u80fd\u5904\u7406\u4e00\u4e9b\u590d\u6742\u7684\u8bed\u97f3\u5185\u5bb9\u3002<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>large-v1<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">1550M<\/td><td class=\"has-text-align-left\" data-align=\"left\">1x<\/td><td class=\"has-text-align-left\" data-align=\"left\">1x<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u7cbe\u5ea6\u5f88\u9ad8\uff0c\u4f46\u901f\u5ea6\u6700\u6162\uff0c\u5bf9\u8ba1\u7b97\u8d44\u6e90\u8981\u6c42\u9ad8\u3002<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code>large-v2<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">1550M<\/td><td class=\"has-text-align-left\" data-align=\"left\">1x<\/td><td class=\"has-text-align-left\" data-align=\"left\">1x<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5728&nbsp;<code>large-v1<\/code>&nbsp;\u7684\u57fa\u7840\u4e0a\u8fdb\u4e00\u6b65\u4f18\u5316\uff0c\u662f\u76ee\u524d Whisper \u6a21\u578b\u4e2d\u7cbe\u5ea6\u6700\u9ad8\u7684\u7248\u672c\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u793a\u4f8b\u4ee3\u7801<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u4f60\u60f3\u4f7f\u7528&nbsp;<code>large-v2<\/code>&nbsp;\u6a21\u578b\u8fdb\u884c\u8f6c\u5f55\uff0c\u53ef\u4ee5\u5c06\u4ee3\u7801\u4e2d\u7684&nbsp;<code>model_name<\/code>&nbsp;\u53d8\u91cf\u4fee\u6539\u4e3a&nbsp;<code>\"large-v2\"<\/code>\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import whisper\n\n<span class=\"hljs-comment\"># \u9009\u62e9 large-v2 \u6a21\u578b<\/span>\nmodel_name = <span class=\"hljs-string\">\"large-v2\"<\/span>\ndevice = <span class=\"hljs-string\">\"cuda\"<\/span> <span class=\"hljs-keyword\">if<\/span> torch.cuda.is_available() <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-string\">\"cpu\"<\/span>\n\n<span class=\"hljs-comment\"># \u52a0\u8f7d\u6a21\u578b<\/span>\nmodel = whisper.load_model(model_name, device=device)\n\n<span class=\"hljs-comment\"># \u8fdb\u884c\u8f6c\u5f55<\/span>\naudio_file = <span class=\"hljs-string\">\"your_audio_file.mp3\"<\/span>\nresult = model.transcribe(audio_file, language=<span class=\"hljs-string\">\"Japanese\"<\/span>, word_timestamps=<span class=\"hljs-keyword\">True<\/span>)\n\n<span class=\"hljs-comment\"># \u8f93\u51fa\u8f6c\u5f55\u7ed3\u679c<\/span>\n<span class=\"hljs-keyword\">print<\/span>(result&#91;<span class=\"hljs-string\">\"text\"<\/span>])<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u4f60\u9700\u8981\u6839\u636e\u81ea\u5df1\u7684\u8ba1\u7b97\u8d44\u6e90\u3001\u65f6\u95f4\u9650\u5236\u548c\u5bf9\u8f6c\u5f55\u7cbe\u5ea6\u7684\u8981\u6c42\u6765\u9009\u62e9\u5408\u9002\u7684\u6a21\u578b\u3002\u5982\u679c\u4f60\u7684\u8ba1\u7b97\u8d44\u6e90\u5145\u8db3\uff0c\u4e14\u5bf9\u8f6c\u5f55\u7cbe\u5ea6\u6709\u8f83\u9ad8\u8981\u6c42\uff0c\u90a3\u4e48\u53ef\u4ee5\u8003\u8651\u4f7f\u7528&nbsp;<code>large-v2<\/code>&nbsp;\u6a21\u578b\uff1b\u5982\u679c\u5bf9\u901f\u5ea6\u8981\u6c42\u8f83\u9ad8\uff0c<code>medium<\/code>&nbsp;\u6216\u66f4\u5c0f\u7684\u6a21\u578b\u53ef\u80fd\u66f4\u9002\u5408\u4f60\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4e00\u3001 Python \u7248\u672c\u95ee\u9898<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>openai-whisper<\/code>&nbsp;\u4e0d\u652f\u6301 Python 3.6\uff0c\u4f60\u9700\u8981\u5c06 Python \u7248\u672c\u5347\u7ea7\u5230 3.7 \u53ca\u4ee5\u4e0a\u3002\u5728 CentOS \u7cfb\u7edf\u4e0a\uff0c\u4f60\u53ef\u4ee5\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u5347\u7ea7 Python\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1.1 \u5b89\u88c5\u4f9d\u8d56<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">sudo yum install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>1.2 \u4e0b\u8f7d Python 3.8\uff08\u8fd9\u91cc\u4ee5 3.8 \u4e3a\u4f8b\uff09<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">wget https:<span class=\"hljs-comment\">\/\/www.python.org\/ftp\/python\/3.8.16\/Python-3.8.16.tgz<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>1.3 \u89e3\u538b\u5e76\u7f16\u8bd1\u5b89\u88c5<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">tar -xzf Python<span class=\"hljs-number\">-3.8<\/span><span class=\"hljs-number\">.16<\/span>.tgz\ncd Python<span class=\"hljs-number\">-3.8<\/span><span class=\"hljs-number\">.16<\/span>\n.\/configure --enable-optimizations <span class=\"hljs-comment\">## \u5982\u679c\u62a5\u9519\u5c31\u628a--enable-optimizations\u53bb\u6389<\/span>\nmake -j$(nproc)\nsudo make altinstall<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>1.4 \u9a8c\u8bc1\u5b89\u88c5<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">python3<\/span><span class=\"hljs-selector-class\">.8<\/span> <span class=\"hljs-selector-tag\">--version<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>2. \u4f7f\u7528\u65b0\u7684 Python \u7248\u672c\u5b89\u88c5&nbsp;<\/strong><code><strong>openai-whisper<\/strong><\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5347\u7ea7 Python \u540e\uff0c\u4f7f\u7528\u65b0\u7684 Python \u7248\u672c\u5bf9\u5e94\u7684&nbsp;<code>pip<\/code>&nbsp;\u6765\u5b89\u88c5&nbsp;<code>openai-whisper<\/code>\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">python3<span class=\"hljs-number\">.8<\/span> -m pip install --user git+https:<span class=\"hljs-comment\">\/\/github.com\/openai\/whisper.git<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>3. \u5176\u4ed6\u53ef\u80fd\u7684\u95ee\u9898\u53ca\u89e3\u51b3\u529e\u6cd5<\/strong><\/h3>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3.1 \u955c\u50cf\u6e90\u95ee\u9898<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f60\u4f7f\u7528\u7684\u662f\u963f\u91cc\u4e91\u7684\u955c\u50cf\u6e90\uff0c\u6709\u65f6\u955c\u50cf\u6e90\u53ef\u80fd\u540c\u6b65\u4e0d\u53ca\u65f6\u6216\u8005\u5b58\u5728\u5176\u4ed6\u95ee\u9898\u3002\u4f60\u53ef\u4ee5\u5c1d\u8bd5\u5207\u6362\u56de\u5b98\u65b9\u7684 PyPI \u6e90\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">python3<span class=\"hljs-number\">.8<\/span> -m pip install --user -i https:<span class=\"hljs-comment\">\/\/pypi.org\/simple git+https:\/\/github.com\/openai\/whisper.git<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>3.2 \u6743\u9650\u95ee\u9898<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u786e\u4fdd\u4f60\u6709\u8db3\u591f\u7684\u6743\u9650\u5728\u7528\u6237\u76ee\u5f55\u4e0b\u5b89\u88c5\u5305\u3002\u5982\u679c\u8fd8\u662f\u9047\u5230\u6743\u9650\u95ee\u9898\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4e34\u65f6\u4f7f\u7528&nbsp;<code>sudo<\/code>&nbsp;\u6765\u5b89\u88c5\uff08\u4f46\u8981\u8c28\u614e\u4f7f\u7528\uff09\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">sudo python3<span class=\"hljs-number\">.8<\/span> -m pip install git+https:<span class=\"hljs-comment\">\/\/github.com\/openai\/whisper.git<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u901a\u8fc7\u4ee5\u4e0a\u6b65\u9aa4\uff0c\u4f60\u5e94\u8be5\u80fd\u591f\u89e3\u51b3\u5b89\u88c5&nbsp;<code>openai-whisper<\/code>&nbsp;\u65f6\u9047\u5230\u7684\u95ee\u9898\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u591a\u4e2a\u811a\u672c\u88ab\u5b89\u88c5\u5230\u4e86&nbsp;<code>\/root\/.local\/bin<\/code>&nbsp;\u76ee\u5f55\u4e0b\uff0c\u4f46\u8be5\u76ee\u5f55\u4e0d\u5728\u7cfb\u7edf\u7684&nbsp;<code>PATH<\/code>&nbsp;\u73af\u5883\u53d8\u91cf\u4e2d\u3002\u8fd9\u610f\u5473\u7740\u4f60\u65e0\u6cd5\u76f4\u63a5\u5728\u547d\u4ee4\u884c\u4e2d\u8c03\u7528\u8fd9\u4e9b\u811a\u672c\uff0c\u9700\u8981\u624b\u52a8\u6dfb\u52a0\u8be5\u76ee\u5f55\u5230&nbsp;<code>PATH<\/code>&nbsp;\u73af\u5883\u53d8\u91cf\u6216\u8005\u4f7f\u7528\u5b8c\u6574\u7684\u8def\u5f84\u6765\u8c03\u7528\u8fd9\u4e9b\u811a\u672c\u3002\u4ee5\u4e0b\u4e3a\u4f60\u63d0\u4f9b\u51e0\u79cd\u89e3\u51b3\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u65b9\u6cd5\u4e00\uff1a\u4e34\u65f6\u6dfb\u52a0\u76ee\u5f55\u5230&nbsp;<\/strong><code><strong>PATH<\/strong><\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u4f60\u53ea\u662f\u60f3\u4e34\u65f6\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u5728\u5f53\u524d\u7ec8\u7aef\u4f1a\u8bdd\u4e2d\u8ba9\u8fd9\u4e9b\u811a\u672c\u53ef\u4ee5\u88ab\u8c03\u7528\uff0c\u53ef\u4ee5\u5728\u7ec8\u7aef\u4e2d\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">export<\/span> PATH=$PATH:<span class=\"hljs-regexp\">\/root\/<\/span>.local\/bin<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u6267\u884c\u8be5\u547d\u4ee4\u540e\uff0c\u5728\u5f53\u524d\u7ec8\u7aef\u7a97\u53e3\u4e2d\u5c31\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u8fd9\u4e9b\u811a\u672c\u4e86\u3002\u4e0d\u8fc7\uff0c\u8fd9\u79cd\u65b9\u6cd5\u53ea\u5728\u5f53\u524d\u7ec8\u7aef\u4f1a\u8bdd\u4e2d\u6709\u6548\uff0c\u5173\u95ed\u7ec8\u7aef\u540e\u8bbe\u7f6e\u4f1a\u5931\u6548\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u65b9\u6cd5\u4e8c\uff1a\u6c38\u4e45\u6dfb\u52a0\u76ee\u5f55\u5230&nbsp;<\/strong><code><strong>PATH<\/strong><\/code><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u82e5\u4f60\u5e0c\u671b\u6bcf\u6b21\u6253\u5f00\u7ec8\u7aef\u65f6\u8be5\u76ee\u5f55\u90fd\u81ea\u52a8\u6dfb\u52a0\u5230&nbsp;<code>PATH<\/code>&nbsp;\u4e2d\uff0c\u53ef\u4ee5\u4fee\u6539\u7528\u6237\u7684\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u6587\u4ef6\u3002\u5bf9\u4e8e&nbsp;<code>root<\/code>&nbsp;\u7528\u6237\uff0c\u901a\u5e38\u662f\u4fee\u6539&nbsp;<code>~\/.bashrc<\/code>&nbsp;\u6216&nbsp;<code>~\/.bash_profile<\/code>&nbsp;\u6587\u4ef6\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u4fee\u6539&nbsp;<\/strong><code><strong>~\/.bashrc<\/strong><\/code><strong>&nbsp;\u6587\u4ef6<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">nano ~\/.bashrc<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u5728\u6587\u4ef6\u672b\u5c3e\u6dfb\u52a0\u4ee5\u4e0b\u5185\u5bb9\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">export<\/span> PATH=$PATH:<span class=\"hljs-regexp\">\/root\/<\/span>.local\/bin<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u4fdd\u5b58\u5e76\u9000\u51fa\u6587\u4ef6\uff08\u6309&nbsp;<code>Ctrl + X<\/code>\uff0c\u7136\u540e\u6309&nbsp;<code>Y<\/code>&nbsp;\u786e\u8ba4\u4fdd\u5b58\uff0c\u6700\u540e\u6309&nbsp;<code>Enter<\/code>\uff09\u3002\u63a5\u7740\uff0c\u4f7f\u914d\u7f6e\u6587\u4ef6\u751f\u6548\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">source ~\/.bashrc<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>\u4fee\u6539&nbsp;<\/strong><code><strong>~\/.bash_profile<\/strong><\/code><strong>&nbsp;\u6587\u4ef6\uff08\u5982\u679c\u4f7f\u7528\u7684\u662f\u8fd9\u4e2a\u6587\u4ef6\uff09<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">nano ~\/.bash_profile<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u540c\u6837\u5728\u6587\u4ef6\u672b\u5c3e\u6dfb\u52a0&nbsp;<code>export PATH=$PATH:\/root\/.local\/bin<\/code>\uff0c\u4fdd\u5b58\u5e76\u9000\u51fa\u540e\u6267\u884c&nbsp;<code>source ~\/.bash_profile<\/code>&nbsp;\u4f7f\u914d\u7f6e\u751f\u6548\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u4f7f\u7528 Python 3.8 \u5bf9\u5e94\u7684&nbsp;<\/strong><code><strong>pip<\/strong><\/code><strong>&nbsp;\u8fdb\u884c\u5b89\u88c5<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f7f\u7528&nbsp;<code>python3.8 -m pip<\/code>&nbsp;\u6765\u786e\u4fdd\u5b89\u88c5\u64cd\u4f5c\u662f\u9488\u5bf9 Python 3.8 \u73af\u5883\u7684\u3002\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u6765\u5b89\u88c5 PyTorch\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">python3<\/span><span class=\"hljs-selector-class\">.8<\/span> <span class=\"hljs-selector-tag\">-m<\/span> <span class=\"hljs-selector-tag\">pip<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">torch<\/span> <span class=\"hljs-selector-tag\">torchvision<\/span> <span class=\"hljs-selector-tag\">torchaudio<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>\u65b9\u6cd5\u4e8c\uff1a\u68c0\u67e5&nbsp;<\/strong><code><strong>pip<\/strong><\/code><strong>&nbsp;\u7248\u672c\u5bf9\u5e94\u7684 Python \u89e3\u91ca\u5668<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f60\u53ef\u4ee5\u5148\u67e5\u770b&nbsp;<code>pip3<\/code>&nbsp;\u5bf9\u5e94\u7684 Python \u7248\u672c\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">pip3 -V<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u663e\u793a\u7684 Python \u7248\u672c\u662f 3.6\uff0c\u90a3\u4e48\u5c31\u8bf4\u660e\u5f53\u524d&nbsp;<code>pip3<\/code>&nbsp;\u5173\u8054\u7684\u662f Python 3.6\u3002\u4f60\u9700\u8981\u4f7f\u7528 Python 3.8 \u5bf9\u5e94\u7684&nbsp;<code>pip<\/code>&nbsp;\u6765\u5b89\u88c5 PyTorch\u3002\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u67e5\u770b Python 3.8 \u5bf9\u5e94\u7684&nbsp;<code>pip<\/code>&nbsp;\u8def\u5f84\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">which<\/span> <span class=\"hljs-selector-tag\">python3<\/span><span class=\"hljs-selector-class\">.8<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u5047\u8bbe\u8f93\u51fa\u662f&nbsp;<code>\/usr\/local\/bin\/python3.8<\/code>\uff0c\u90a3\u4e48\u5bf9\u5e94\u7684&nbsp;<code>pip<\/code>&nbsp;\u4e00\u822c\u662f&nbsp;<code>\/usr\/local\/bin\/pip3.8<\/code>\uff08\u8def\u5f84\u53ef\u80fd\u56e0\u5b89\u88c5\u65b9\u5f0f\u4e0d\u540c\u800c\u6709\u6240\u5dee\u5f02\uff09\uff0c\u4f7f\u7528\u8be5&nbsp;<code>pip<\/code>&nbsp;\u6765\u5b89\u88c5 PyTorch\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">\/usr\/local\/bin\/pip3.8 install torch torchvision torchaudio<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>\u68c0\u67e5 GPU \u53ef\u7528\u6027<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898\u540e\uff0c\u4f60\u53ef\u4ee5\u518d\u6b21\u8fd0\u884c&nbsp;<code>torch_check.py<\/code>&nbsp;\u811a\u672c\u6765\u68c0\u67e5 GPU \u662f\u5426\u53ef\u7528\u3002\u4ee5\u4e0b\u662f\u4e00\u4e2a\u7b80\u5355\u7684&nbsp;<code>torch_check.py<\/code>&nbsp;\u793a\u4f8b\u4ee3\u7801\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">torch<\/span>\n\n<span class=\"hljs-selector-tag\">print<\/span>(<span class=\"hljs-selector-tag\">torch<\/span><span class=\"hljs-selector-class\">.cuda<\/span><span class=\"hljs-selector-class\">.is_available<\/span>())<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u5982\u679c\u8f93\u51fa\u4e3a&nbsp;<code>True<\/code>\uff0c\u5219\u8868\u793a GPU \u53ef\u4ee5\u6b63\u5e38\u4f7f\u7528\uff1b\u5982\u679c\u4ecd\u7136\u4e3a&nbsp;<code>False<\/code>\uff0c\u5219\u9700\u8981\u8fdb\u4e00\u6b65\u6392\u67e5\u95ee\u9898\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u4f7f\u7528 GPU \u8fdb\u884c\u8ba1\u7b97\u4efb\u52a1\uff08\u5982\u8fd0\u884c Whisper \u6a21\u578b\u8f6c\u5f55\u97f3\u9891\uff09\u65f6\uff0c\u5b9e\u65f6\u67e5\u770b GPU \u7684\u4f7f\u7528\u60c5\u51b5\u6709\u52a9\u4e8e\u4f60\u4e86\u89e3 GPU \u7684\u8d1f\u8f7d\u3001\u663e\u5b58\u5360\u7528\u7b49\u4fe1\u606f\uff0c\u4ee5\u4fbf\u4f18\u5316\u4efb\u52a1\u6216\u6392\u67e5\u95ee\u9898\u3002\u4ee5\u4e0b\u4ecb\u7ecd\u51e0\u79cd\u5e38\u89c1\u7684\u5b9e\u65f6\u67e5\u770b GPU \u4f7f\u7528\u60c5\u51b5\u7684\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. \u4f7f\u7528&nbsp;<\/strong><code><strong>nvidia-smi<\/strong><\/code><strong>&nbsp;\u547d\u4ee4\uff08\u9002\u7528\u4e8e NVIDIA GPU\uff09<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>nvidia-smi<\/code>&nbsp;\u662f NVIDIA \u63d0\u4f9b\u7684\u4e00\u4e2a\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u53ef\u7528\u4e8e\u76d1\u63a7 NVIDIA GPU \u7684\u72b6\u6001\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u57fa\u672c\u4f7f\u7528<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6253\u5f00\u7ec8\u7aef\uff0c\u76f4\u63a5\u8f93\u5165&nbsp;<code>nvidia-smi<\/code>&nbsp;\u547d\u4ee4\uff0c\u5373\u53ef\u67e5\u770b\u5f53\u524d GPU \u7684\u57fa\u672c\u4fe1\u606f\uff0c\u5305\u62ec GPU \u7f16\u53f7\u3001\u540d\u79f0\u3001\u663e\u5b58\u4f7f\u7528\u60c5\u51b5\u3001GPU \u5229\u7528\u7387\u7b49\u3002<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">nvidia-smi<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u793a\u4f8b\u8f93\u51fa\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">Thu Feb  <span class=\"hljs-number\">7<\/span> <span class=\"hljs-number\">17<\/span>:<span class=\"hljs-number\">00<\/span>:<span class=\"hljs-number\">00<\/span> <span class=\"hljs-number\">2025<\/span>\n+-----------------------------------------------------------------------------+\n| NVIDIA-SMI <span class=\"hljs-number\">470.141<\/span><span class=\"hljs-number\">.03<\/span>   Driver Version: <span class=\"hljs-number\">470.141<\/span><span class=\"hljs-number\">.03<\/span>   CUDA Version: <span class=\"hljs-number\">11.4<\/span>     |\n|-------------------------------+----------------------+----------------------+\n| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |\n| Fan  Temp  Perf  Pwr:Usage\/Cap|         Memory-Usage | GPU-Util  Compute M. |\n|                               |                      |               MIG M. |\n|===============================+======================+======================|\n|   <span class=\"hljs-number\">0<\/span>  Tesla P100-PCIE<span class=\"hljs-number\">-16<\/span>GB    Off| <span class=\"hljs-number\">00000000<\/span>:<span class=\"hljs-number\">00<\/span>:<span class=\"hljs-number\">04.0<\/span> Off |                    <span class=\"hljs-number\">0<\/span> |\n| N\/A   <span class=\"hljs-number\">30<\/span>C    P0    <span class=\"hljs-number\">26<\/span>W \/ <span class=\"hljs-number\">250<\/span>W |      <span class=\"hljs-number\">5<\/span>MiB \/ <span class=\"hljs-number\">16384<\/span>MiB |      <span class=\"hljs-number\">0<\/span>%      <span class=\"hljs-keyword\">Default<\/span> |\n|                               |                      |                  N\/A |\n+-------------------------------+----------------------+----------------------+<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>\u5b9e\u65f6\u76d1\u63a7<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u82e5\u8981\u5b9e\u65f6\u67e5\u770b GPU \u4f7f\u7528\u60c5\u51b5\uff0c\u53ef\u4f7f\u7528&nbsp;<code>-l<\/code>&nbsp;\u6216&nbsp;<code>-lms<\/code>&nbsp;\u9009\u9879\u6307\u5b9a\u5237\u65b0\u95f4\u9694\u3002\u4f8b\u5982\uff0c\u6bcf\u9694 1 \u79d2\u5237\u65b0\u4e00\u6b21\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">nvidia-smi -l 1<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u6309&nbsp;<code>Ctrl + C<\/code>&nbsp;\u53ef\u505c\u6b62\u76d1\u63a7\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. \u4f7f\u7528&nbsp;<\/strong><code><strong>gpustat<\/strong><\/code><strong>&nbsp;\u5de5\u5177\uff08\u9002\u7528\u4e8e NVIDIA GPU\uff09<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>gpustat<\/code>&nbsp;\u662f\u4e00\u4e2a\u57fa\u4e8e Python \u7684\u7b2c\u4e09\u65b9\u5de5\u5177\uff0c\u80fd\u4ee5\u66f4\u7f8e\u89c2\u548c\u6613\u8bfb\u7684\u65b9\u5f0f\u5c55\u793a GPU \u4fe1\u606f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u5b89\u88c5<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4f7f\u7528&nbsp;<code>pip<\/code>&nbsp;\u5b89\u88c5&nbsp;<code>gpustat<\/code>\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">python3<\/span><span class=\"hljs-selector-class\">.8<\/span> <span class=\"hljs-selector-tag\">-m<\/span> <span class=\"hljs-selector-tag\">pip<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-selector-tag\">gpustat<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>\u4f7f\u7528<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u7ec8\u7aef\u8f93\u5165&nbsp;<code>gpustat -i<\/code>&nbsp;\u547d\u4ee4\uff0c\u5373\u53ef\u5b9e\u65f6\u76d1\u63a7 GPU \u4f7f\u7528\u60c5\u51b5\uff0c\u9ed8\u8ba4\u5237\u65b0\u95f4\u9694\u4e3a 1 \u79d2\u3002<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">gpustat -i<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u793a\u4f8b\u8f93\u51fa\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">&#91;0] Tesla P100-PCIE-16GB | 30\u00b0C,   0 % |    5 \/ 16384 MB |<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">\u793a\u4f8b\u4ee3\u7801\uff1a<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import os\nimport subprocess\nimport time\nimport logging\nimport requests\nimport urllib.parse\nimport datetime\n\n<span class=\"hljs-comment\"># \u914d\u7f6e\u6839\u6587\u4ef6\u5939<\/span>\nroot_folder = <span class=\"hljs-string\">\"\/root\/audio_files\"<\/span>\n\n<span class=\"hljs-comment\"># \u914d\u7f6e\u65e5\u5fd7\u6587\u4ef6\u8def\u5f84<\/span>\nlog_file = os.path.join(root_folder, <span class=\"hljs-string\">\"transcription.log\"<\/span>)\n\n<span class=\"hljs-comment\"># \u914d\u7f6e\u65e5\u5fd7\u8bb0\u5f55<\/span>\nlogger = logging.getLogger(__name__)\nlogger.setLevel(logging.INFO)\n\n<span class=\"hljs-comment\"># \u521b\u5efa\u6587\u4ef6\u5904\u7406\u5668<\/span>\nfile_handler = logging.FileHandler(log_file)\nfile_handler.setLevel(logging.INFO)\n\n<span class=\"hljs-comment\"># \u521b\u5efa\u63a7\u5236\u53f0\u5904\u7406\u5668<\/span>\nconsole_handler = logging.StreamHandler()\nconsole_handler.setLevel(logging.INFO)\n\n<span class=\"hljs-comment\"># \u5b9a\u4e49\u65e5\u5fd7\u683c\u5f0f<\/span>\nformatter = logging.Formatter(<span class=\"hljs-string\">'%(asctime)s - %(levelname)s - %(message)s'<\/span>)\nfile_handler.setFormatter(formatter)\nconsole_handler.setFormatter(formatter)\n\n<span class=\"hljs-comment\"># \u5c06\u5904\u7406\u5668\u6dfb\u52a0\u5230\u65e5\u5fd7\u8bb0\u5f55\u5668<\/span>\nlogger.addHandler(file_handler)\nlogger.addHandler(console_handler)\n\n<span class=\"hljs-comment\"># \u8bed\u8a00\u3001\u6a21\u578b\u548c\u7ebf\u7a0b\u6570\u914d\u7f6e<\/span>\nlanguage = <span class=\"hljs-string\">\"Japanese\"<\/span>\nmodel_name = <span class=\"hljs-string\">\"medium\"<\/span>\nthreads = <span class=\"hljs-number\">4<\/span>  <span class=\"hljs-comment\"># \u8bbe\u7f6e\u7ebf\u7a0b\u6570<\/span>\n\n<span class=\"hljs-comment\"># \u652f\u6301\u7684\u97f3\u9891\u6587\u4ef6\u6269\u5c55\u540d<\/span>\naudio_extensions = (<span class=\"hljs-string\">\".mp3\"<\/span>, <span class=\"hljs-string\">\".wav\"<\/span>, <span class=\"hljs-string\">\".ogg\"<\/span>, <span class=\"hljs-string\">\".flac\"<\/span>)\n\n<span class=\"hljs-comment\"># \u8f6c\u5f55\u97f3\u9891\u6587\u4ef6\u5e76\u4fdd\u5b58\u7ed3\u679c<\/span>\ndef transcribe_audio(audio_file, sub_folder_path):\n    <span class=\"hljs-comment\"># \u83b7\u53d6\u6587\u4ef6\u540d\uff08\u4e0d\u5305\u542b\u6269\u5c55\u540d\uff09<\/span>\n    file_name = os.path.splitext(os.path.basename(audio_file))&#91;<span class=\"hljs-number\">0<\/span>]\n    <span class=\"hljs-comment\"># \u751f\u6210\u6bcf\u4e2a\u5b50\u6587\u4ef6\u5939\u4e0b\u7684\u8f93\u51fa\u6587\u4ef6\u5939\u8def\u5f84<\/span>\n    output_folder = os.path.join(sub_folder_path, <span class=\"hljs-string\">\"TranscriptionResults\"<\/span>)\n    <span class=\"hljs-comment\"># \u68c0\u67e5\u8f93\u51fa\u6587\u4ef6\u5939\u662f\u5426\u5b58\u5728\uff0c\u4e0d\u5b58\u5728\u5219\u521b\u5efa<\/span>\n    <span class=\"hljs-keyword\">if<\/span> not os.path.isdir(output_folder):\n        os.makedirs(output_folder)\n    <span class=\"hljs-comment\"># \u751f\u6210\u8f93\u51fa\u6587\u4ef6\u7684\u57fa\u672c\u8def\u5f84<\/span>\n    output_base_path = os.path.join(output_folder, file_name)\n\n    <span class=\"hljs-comment\"># \u8bb0\u5f55\u5f00\u59cb\u65f6\u95f4<\/span>\n    start_time = time.time()\n    logger.info(f<span class=\"hljs-string\">\"\u6b63\u5728\u8f6c\u5f55\u6587\u4ef6: {audio_file}\"<\/span>)\n    <span class=\"hljs-keyword\">try<\/span>:\n        <span class=\"hljs-comment\"># \u901a\u8fc7 subprocess \u8c03\u7528 Whisper \u547d\u4ee4<\/span>\n        command = &#91;\n            <span class=\"hljs-string\">\"whisper\"<\/span>, audio_file,\n            <span class=\"hljs-string\">\"--language\"<\/span>, language,\n            <span class=\"hljs-string\">\"--model\"<\/span>, model_name,\n            <span class=\"hljs-string\">\"--threads\"<\/span>, str(threads),\n            <span class=\"hljs-string\">\"--output_dir\"<\/span>, output_folder  <span class=\"hljs-comment\"># \u6307\u5b9a\u8f93\u51fa\u76ee\u5f55<\/span>\n        ]\n\n        <span class=\"hljs-comment\"># \u6267\u884c\u547d\u4ee4<\/span>\n        subprocess.run(command, check=<span class=\"hljs-keyword\">True<\/span>)\n\n        <span class=\"hljs-comment\"># \u8bb0\u5f55\u7ed3\u675f\u65f6\u95f4\u5e76\u8ba1\u7b97\u8f6c\u5f55\u65f6\u95f4<\/span>\n        end_time = time.time()\n        elapsed_time = end_time - start_time\n        logger.info(f<span class=\"hljs-string\">\"\u8f6c\u5f55\u5b8c\u6210\uff0c\u6240\u6709\u7ed3\u679c\u5df2\u4fdd\u5b58\u5230: {output_folder}\"<\/span>)\n        logger.info(f<span class=\"hljs-string\">\"\u6587\u4ef6 {audio_file} \u7684\u8f6c\u5f55\u82b1\u8d39\u4e86 {elapsed_time:.2f} \u79d2\"<\/span>)\n    except subprocess.CalledProcessError <span class=\"hljs-keyword\">as<\/span> e:\n        logger.error(f<span class=\"hljs-string\">\"\u8f6c\u5f55\u6587\u4ef6 {audio_file} \u65f6\u51fa\u9519: {e}\"<\/span>)\n    <span class=\"hljs-keyword\">finally<\/span>:\n        pass\n\n<span class=\"hljs-comment\"># \u683c\u5f0f\u5316\u603b\u65f6\u95f4\u4e3a \"\u5929:\u5c0f\u65f6:\u5206\u949f:\u79d2\" \u683c\u5f0f<\/span>\ndef format_total_time(seconds):\n    days = seconds <span class=\"hljs-comment\">\/\/ (24 * 3600)<\/span>\n    hours = (seconds % (<span class=\"hljs-number\">24<\/span> * <span class=\"hljs-number\">3600<\/span>)) <span class=\"hljs-comment\">\/\/ 3600<\/span>\n    minutes = (seconds % <span class=\"hljs-number\">3600<\/span>) <span class=\"hljs-comment\">\/\/ 60<\/span>\n    seconds = seconds % <span class=\"hljs-number\">60<\/span>\n    <span class=\"hljs-keyword\">return<\/span> f<span class=\"hljs-string\">\"{int(days)}\u5929 {int(hours)}\u5c0f\u65f6 {int(minutes)}\u5206\u949f {int(seconds)}\u79d2\"<\/span>\n\n<span class=\"hljs-comment\"># \u63a8\u9001\u6d88\u606f\u5230PushDeer<\/span>\ndef push_to_pushdeer(message, api_key, push_deer_url, push_title, push_type):\n    timestamp = datetime.datetime.now().strftime(<span class=\"hljs-string\">\"%Y-%m-%d %H:%M:%S\"<\/span>)\n    <span class=\"hljs-keyword\">try<\/span>:\n        encoded_message = urllib.parse.quote(message, safe=<span class=\"hljs-string\">''<\/span>)\n        request_body = {\n            <span class=\"hljs-string\">\"pushkey\"<\/span>: api_key,\n            <span class=\"hljs-string\">\"text\"<\/span>: f<span class=\"hljs-string\">\"{push_title} {timestamp}\"<\/span>,\n            <span class=\"hljs-string\">\"desp\"<\/span>: encoded_message,\n            <span class=\"hljs-string\">\"type\"<\/span>: push_type\n        }\n        response = requests.post(push_deer_url, data=request_body)\n\n        <span class=\"hljs-keyword\">if<\/span> response.status_code == <span class=\"hljs-number\">200<\/span>:\n            logger.info(<span class=\"hljs-string\">\"\u63a8\u9001\u6210\u529f,\u65f6\u95f4\u4e3a\uff1a{}\"<\/span>.format(timestamp))\n        <span class=\"hljs-keyword\">else<\/span>:\n            logger.error(f<span class=\"hljs-string\">\"\u63a8\u9001\u5931\u8d25\uff0c\u72b6\u6001\u7801: {response.status_code}\"<\/span>)\n    except <span class=\"hljs-keyword\">Exception<\/span> <span class=\"hljs-keyword\">as<\/span> e:\n        logger.error(f<span class=\"hljs-string\">\"\u63a8\u9001\u5931\u8d25\uff1a{e}\"<\/span>)\n\n<span class=\"hljs-comment\"># \u4e3b\u7a0b\u5e8f<\/span>\n<span class=\"hljs-keyword\">if<\/span> __name__ == <span class=\"hljs-string\">\"__main__\"<\/span>:\n    <span class=\"hljs-comment\"># \u6536\u96c6\u6240\u6709\u97f3\u9891\u6587\u4ef6\u8def\u5f84\u53ca\u5176\u6240\u5728\u5b50\u6587\u4ef6\u5939\u8def\u5f84<\/span>\n    audio_file_info = &#91;]\n    <span class=\"hljs-keyword\">for<\/span> sub_folder in os.listdir(root_folder):\n        sub_folder_path = os.path.join(root_folder, sub_folder)\n        <span class=\"hljs-keyword\">if<\/span> os.path.isdir(sub_folder_path):\n            <span class=\"hljs-keyword\">for<\/span> root_dir, _, files in os.walk(sub_folder_path):\n                <span class=\"hljs-keyword\">for<\/span> file in files:\n                    <span class=\"hljs-keyword\">if<\/span> file.lower().endswith(audio_extensions):\n                        audio_file = os.path.join(root_dir, file)\n                        audio_file_info.append((audio_file, sub_folder_path))\n\n    <span class=\"hljs-comment\"># \u8bb0\u5f55\u603b\u5f00\u59cb\u65f6\u95f4<\/span>\n    total_start_time = time.time()\n\n    <span class=\"hljs-comment\"># \u4f7f\u7528\u7ebf\u7a0b\u6c60\u5e76\u53d1\u5904\u7406\u97f3\u9891\u8f6c\u5f55<\/span>\n    <span class=\"hljs-keyword\">for<\/span> audio_file, sub_folder_path in audio_file_info:\n        transcribe_audio(audio_file, sub_folder_path)\n\n    <span class=\"hljs-comment\"># \u8bb0\u5f55\u603b\u7ed3\u675f\u65f6\u95f4<\/span>\n    total_end_time = time.time()\n    total_elapsed_time = total_end_time - total_start_time\n\n    <span class=\"hljs-comment\"># \u8f93\u51fa\u603b\u8f6c\u5f55\u65f6\u95f4<\/span>\n    logger.info(f<span class=\"hljs-string\">\"\\n\u6240\u6709\u97f3\u9891\u6587\u4ef6\u7684\u8f6c\u5f55\u5168\u90e8\u5b8c\u6210\uff0c\u82b1\u8d39\u4e86 {format_total_time(total_elapsed_time)}\"<\/span>)\n\n    <span class=\"hljs-comment\"># \u63a8\u9001\u6d88\u606f<\/span>\n    message = f<span class=\"hljs-string\">\"\u6240\u6709\u97f3\u9891\u6587\u4ef6\u8f6c\u5f55\u5df2\u5b8c\u6210\uff0c\u5171\u82b1\u8d39\u4e86 {format_total_time(total_elapsed_time)}\"<\/span>\n    api_key = <span class=\"hljs-string\">\"PDU1TVFy1tBulCz7Hq1ajeFqe6ccPwSbgw09x\"<\/span>\n    push_deer_url = <span class=\"hljs-string\">\"http:\/\/43.153.151.226:8800\/message\/push\"<\/span>\n    push_title = <span class=\"hljs-string\">\"\u8f6c\u5f55\u52a8\u6001\u63a8\u9001\"<\/span>\n    push_type = <span class=\"hljs-string\">\"markdown\"<\/span>\n\n    push_to_pushdeer(message, api_key, push_deer_url, push_title, push_type)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>","protected":false},"excerpt":{"rendered":"<p>Whisper \u662f OpenAI \u5f00\u53d1\u7684\u4e00\u4e2a\u81ea\u52a8\u8bed\u97f3\u8bc6\u522b\uff08ASR\uff09\u7cfb\u7edf\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e0d\u540c\u5927\u5c0f\u7684\u9884\u8bad\u7ec3\u6a21\u578b\uff0c\u6a21\u578b\u8d8a\u5927 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_aikuto_target_date":"","footnotes":""},"categories":[2],"tags":[33,30,32],"class_list":["post-1155","post","type-post","status-publish","format-standard","hentry","category-sketches","tag-asr","tag-whisper","tag-32"],"_links":{"self":[{"href":"https:\/\/aikuto.com\/index.php?rest_route=\/wp\/v2\/posts\/1155","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aikuto.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aikuto.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aikuto.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aikuto.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1155"}],"version-history":[{"count":2,"href":"https:\/\/aikuto.com\/index.php?rest_route=\/wp\/v2\/posts\/1155\/revisions"}],"predecessor-version":[{"id":1159,"href":"https:\/\/aikuto.com\/index.php?rest_route=\/wp\/v2\/posts\/1155\/revisions\/1159"}],"wp:attachment":[{"href":"https:\/\/aikuto.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aikuto.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aikuto.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}