本文目录导读:

在 Laravel 中集成语音识别功能,通常需要使用第三方 API,因为 Laravel 本身不内置语音识别能力,以下是几种常见的实现方式:
主流语音识别 API 选择
阿里云语音识别(推荐国内用户)
use AlibabaCloud\Client\AlibabaCloud;
// 安装: composer require alibabacloud/sdk
AlibabaCloud::accessKeyClient('your-key', 'your-secret')
->regionId('cn-shanghai')
->asGlobalClient();
$result = AlibabaCloud::rpc()
->product('nls-filetrans')
->version('2018-08-17')
->action('createTask')
->method('POST')
->options([
'query' => [
'Task' => json_encode([
'appkey' => 'your-appkey',
'file_link' => 'https://your-bucket.oss-cn-shanghai.aliyuncs.com/audio.mp3'
])
]
])
->request();
腾讯云语音识别
use TencentCloud\Common\Credential;
use TencentCloud\Asr\V20190614\AsrClient;
// 安装: composer require tencentcloud/tencentcloud-sdk-php
$cred = new Credential("your-secret-id", "your-secret-key");
$client = new AsrClient($cred, "ap-guangzhou");
$req = new CreateRecTaskRequest();
$params = json_encode([
"EngineModelType" => "16k_0",
"ChannelNum" => 1,
"ResTextFormat" => 0,
"SourceType" => 0,
"Url" => "https://your-file-url.mp3"
]);
$req->fromJsonString($params);
$resp = $client->CreateRecTask($req);
封装成 Laravel Service
创建服务类 app/Services/SpeechRecognitionService.php:
namespace App\Services;
use Illuminate\Support\Facades\Http;
class SpeechRecognitionService
{
protected $apiKey;
protected $apiUrl;
public function __construct()
{
$this->apiKey = config('services.speech.api_key');
$this->apiUrl = config('services.speech.api_url');
}
public function recognize($audioFile)
{
// 上传文件到云存储(OSS/S3)
$audioUrl = $this->uploadToCloud($audioFile);
// 调用语音识别 API
$response = Http::withHeaders([
'Authorization' => 'Bearer ' . $this->apiKey
])->post($this->apiUrl . '/recognize', [
'audio_url' => $audioUrl,
'language' => 'zh-CN'
]);
return $response->json();
}
private function uploadToCloud($file)
{
// 实现文件上传逻辑
}
}
使用 WebSocket 实时语音识别
use Ratchet\Client\WebSocket;
use React\EventLoop\Loop;
$loop = Loop::get();
$connector = new WebSocket\Connector($loop);
$connector('wss://speech-api.example.com/ws?key=your-key')
->then(function(WebSocket $conn) use ($audioStream) {
$conn->on('message', function($msg) {
Log::info('识别结果: ' . $msg);
});
// 发送音频流
foreach ($audioStream as $chunk) {
$conn->send($chunk);
}
}, function($e) {
echo "连接失败: {$e->getMessage()}\n";
});
$loop->run();
配置文件 config/services.php
'speech' => [
'driver' => env('SPEECH_DRIVER', 'aliyun'), // aliyun, tencent, google
'aliyun' => [
'access_key' => env('ALIYUN_ACCESS_KEY'),
'access_secret' => env('ALIYUN_ACCESS_SECRET'),
'app_key' => env('ALIYUN_APP_KEY'),
],
'tencent' => [
'secret_id' => env('TENCENT_SECRET_ID'),
'secret_key' => env('TENCENT_SECRET_KEY'),
],
'api_url' => env('SPEECH_API_URL'),
'api_key' => env('SPEECH_API_KEY'),
],
Controller 调用示例
use App\Services\SpeechRecognitionService;
use Illuminate\Http\Request;
class SpeechController extends Controller
{
public function recognize(Request $request, SpeechRecognitionService $service)
{
$request->validate([
'audio' => 'required|file|mimes:wav,mp3,ogg|max:10240'
]);
$result = $service->recognize($request->file('audio'));
return response()->json([
'success' => true,
'text' => $result['text'] ?? '',
'confidence' => $result['confidence'] ?? 0
]);
}
}
推荐方案
| 场景 | 推荐 API |
|---|---|
| 国内生产环境 | 阿里云、腾讯云、百度云 |
| 国际项目 | Google Cloud Speech-to-Text、Azure Speech |
| 预算有限 | 讯飞开放平台(有免费额度) |
| 实时性要求高 | 使用 WebSocket 方案 |
注意事项:
- 语音文件通常较大,建议先上传到对象存储再识别
- 考虑语音识别结果的异步回调处理
- 注意各 API 的并发限制和计费方式
如果你需要针对特定场景(如实时语音识别、电话录音转写等)的实现细节,可以进一步说明你的需求。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播