vosk-ASR freeswitch调用[AI人工智能(五十六)]—东方仙盟

核心代码

调用逻辑

FreeSWITCH 是一款开源的软交换平台 ,核心用于处理语音 / 视频通话、实时通信(类似电话交换机的数字化版本)。东方仙盟比喻:FreeSWITCH 如同「仙盟总坛」,掌管所有仙门的传讯(通话)、法阵(通信协议)调度;Vosk ASR 是总坛下设的「听言司」,专门负责破译语音密语(语音转文字);mod_vosk 插件则是「传讯令旗」,让仙盟总坛能直接调用听言司的能力。

FreeSWITCH 调用 Vosk ASR 的 Client 示例代码

以下是简化版 FreeSWITCH Lua 客户端代码(FreeSWITCH 核心脚本语言),用于在通话中调用 Vosk ASR 识别语音:

lua

复制代码
-- 【仙盟总坛-传讯指令】:加载 Vosk ASR 插件(竖起传讯令旗)
api = freeswitch.API()
vosk_load_result = api:execute("load mod_vosk")
if vosk_load_result ~= "OK" then
    freeswitch.consoleLog("ERR", "【仙盟总坛】听言司令旗加载失败:" .. vosk_load_result .. "\n")
    return
end

-- 【仙盟总坛-配置听言司】:设置 Vosk 服务地址、模型(给听言司下达密令)
vosk_config = {
    server_url = "ws://localhost:2700",  -- 听言司驻地(Vosk 服务地址)
    model = "model-en-us",              -- 听言司破译密典(语音模型)
    sample_rate = 16000,                -- 密语频率(语音采样率,必须与 Vosk 一致)
    timeout = 5000                      -- 传讯超时(等待听言司回复的时间)
}

-- 【仙盟总坛-启动听言司】:在通话中实时识别语音(调用听言司破译密语)
function start_vosk_asr(session)
    -- 1. 检查通话状态(确认传讯通道畅通)
    if not session:ready() then
        freeswitch.consoleLog("ERR", "【仙盟总坛】传讯通道未就绪\n")
        return
    end

    -- 2. 下达指令:让听言司开始监听通话语音(开启密语破译)
    session:execute("vosk_asr", string.format(
        "start %s %s %d", 
        vosk_config.server_url, 
        vosk_config.model, 
        vosk_config.sample_rate
    ))

    -- 3. 实时接收听言司的破译结果(持续获取密语解读)
    session:setEventCallback(function(event)
        local event_name = event:getHeader("Event-Name")
        -- 捕获 Vosk ASR 识别结果事件(听言司传回的破译密函)
        if event_name == "VOSK_ASR_RESULT" then
            local asr_text = event:getHeader("Vosk-ASR-Text")
            freeswitch.consoleLog("INFO", "【听言司-破译结果】:" .. asr_text .. "\n")
            -- 将识别结果发送给通话对方(转发密函)
            session:say(asr_text, "en", "US")
        end
    end)

    -- 4. 通话结束后停止听言司(收回传讯令旗)
    session:onHangup(function()
        session:execute("vosk_asr", "stop")
        freeswitch.consoleLog("INFO", "【仙盟总坛】听言司已停止工作\n")
    end)

    -- 保持通话 10 秒,让听言司完成破译
    session:sleep(10000)
end

-- 【启动仙盟传讯流程】:绑定到通话会话
session = freeswitch.Session()
if session:ready() then
    freeswitch.consoleLog("INFO", "【仙盟总坛】启动听言司破译任务\n")
    start_vosk_asr(session)
else
    freeswitch.consoleLog("ERR", "【仙盟总坛】通话会话未就绪\n")
end
  • mod_vosk 插件的作用 :该插件是 FreeSWITCH 与 Vosk ASR 之间的「桥梁」(仙盟传讯令旗),无需手动编写复杂的 WebSocket 通信代码,只需通过 FreeSWITCH 内置指令(如 vosk_asr start)即可调用 Vosk 能力。

核心调用逻辑

  • FreeSWITCH 负责采集通话中的语音数据;
  • mod_vosk 插件将语音数据转发至 Vosk ASR 服务;
  • Vosk 完成语音识别后,通过插件将文本结果返回给 FreeSWITCH;
  • FreeSWITCH 可将识别结果用于语音播报、日志存储、智能交互等场景。

环境依赖

  • 需先编译安装 mod_vosk 插件到 FreeSWITCH 环境;
  • 需部署 Vosk ASR 服务(本地或远程),确保 FreeSWITCH 能访问到 Vosk 的 WebSocket 地址。

东方仙盟:拥抱知识开源,共筑数字新生态

在全球化与数字化浪潮中,东方仙盟始终秉持开放协作、知识共享的理念,积极拥抱开源技术与开放标准。我们相信,唯有打破技术壁垒、汇聚全球智慧,才能真正推动行业的可持续发展。

开源赋能中小商户:通过将前端异常检测、跨系统数据互联等核心能力开源化,东方仙盟为全球中小商户提供了低成本、高可靠的技术解决方案,让更多商家能够平等享受数字转型的红利。

共建行业标准:我们积极参与国际技术社区,与全球开发者、合作伙伴共同制定开放协议 与技术规范,推动跨境零售、文旅、餐饮等多业态的系统互联互通,构建更加公平、高效的数字生态。

知识普惠,共促发展:通过开源社区 、技术文档与培训体系,东方仙盟致力于将前沿技术转化为可落地的行业实践,赋能全球合作伙伴,共同培育创新人才,推动数字经济 的普惠式增长

阿雪技术观

在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者。无论是分享代码、撰写技术博客,还是参与开源项目 维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基 生命,为科技进步添砖加瓦。

Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets , hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology

相关推荐
踏浪无痕2 小时前
聊聊最近很火的"小龙虾":AI 应用的下一步是什么?
人工智能
chaofan9802 小时前
2026 轻量模型三国杀:Flash-Lite vs GPT-4.1 Nano vs Haiku,技术选型到底该站谁?
前端·人工智能·microsoft
BB学长2 小时前
LBM vs FVM:谁才是 CFD 的未来?
人工智能·算法·机器学习
AIDF20262 小时前
AI 芯片推理适配踩坑记:从 GPU 到国产算力的迁移思路
人工智能
Zzj_tju2 小时前
AI+医疗实战:影像+文本报告怎么结合?从单模态分类到多模态医疗 AI 系统设计
人工智能·分类·数据挖掘
智能交通技术2 小时前
iTSTech:自动驾驶、无人机与机器人在物流中的协同应用场景分析 2026
人工智能·机器学习·机器人·自动驾驶·无人机
Learn Beyond Limits2 小时前
循环神经网络的问题:梯度消失与梯度爆炸|Problems with RNNs: Vanishing and Exploding Gradients
人工智能·rnn·深度学习·神经网络·机器学习·自然语言处理·nlp
Swift社区2 小时前
传统 App 架构,为什么不适合 AI 应用
人工智能·架构
ECT-OS-JiuHuaShan2 小时前
硅基智能的本质:高维响应器
人工智能