当前位置: 首页 > article >正文

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

核心代码目录结构完整代码python#!/usr/bin/python3 from asterisk.agi import * import os from websocket import create_connection import json import traceback AUDIO_FD 3 CONTENT_TYPE audio/l16; rate8000; channels1 ACCEPT audio/pcm def process_chunk(agi, ws, buf): agi.verbose(Processing chunk) ws.send_binary(buf) res json.loads(ws.recv()) agi.verbose(Result: str(res)) if result in res: text .join([w[word] for w in res[result]]) os.system(espeak -w /tmp/response22.wav \ text.encode(utf-8) \) os.system(sox /tmp/response22.wav -r 8000 /tmp/response.wav) agi.stream_file(/tmp/response) os.remove(/tmp/response.wav) def startAGI(): agi AGI() agi.verbose(EAGI script started...) ani agi.env[agi_callerid] did agi.env[agi_extension] agi.verbose(Call answered from: %s to %s % (ani, did)) ws create_connection(ws://localhost:2700) ws.send({ config : { sample_rate : 8000 } }) agi.verbose(Connection created) try: while True: data os.read(AUDIO_FD, 8000) if not data: break process_chunk(agi, ws, data) except Exception as err: agi.verbose(.join(traceback.format_exception(type(err), err, err.__traceback__)).replace(\n, )) finally: ws.close() startAGI()完整php#!/usr/bin/php -q ?php /* * author mihail.belobrovgmail.com * For FreePBX */ ob_implicit_flush(false); set_time_limit(0); error_reporting(0); $VersionPath dirname(__FILE__); $LibPath $VersionPath./lib; $voskServer ws://127.0.0.1:2700; $FD3 php://fd/3; require_once /etc/freepbx.conf; // Configure DB and other things require_once /var/lib/asterisk/agi-bin/phpagi.php; // Load php-agi in FreePBX $module_name eagiVosk; $dbh \FreePBX::Database(); // Connect to database $outGoingPath \FreePBX::Config()-get(ASTSPOOLDIR)./outgoing; // Recieve FreePBX settings $monitorPath \FreePBX::Config()-get(ASTSPOOLDIR)./monitor; // Call recordings storage // Keywords for call directions $word_arr array( tech ext-queues,8001,1, // queue 8001 accountant from-did-direct,102,1, // accountant 202 operator ext-queues,800,1, // quue 800 ); $myagi new AGI(); $myagi-answer(); // Loads websocket library require_once(/var/www/html/tts/vosk/scripts/websocket-php-1.3.1/vendor/autoload.php); use WebSocket\Client; $client new Client($voskServer, array(timeout 20,fragment_size 8192)); $client-send({ config : { sample_rate : 8000 } }, text); // Play hello sound $myagi-exec(PLAYBACK,array(/var/lib/asterisk/sounds/ru/hello-world)); $myText array(); $totalText ; $mydata fopen($FD3, rb); // opens file descriptor 3 $previous_text ; while(!feof($mydata)) { $data fread($mydata,8192); $client-send($data, binary); $receive $client-receive(); $result json_decode($receive, true); if(!empty($result[partial])) { $myagi-verbose($result[partial],3); if($previous_text ! $result[partial]){ $previous_text $result[partial]; foreach ($word_arr as $word $destination){ if (preg_match(/.$word./u, $previous_text , $matches) ){ list($context,$ext,$priority) explode(,,$destination); $myagi-exec_dial(Local,$ext..$context); // calls required direction break; } } } } } $client-send({\eof\ : 1}); $receive $client-receive(); fclose($mydata); $myagi-hangup(); ?Asterisk 插件Asterisk 插件独立维护在专属项目中https://github.com/alphacep/vosk-asterisk我们提供 Asterisk 模块以最大限度简化集成流程你只需编写如下拨号计划即可实现语音识别功能plaintext[internal] exten 1,1,Answer ; 接听来电 same n,Wait(1) ; 等待1秒 same n,SpeechCreate ; 创建语音识别会话 same n,SpeechBackground(hello) ; 播放hello语音并启动识别 same n,Verbose(0,Result was ${SPEECH_TEXT(0)}) ; 打印识别结果EAGI 方式你也可以将音频流转发至 AMI/ARI/AGI 接口由独立的 Web 应用处理音频数据。但从长期来看这种方式需要你基于 Statis 自行重构 Asterisk 的全部语音处理逻辑因此我们认为这并非实现语音交互界面的合理方案。从长远角度实现具备自然用户体验的语音输入功能最佳方案是采用异步处理机制。而异步输入处理需要比当前 Asterisk 语音 API 更复杂的技术架构支撑。未来我们可能会为 Asterisk 开发更完善的语音处理模块。你仍可参考本项目中的eagi.py文件体验 EAGI 功能使用方法如下安装依赖项asteriskAsterisk 核心程序docker容器运行环境TTS 语音合成包bash运行sudo apt install sox espeakAGI 及 WebSocket 开发包bash运行sudo pip3 install pyst2 websocket-client通过 Docker 启动识别服务器bash运行docker run -d -p 2700:2700 alphacep/kaldi-en:latest你也可选择自行部署 https://github.com/alphacep/vosk-server 并加载自定义模型。测试 EAGI 脚本示例脚本 eagi.py 可通过以下方式运行bash运行cd /home/user git clone https://github.com/alphacep/api-samples cd api-samples/asterisk python3 eagi.py ARGS: [eagi.py] # 脚本启动成功提示 ^C # 按CtrlC终止脚本配置 Asterisk 拨号计划编辑/etc/asterisk/extensions.conf原文笔误为 etc/extensions.confplaintextexten 200,1,Answer() ; 匹配200号码接听来电 same n,EAGI(/home/user/api-samples/asterisk/eagi.py) ; 调用EAGI脚本处理语音 same n,Hangup() ; 挂断通话测试通话并验证响应拨打 200 号码即可验证语音识别功能是否正常响应。如需实现更复杂的聊天机器人、数据库交互或呼叫流程定制可根据业务需求修改eagi.py。你也可使用 PHP/Perl 开发本项目中提供了对应示例。基于 PHP 的 EAGI 实现如需在 FreePBX原文笔误为 FreePBS环境下使用 PHP 实现 EAGI可参考示例脚本eagi_phpagi.php东方仙盟拥抱知识开源共筑数字新生态在全球化与数字化浪潮中东方仙盟始终秉持开放协作、知识共享的理念积极拥抱开源技术与开放标准。我们相信唯有打破技术壁垒、汇聚全球智慧才能真正推动行业的可持续发展。开源赋能中小商户通过将前端异常检测、跨系统数据互联等核心能力开源化东方仙盟为全球中小商户提供了低成本、高可靠的技术解决方案让更多商家能够平等享受数字转型的红利。共建行业标准我们积极参与国际技术社区与全球开发者、合作伙伴共同制定开放协议 与技术规范推动跨境零售、文旅、餐饮等多业态的系统互联互通构建更加公平、高效的数字生态。知识普惠共促发展通过开源社区 、技术文档与培训体系东方仙盟致力于将前沿技术转化为可落地的行业实践赋能全球合作伙伴共同培育创新人才推动数字经济 的普惠式增长阿雪技术观在科技发展浪潮中我们不妨积极投身技术共享。不满足于做受益者更要主动担当贡献者。无论是分享代码、撰写技术博客还是参与开源项目 维护改进每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地我们携手在此探索硅基 生命为科技进步添砖加瓦。Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Dont just be the one reaping all the benefits; step up and be a contributor too. Whether youre 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. Were gonna team up and explore the whole silicon - based life thing, and in the process, well be fueling the growth of technology

