vosk-ASR php调用[AI人工智能(四十九)]—东方仙盟

核心代码

完整客户端代码

复制代码
<?php

require_once("./vendor/autoload.php");

use WebSocket\Client;

$client = new Client("ws://localhost:2700/", array('timeout' => 2000));
$myfile = fopen("test.wav", "r");
while(!feof($myfile)) {
   $data = fread($myfile, 8000);
   $client->send($data, 'binary');
   echo $client->receive() . "\n";
}
$client->send("{\"eof\" : 1}");
echo $client->receive() . "\n";
fclose($myfile);

?>

一、代码整体功能(Vosk 场景下)

这段代码是一个Vosk 语音识别服务的 WebSocket 客户端,核心作用是:

  1. 读取本地的 test.wav 音频文件(语音文件);
  2. 通过 WebSocket 协议,把音频数据分片发送到本地运行的 Vosk WebSocket 服务端(端口 2700);
  3. 接收 Vosk 服务端返回的实时语音识别结果;
  4. 音频发送完成后,告知服务端 "传输结束",并接收最终的识别结果。

简单说:你把本地的语音文件 "拆成小块" 传给 Vosk 服务,Vosk 一边接收一边识别,实时返回结果,最后返回完整识别文本。

二、逐行代码解释(新手友好版)

php

运行

复制代码
<?php
// 1. 引入第三方库的自动加载文件(WebSocket客户端依赖这个)
// 作用:不用手动一个个引入WebSocket相关的类文件,composer会自动处理
require_once("./vendor/autoload.php");

// 2. 引入WebSocket客户端类(相当于"拿过来"别人写好的WebSocket工具)
use WebSocket\Client;

// 3. 创建WebSocket客户端,连接到本地Vosk的WebSocket服务(端口2700)
// timeout=2000:连接/收发数据的超时时间是2000毫秒(2秒),避免一直等
$client = new Client("ws://localhost:2700/", array('timeout' => 2000));

// 4. 打开本地的test.wav音频文件,模式是"只读(r)"
// test.wav必须是Vosk支持的格式(16kHz、单声道、PCM编码),否则识别会出错
$myfile = fopen("test.wav", "r");

// 5. 循环读取音频文件,直到文件末尾(feof=file end of file)
while(!feof($myfile)) {
   // 6. 每次读取8000字节的音频数据(分片读取,避免一次性传太大)
   $data = fread($myfile, 8000);
   // 7. 通过WebSocket发送二进制音频数据('binary'指定是二进制,不是文本)
   $client->send($data, 'binary');
   // 8. 接收Vosk服务端返回的实时识别结果,并打印
   echo $client->receive() . "\n";
}

// 9. 音频发送完后,给Vosk服务端发一个"结束标识"(JSON格式)
$client->send("{\"eof\" : 1}");
// 10. 接收Vosk返回的最终完整识别结果,并打印
echo $client->receive() . "\n";

// 11. 关闭音频文件,释放资源
fclose($myfile);
?>

三、在 Vosk 中的核心作用

Vosk 是一个离线语音识别工具,它支持 WebSocket 服务模式:

  1. 服务端 :你需要先启动 Vosk 的 WebSocket 服务(监听localhost:2700),这个服务负责处理音频、做语音识别;
  2. 客户端(这段代码):作为 "数据传输器",把本地的 WAV 音频文件分片传给 Vosk 服务端,同时接收识别结果。

关键细节(新手必看)

  • 为什么要 "分片发送"?WAV 文件可能很大,一次性发送会占满网络 / 内存,分片(每次 8000 字节)是更稳定的方式,也符合 Vosk 流式识别的设计(边传边识别)。
  • 为什么指定'binary'?音频数据是二进制格式(不是文字),如果不指定,WebSocket 会把它当文本处理,导致数据错乱,Vosk 无法识别。
  • {"eof" : 1}的作用?告诉 Vosk 服务端 "音频已经传完了",服务端收到后会返回最终的完整识别结果,而不是实时的中间结果。

四、使用前提(新手要注意)

  1. 必须先安装依赖:这段代码用了 PHP 的 WebSocket 客户端库,需要通过composer安装(执行composer require textalk/websocket);
  2. Vosk 服务端必须启动:要先运行 Vosk 的 WebSocket 服务(比如python vosk_server_websocket.py),且端口是 2700;
  3. 音频文件格式正确:test.wav必须是16kHz 采样率、单声道、16 位 PCM 编码(Vosk 的标准格式),否则识别失败。

总结

  1. 这段 PHP 代码是 Vosk 语音识别的WebSocket 客户端,核心是 "分片发送 WAV 音频→接收实时识别结果→发送结束标识→接收最终结果";
  2. 关键要点:音频要二进制发送、分片传输、结束时发eof标识,且音频格式必须符合 Vosk 要求;
  3. 依赖条件:安装 WebSocket 库、启动 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

相关推荐
LucianaiB2 小时前
从基础配置到架构设计:JiuwenClaw 日报生成器开发实践
人工智能·ai·腾讯云·保姆级·opencalw
Wu_Dylan2 小时前
液态神经网络系列(七) | 事件驱动与可变步长:把“稀疏计算”做到极致
人工智能·深度学习·神经网络
Swift社区2 小时前
AI 时代,ArkUI 的设计模式会改变吗?
人工智能·设计模式
心疼你的一切2 小时前
【Unity-MCP完全指南:从零开始构建AI游戏开发助手】
人工智能·unity·ai·游戏引擎·aigc·mcp
_李小白2 小时前
【AI大模型学习笔记之平台篇】第三篇:Minimax
人工智能·笔记·学习
阿甘编程点滴2 小时前
书单号视频搬运软件推荐8款(2026实测版)
人工智能·音视频
zhangshuang-peta2 小时前
保障人工智能集成安全:解决生产环境中的MCP安全漏洞
人工智能·ai agent·mcp·peta
FreeBuf_2 小时前
AI安全护栏对防御者的束缚远超攻击者,加剧攻防失衡
人工智能·安全
昨夜见军贴06162 小时前
IACheck结合AI报告审核:列车制动系统气密性检测报告细节全面把控
人工智能