<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>FunASR on Harry AI</title><link>https://harryai.cc/tags/funasr/</link><description>Recent content in FunASR on Harry AI</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><managingEditor>harryliuwx888@gmail.com (Harry)</managingEditor><webMaster>harryliuwx888@gmail.com (Harry)</webMaster><copyright>Copyright © 深圳市网旭科技有限公司。&lt;a href="https://beian.miit.gov.cn/" target="_blank">粤ICP备14077691号&lt;/a></copyright><lastBuildDate>Thu, 25 Jul 2024 20:30:01 +0800</lastBuildDate><atom:link href="https://harryai.cc/tags/funasr/index.xml" rel="self" type="application/rss+xml"/><item><title>FunASR实时语音识别部署和使用</title><link>https://harryai.cc/post/realtime-funasr/</link><pubDate>Thu, 25 Jul 2024 20:30:01 +0800</pubDate><author>harryliuwx888@gmail.com (Harry)</author><guid>https://harryai.cc/post/realtime-funasr/</guid><description>&lt;p>FunASR 模型的整理和集成，Docker一键启动，能够&lt;strong>实时识别语音&lt;/strong>输入，准确度非常高&lt;/p>
&lt;p>项目地址：&lt;a href="https://github.com/harry0703/AudioNotes">https://github.com/harry0703/AudioNotes&lt;/a>&lt;/p>
&lt;p>FunASR开源仓库: &lt;a href="http://localhost:15433/">https://github.com/modelscope/FunASR&lt;/a>&lt;/p>
&lt;h2 id="效果展示">效果展示&lt;/h2>
&lt;img src="https://harryai.cc/post/realtime-funasr/1.jpg" alt="image">&lt;h2 id="使用方法">使用方法&lt;/h2>
&lt;h3 id="docker部署">Docker部署🐳&lt;/h3>
&lt;blockquote>
&lt;p>确保已经安装了Docker软件，没有的话，从官网下载安装 &lt;a href="https://www.docker.com/products/docker-desktop/">https://www.docker.com/products/docker-desktop/&lt;/a>&lt;/p>&lt;/blockquote>
&lt;p>复制以下代码到终端运行即可&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-1">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-1">1&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-2">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-2">2&lt;/a>
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl -fsSL https://harryai.cc/realtime-funasr/docker-compose.yml -o docker-compose.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>docker-compose up
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;blockquote>
&lt;p>注意：第一次启动过程可能会有点长，需要从魔搭下载4个模型&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.modelscope.cn/models/damo/speech_fsmn_vad_zh-cn-16k-common-onnx/summary">FSMN-VAD模型&lt;/a>,&lt;/li>
&lt;li>&lt;a href="https://www.modelscope.cn/models/damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online-onnx/summary">Paraformer-lagre实时模型&lt;/a>,&lt;/li>
&lt;li>&lt;a href="https://www.modelscope.cn/models/damo/punc_ct-transformer_zh-cn-common-vad_realtime-vocab272727-onnx/summary">CT-Transformer标点预测模型&lt;/a>,&lt;/li>
&lt;li>&lt;a href="https://www.modelscope.cn/models/thuduj12/fst_itn_zh/summary">基于FST的中文ITN&lt;/a>&lt;/li>
&lt;/ul>&lt;/blockquote>
&lt;p>&lt;strong>docker 启动后，访问 &lt;a href="http://localhost:10096/">http://localhost:10096/&lt;/a>&lt;/strong>&lt;/p>
&lt;h2 id="-如果你想了解更多可以往下看">👉👉 如果你想了解更多，可以往下看&lt;/h2>
&lt;h3 id="参数说明">参数说明&lt;/h3>
&lt;h4 id="-模型模式">① 模型模式&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>2pass&lt;/strong>: （默认）实时语音识别，并且句尾采用离线模型进行纠错（&lt;strong>准确度更高&lt;/strong>）&lt;/li>
&lt;li>online: 实时语音识别&lt;/li>
&lt;li>offline: 一句话识别&lt;/li>
&lt;/ul>
&lt;h4 id="-逆文本标准化itn">② 逆文本标准化（ITN）&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>是&lt;/strong>: （默认） 表示进行逆文本标准化&lt;/li>
&lt;li>否: 表示不进行逆文本标准化&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>逆文本标准化（Inverse Text Normalization, ITN）&lt;/strong> 是语音识别和自然语言处理领域的一种技术，用于将自动语音识别（ASR）系统生成的文本转化为更自然和可读的格式。这是对文本标准化（Text
Normalization, TN）的逆过程。&lt;/p>
&lt;p>&lt;strong>逆文本标准化的目的&lt;/strong>&lt;/p>
&lt;p>当语音被转换为文本时，ASR 系统通常会输出一种更标准化的文本形式。例如：&lt;/p>
&lt;ul>
&lt;li>数字 &amp;ldquo;123&amp;rdquo; 可能会被识别为 &amp;ldquo;一二三&amp;rdquo; 或 &amp;ldquo;123&amp;rdquo;。&lt;/li>
&lt;li>日期 &amp;ldquo;2024年7月25日&amp;rdquo; 可能会被识别为 &amp;ldquo;二零二四年七月二十五日&amp;rdquo; 或 &amp;ldquo;2024年7月25日&amp;rdquo;。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>这些输出虽然标准化，但不一定是人们习惯书写或阅读的格式。&lt;/strong>
ITN 的作用是将这些标准化的文本转换回更自然、更符合书面习惯的形式。例如：&lt;/p>
&lt;ul>
&lt;li>&amp;ldquo;一二三&amp;rdquo; 转换为 &amp;ldquo;123&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;二零二四年七月二十五日&amp;rdquo; 转换为 &amp;ldquo;2024年7月25日&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;五千七百六十三&amp;rdquo; 转换为 &amp;ldquo;5763&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;h2 id="如果你想使用api请参考以下文档">👉👉如果你想使用API，请参考以下文档&lt;/h2>
&lt;h3 id="系统架构图">系统架构图&lt;/h3>
&lt;img src="https://harryai.cc/post/realtime-funasr/2.jpg" alt="image">&lt;blockquote>
&lt;p>注意：&lt;/p>
&lt;ol>
&lt;li>10096端口为网页界面&lt;/li>
&lt;li>10095端口为websocket通信端口
&amp;gt; &lt;img src="https://harryai.cc/post/realtime-funasr/3.jpg" alt="image">&lt;/li>
&lt;/ol>&lt;/blockquote>
&lt;h3 id="-从客户端往服务端发送数据">🅰️ 从客户端往服务端发送数据&lt;/h3>
&lt;h4 id="消息格式">消息格式&lt;/h4>
&lt;p>配置参数用&lt;code>json&lt;/code>，音频数据采用&lt;code>bytes&lt;/code>&lt;/p>
&lt;h4 id="-首次通信">① 首次通信&lt;/h4>
&lt;p>客户端发送配置参数&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-1">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-1"> 1&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-2">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-2"> 2&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-3">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-3"> 3&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-4">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-4"> 4&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-5">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-5"> 5&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-6">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-6"> 6&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-7">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-7"> 7&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-8">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-8"> 8&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-9">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-9"> 9&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-10">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-10">10&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-11">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-11">11&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-12">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-12">12&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-13">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-13">13&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-14">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-14">14&lt;/a>
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;chunk_size&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ae81ff">5&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ae81ff">10&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;wav_name&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;h5&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;is_speaking&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;wav_format&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;pcm&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;chunk_interval&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;itn&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;mode&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;2pass&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;hotwords&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;阿里巴巴\&amp;#34;:20,\&amp;#34;hello world\&amp;#34;:40}&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>参数说明：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;code>wav_name&lt;/code>：表示需要推理音频文件名&lt;/li>
&lt;li>&lt;code>wav_format&lt;/code>：表示音视频文件后缀名，只支持pcm音频流&lt;/li>
&lt;li>&lt;code>is_speaking&lt;/code>：表示断句尾点，例如，vad切割点，或者一条wav结束&lt;/li>
&lt;li>&lt;code>chunk_size&lt;/code>：表示流式模型latency配置，&lt;code>[5,10,5]&lt;/code>，表示当前音频为600ms，并且回看300ms，又看300ms。&lt;/li>
&lt;li>&lt;code>hotwords&lt;/code>：如果使用热词，需要向服务端发送热词数据（字符串），格式为 &amp;ldquo;{&amp;ldquo;阿里巴巴&amp;rdquo;:20,&amp;ldquo;通义实验室&amp;rdquo;:30}&amp;rdquo;&lt;/li>
&lt;li>&lt;code>itn&lt;/code>: 设置是否使用itn，默认 &lt;code>true&lt;/code>&lt;/li>
&lt;/ul>
&lt;h4 id="-发送音频数据">② 发送音频数据&lt;/h4>
&lt;p>直接将音频数据移除头部信息后，使用 bytes 数据发送，支持音频采样率为8000&lt;/p>
&lt;h4 id="-发送结束标志">③ 发送结束标志&lt;/h4>
&lt;p>音频数据发送结束后，需要发送结束标志&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-1">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-1">1&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-2">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-2">2&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-3">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-3">3&lt;/a>
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;is_speaking&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="-从服务端往客户端发数据">🅱️ 从服务端往客户端发数据&lt;/h3>
&lt;h4 id="发送识别结果">发送识别结果&lt;/h4>
&lt;p>识别中&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-1">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-1">1&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-2">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-2">2&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-3">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-3">3&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-4">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-4">4&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-5">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-5">5&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-6">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-6">6&lt;/a>
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;is_final&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;mode&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;2pass-online&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;text&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;阿里&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;wav_name&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;h5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>识别结束&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-1">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-1"> 1&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-2">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-2"> 2&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-3">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-3"> 3&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-4">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-4"> 4&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-5">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-5"> 5&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-6">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-6"> 6&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-7">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-7"> 7&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-8">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-8"> 8&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-9">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-9"> 9&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-10">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-10">10&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-11">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-11">11&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-12">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-12">12&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-13">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-13">13&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-14">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-14">14&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-4-15">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-4-15">15&lt;/a>
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;is_final&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;mode&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;2pass-offline&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;stamp_sents&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;end&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">4385&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;punc&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;start&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">820&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;text_seg&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;阿 里 开 源 的 语 音 识 别 真 是 太 牛 了&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;text&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;阿里开源的语音识别真是太牛了&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;timestamp&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;[[820,1060],[1060,1319],[1319,1480],[1480,1760],[1760,2220],[2220,2420],[2420,2659],[2659,2820],[2820,3300],[3300,3480],[3480,3659],[3659,3820],[3820,4060],[4060,4385]]&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;wav_name&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;h5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>参数说明：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;code>mode&lt;/code>：推理模式
&lt;ul>
&lt;li>2pass-online：表示实时识别结果&lt;/li>
&lt;li>2pass-offline：表示2遍修正识别结果&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>wav_name&lt;/code>：需要推理音频文件名&lt;/li>
&lt;li>&lt;code>text&lt;/code>：语音识别输出文本&lt;/li>
&lt;/ul>
&lt;h2 id="踩坑">👉👉踩坑&lt;/h2>
&lt;h3 id="报错录音open失败浏览器禁止不安全页面录音">报错：录音open失败：浏览器禁止不安全页面录音&lt;/h3>
&lt;p>如果你是在&lt;strong>其他电脑或服务器上部署的服务，而不是在本地&lt;/strong>，当你打开页面后，可能会遇到这个问题。&lt;/p>
&lt;p>假设服务器IP是 &lt;code>192.168.1.170&lt;/code>，打开的页面是 http://192.168.1.170:10096/&lt;/p>
&lt;p>&lt;strong>解决方法：&lt;/strong>
&lt;img src="https://harryai.cc/post/realtime-funasr/4.jpg" alt="image">&lt;/p>
&lt;h4 id="chrome浏览器">Chrome浏览器&lt;/h4>
&lt;ul>
&lt;li>在浏览器地址栏输入 &lt;code>chrome://flags/#unsafely-treat-insecure-origin-as-secure&lt;/code>&lt;/li>
&lt;li>把 &lt;code>http://192.168.1.170:10096/&lt;/code> 添加到输入框内&lt;/li>
&lt;li>将 &lt;code>Insecure origins treated as secure&lt;/code> 设置为 &lt;code>Enabled&lt;/code>&lt;/li>
&lt;li>重启浏览器&lt;/li>
&lt;/ul>
&lt;h4 id="edge浏览器">Edge浏览器&lt;/h4>
&lt;ul>
&lt;li>在浏览器地址栏输入 &lt;code>edge://flags/#unsafely-treat-insecure-origin-as-secure&lt;/code>&lt;/li>
&lt;li>把 &lt;code>http://192.168.1.170:10096/&lt;/code> 添加到输入框内&lt;/li>
&lt;li>将 &lt;code>Insecure origins treated as secure&lt;/code> 设置为 &lt;code>Enabled&lt;/code>&lt;/li>
&lt;li>重启浏览器&lt;/li>
&lt;/ul></description></item><item><title>如何利用本地模型，将音视频整理成一份结构化的Markdown笔记</title><link>https://harryai.cc/post/audio-notes/</link><pubDate>Fri, 19 Jul 2024 15:16:01 +0800</pubDate><author>harryliuwx888@gmail.com (Harry)</author><guid>https://harryai.cc/post/audio-notes/</guid><description>&lt;p>项目地址：&lt;a href="https://github.com/harry0703/AudioNotes">https://github.com/harry0703/AudioNotes&lt;/a>&lt;/p>
&lt;h2 id="基于-funasr-和-qwen2-构建的音视频转结构化笔记系统">基于 FunASR 和 Qwen2 构建的音视频转结构化笔记系统&lt;/h2>
&lt;p>能够快速提取音视频的内容，并且调用大模型进行整理，成为一份结构化的markdown笔记，方便快速阅读&lt;/p>
&lt;p>FunASR: &lt;a href="http://localhost:15433/">https://github.com/modelscope/FunASR&lt;/a>&lt;/p>
&lt;p>Qwen2: &lt;a href="http://localhost:15433/">https://ollama.com/library/qwen2&lt;/a>&lt;/p>
&lt;h2 id="效果展示">效果展示&lt;/h2>
&lt;h3 id="音视频识别和整理">音视频识别和整理&lt;/h3>
&lt;img src="https://harryai.cc/post/audio-notes/1.jpg" alt="image">&lt;h3 id="与音视频内容对话">与音视频内容对话&lt;/h3>
&lt;img src="https://harryai.cc/post/audio-notes/2.jpg" alt="image">&lt;h2 id="使用方法">使用方法&lt;/h2>
&lt;h3 id="-安装-ollama">① 安装 Ollama&lt;/h3>
&lt;p>下载对应系统的 Ollama 安装包进行安装&lt;/p>
&lt;p>&lt;a href="http://localhost:15433/">https://ollama.com/download&lt;/a>&lt;/p>
&lt;h3 id="-拉取模型">② 拉取模型&lt;/h3>
&lt;p>我以 &lt;code>阿里的千问2 7b&lt;/code> 为例 &lt;a href="http://localhost:15433/">https://ollama.com/library/qwen2&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-0-1">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-0-1">1&lt;/a>
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>ollama pull qwen2:7b
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="docker部署推荐">Docker部署（推荐）🐳&lt;/h3>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-1">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-1">1&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-1-2">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-1-2">2&lt;/a>
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>curl -fsSL https://harryai.cc/audio-notes/docker-compose.yml -o docker-compose.yml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>docker-compose up
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>docker 启动后，访问 &lt;a href="http://localhost:15433/">http://localhost:15433/&lt;/a>&lt;/p>
&lt;blockquote>
&lt;p>登录账号为 admin，密码为 admin （可以在 docker-compose.yml 文件里面修改）&lt;/p>&lt;/blockquote>
&lt;h3 id="本地部署-">本地部署 📦&lt;/h3>
&lt;p>需要有可访问的 postgresql 数据库&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-1">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-1">1&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-2">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-2">2&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-3">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-3">3&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-4">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-4">4&lt;/a>
&lt;/span>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-2-5">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-2-5">5&lt;/a>
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>conda create -n AudioNotes python&lt;span style="color:#f92672">=&lt;/span>3.10 -y
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>conda activate AudioNotes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>git clone https://github.com/harry0703/AudioNotes.git
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cd AudioNotes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>pip install -r requirements.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>将 &lt;code>.env.example&lt;/code> 重命名为 &lt;code>.env&lt;/code>，修改相关配置信息&lt;/p>
&lt;div class="highlight">&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;">&lt;tr>&lt;td style="vertical-align:top;padding:0;margin:0;border:0;">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code>&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f" id="hl-3-1">&lt;a style="outline:none;text-decoration:none;color:inherit" href="#hl-3-1">1&lt;/a>
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%">
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>chainlit run main.py
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>服务启动后，访问 http://localhost:8000/&lt;/p>
&lt;blockquote>
&lt;p>登录账号为 admin，密码为 admin （可以在 docker-compose.yml 文件里面修改）&lt;/p>&lt;/blockquote></description></item></channel></rss>