相关文章:

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

核心代码 目录结构 完整代码python #!/usr/bin/python3from asterisk.agi import * import os from websocket import create_connection import json import tracebackAUDIO_FD 3 CONTENT_TYPE audio/l16; rate8000; channels1 ACCEPT audio/pcmdef process_chunk(agi, ws…...

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

核心代码目录结构代码import { Component } from angular/core; import { ElementRef, ViewChild} from angular/core import { DictateService } from "./dictate-service";Component({selector: app-root,templateUrl: ./app.component.html,styleUrls: [./app.com…...

OpenClaw安全防护:从威胁认知到工程化加固

OpenClaw安全防护:从威胁认知到工程化加固⚠️ 为什么需要单独一章讲安全? 截至2026年3月,全球已有超过27万个OpenClaw实例暴露在公网上,ClawHub市场累计发现超过1184个恶意Skills,国家互联网应急中心(CNCE…...

opencv中,把图片变成灰度图有什么用

在 OpenCV 和计算机视觉中,把彩色图片变成灰度图(Grayscale)绝不仅仅是为了“怀旧”或“好看”,它有着非常硬核的工程价值和数学优势。 简单来说,它的核心作用可以概括为三个词:降维、去噪、提效。 以下是详…...

AI驱动的8款工具能高效简化论文写作,自动完成目录生成与内容结构调整

工具对比速览 工具名称 核心功能 处理速度 适用场景 特色优势 aibiye AI降重目录生成 20分钟 学术论文 知网/维普/格子达适配 aicheck AI检测目录优化 实时 初稿检查 多平台规则预判 askpaper 学术规范处理 15-30分钟 期刊投稿 保留专业术语 秒篇 一键式处…...

7个AI论文降重工具实测,改写效果与适用场景解析

AIGC检测功能展示 降AIGC效果 必知!7个AI降重排名,助论文通过 还在为论文查重率发愁?随着学术规范日益严格,查重和AIGC检测成为论文通过的硬性门槛。别担心,AI降重工具来拯救你!经过实测对比,…...

论文降重神器盘点:7款AI工具实测效果与使用建议

AIGC检测功能展示 降AIGC效果 必知!7个AI降重排名,助论文通过 还在为论文查重率发愁?随着学术规范日益严格,查重和AIGC检测成为论文通过的硬性门槛。别担心,AI降重工具来拯救你!经过实测对比,…...

去中心化AI系统:架构师必须知道的共识

去中心化AI系统:架构师必知的共识机制设计与实践 副标题:从分布式一致性到AI协同,拆解核心逻辑与落地要点 摘要/引言 当我们谈论AI的未来时,去中心化正在成为破局中心化AI痛点的关键方向——你是否遇到过这些问题? 中心…...

企业AI风险防控体系的敏捷设计:AI应用架构师的实战方法

企业AI风险防控体系的敏捷设计:AI应用架构师的实战方法 引言:AI时代的风险之痛,需要“敏捷”的解药 痛点引入:AI项目的“风险陷阱”你踩过吗? 作为AI应用架构师,你可能经历过这些崩溃瞬间: 模型…...

金三银四已到,Java就业压力为啥还没缓解?

今年金三银四快到了,但是大家就业压力却没有缓解多少。很多粉丝后台留言,Java程序员面临的竞争太激烈了……我自己也有实感,多年身处一线互联网公司,虽没有直面过求职跳槽的残酷,但经常担任技术面试考官,对…...

普通Java程序员如何快速上手性能调优?

性能优化可以说是很多一线大厂对其公司内高级开发的基本要求(其中以Java岗最为显著)。其原因有两个:一是提高系统的性能,二是为公司节省资源。两者都能做到,那你就不可谓不是普通程序员眼中的“调优大神了”。那么如何…...

阿里最新SpringBoot进阶笔记,2026快速上手突击必备!

相信从事Java开发的朋友都听说过SSM框架,老点的甚至经历过SSH,说起来有点恐怖,比如我就是经历过SSH那个时代未流。当然无论是SSM还是SSH都不是今天的重点,今天要说的是Spring Boot,一个令人眼前一亮的框架,…...

IT界有哪些优秀的高并发解决方案?

据有关数据表明,现在基本工作年限超过5年的Java开发岗以及各大厂招聘岗位,对于高并发这块内容是必定会考察的。这也就意味着,你想要在今年这个大环境下,找到一份薪水高且发展前景好的岗位,不关基础知识还要有良好的编码…...

Unity平台跳跃游戏开发利器:Platformer Project 技术架构深度解析

在游戏开发领域,平台跳跃(Platformer)一直是一个经典且充满魅力的游戏类型。从《超级马里奥》到《索尼克》,再到各种现代3D平台游戏,核心玩法始终围绕着精准的移动控制、复杂的地形互动以及丰富的角色技能展开。然而&a…...

OpenClaw-龙虾智能体-新手入门必看,一文搞懂核心定义与应用场景

OpenClaw(龙虾)智能体:新手入门必看,一文搞懂核心定义与应用场景📚 本章学习目标:深入理解OpenClaw(龙虾)智能体的核心概念与实践方法,掌握关键技术要点,了解…...

【从零学javase 第六天】网络编程(+多线程)

Java 网络编程实战教程:从零基础到群聊本文适合刚会 Java 的同学,带你从零基础学 Java 网络编程,最终实现多客户端群聊。一、网络编程基础概念 网络编程就是用程序让两台电脑互相传递信息。 IP 地址:电脑的网络位置,例…...

AI 批量图片去水印工具 v1.0.0 - 豆包专属去水印

豆包 AI 图片批量去水印工具 v1.0.0,是 AI 驱动的高效批量去水印神器,可自动批量处理图片水印,搭配教学视频与专属插件简化操作流程,助力用户轻松完成图片去水印工作。软件核心介绍基础功能:依托 AI 技术实现图片批量去…...

【实证分析】上市公司债务融资成本数据-含代码(2006-2024年)

数据简介:上市公司债务融资成本是指上市公司通过债务形式(如银行信贷、发行债券、融资租赁等)融入资金时,需要支付给债权人的费用或代价。这一成本是企业为获取债务资本而必须承担的支出,对企业的财务状况和经营成果具…...

Java 后端实现 token自动续期,这方案有点优雅!

在前后端分离的开发模式下,前端用户登录成功后后端服务会给用户颁发一个token。前端(如vue)在接收到 token后会将token存储到LocalStorage中。后续每次请求都会将此token放在请求头中传递到后端服务,后端服务会有一个过滤器对token进行拦截校验&#xff…...

11 张图总结下,微服务增量拉取

一、前言 上一篇我们讲解了客户端首次获取注册表时,需要从注册中心全量拉取注册表到本地存着。那后续如果有客户端注册、下线的话,注册表肯定就发生变化了,这个时候客户端就得更新本地注册表了,怎么更新呢?下面我会带…...

线程池里的代码明明报错了,为什么控制台一行异常日志都不打?

昨天下午,运营说有个用户标签更新任务没跑,后台数据全是旧的!这个任务我前两天才优化过,逻辑很简单,就是从数据库查一批人,算一下标签,再写回去。为了快点,我还特意用了线程池做并发…...

十万个why:Nacos 服务注册为什么默认是临时实例?

做 Spring Cloud 开发的同学,对 Nacos 肯定不陌生。大家平常写代码,配置文件里只要配好 Nacos 地址,程序一启动,服务就自动注册上去了。但不知道大家有没有留意过一个细节:当你把服务停掉,或者直接 Kill 进…...

词向量做句子相似度已经落伍?深度解析词移距离(WMD)为何能成为语义匹配新宠!

在自然语言处理(NLP)领域,如何度量两个句子的语义相似度是一个基础且重要的问题。无论是智能客服、搜索引擎,还是文本去重、问答系统,都离不开快速准确的相似度计算。尤其是在工业界实时场景中(比如语音助手…...

华为CE6800交换机堆叠配置案例

新到了2台华为CE6857交换机, 需要配置堆叠 硬件型号:CE6857F-48S6CQ 示例拓扑:实际物理拓扑配置思路 采用如下的思路配置: 提前规划好堆叠方案。按照前期的规划,完成各台交换机的堆叠配置,包括堆叠成员ID、…...

5 个正在爆火的开源AI工具

在过去的 60 天里,一个名为 OpenClaw 的开源 AI 项目超越了 React,成为 GitHub 历史上获得最多星标的软件项目,累计获得超过 30 万颗星,揭示了向开发者现在所说的"智能体执行"的巨大转变。但 OpenClaw 已经太大了,不适合被低估。当科技媒体争相报道同样的五个项目时,…...

应该使用AI构建内部工具吗?

这是我目前发现的最有趣的讨论之一。这是关于你是否应该使用人工智能来构建自己的内部工具。 Chamath 在大约 6 周内构建了自己的 JIRA 工具。 我们的hacker团队刚刚使用 Software Factory 在一个多月内重建并替换了 Jira。我们首先花了 3.5 周的时间进行规划。这就是软件工厂…...

LLM可观测性:AI系统缺失的环节

您已部署LLM应用。它在测试中运行正常。用户开始使用它。 两周后,有人提交了一个错误。应用返回了错误答案。 您去检查发生了什么。没有日志,没有发送的提示词记录,没有模型接收到的内容记录,也没有知识库中检索器拉取的哪个块的…...

分发:AI的终极护城河

本周,我一直在思考分发,不是作为一种营销职能,而是作为AI的终极权力层。每家公司都在谈论模型,但真正的游戏是覆盖、控制和复合访问。我已经在这些行业中反复观察到这种模式。 这正是OpenAI传闻中的Agent Builder发布所正在上演的…...

第8篇:PI控制器设计实战演练

你是否遇到过? 明明啃完了上一篇《基于传递函数的PI控制器设计》理论,吃透了比例管响应、积分消静差的核心逻辑,可一落地工程调试就频频卡壳:对着传递函数不知道怎么转换成单片机能跑的代码,Python仿真效果完美&#x…...

调试线程应用程序

摘要:本章介绍了Python线程应用程序的调试方法,重点讲解了Python内置调试器pdb的使用。调试是软件开发中定位和修复错误的关键环节,pdb提供变量查看和代码逐行执行功能。通过import pdb;pdb.set_trace()插入断点,可使用n(下一步)、…...