Flutter如何使用vosk_flutter实现语音识别
我在Flutter项目中需要集成离线语音识别功能,发现vosk_flutter插件似乎可以实现。请问具体应该如何配置和使用这个插件?目前遇到以下几个问题:1. 插件集成后初始化失败是什么原因?2. 如何加载语音模型文件?3. 实时语音识别的回调要如何处理?4. 在iOS和Android平台上的配置有什么区别?希望能提供一个完整的实现示例代码。
2 回复
在Flutter中使用vosk_flutter实现语音识别,需先添加依赖到pubspec.yaml,然后初始化模型并监听语音流。通过startListening和stopListening控制识别过程,处理识别结果。
更多关于Flutter如何使用vosk_flutter实现语音识别的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用vosk_flutter实现语音识别,主要步骤如下:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
vosk_flutter: ^0.3.0
2. 配置权限
Android (android/app/src/main/AndroidManifest.xml):
<uses-permission android:name="android.permission.RECORD_AUDIO" />
iOS (ios/Runner/Info.plist):
<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风权限进行语音识别</string>
3. 下载模型
从 Vosk模型库 下载模型(如小型中文模型 vosk-model-small-cn-0.22),解压后放入项目:
assets/
models/
vosk-model-small-cn-0.22/
在 pubspec.yaml 中声明资源:
flutter:
assets:
- assets/models/vosk-model-small-cn-0.22/
4. 基本使用代码
import 'package:vosk_flutter/vosk_flutter.dart';
class SpeechRecognitionPage extends StatefulWidget {
@override
_SpeechRecognitionPageState createState() => _SpeechRecognitionPageState();
}
class _SpeechRecognitionPageState extends State<SpeechRecognitionPage> {
final VoskFlutter _vosk = VoskFlutter();
String _result = "";
bool _isListening = false;
@override
void initState() {
super.initState();
_initializeModel();
}
Future<void> _initializeModel() async {
try {
await _vosk.initModel(
modelPath: 'assets/models/vosk-model-small-cn-0.22',
);
} catch (e) {
print("模型初始化失败: $e");
}
}
void _startListening() async {
if (_isListening) return;
setState(() => _isListening = true);
_result = "";
_vosk.startListening(
onResult: (text) {
setState(() => _result = text);
},
onTimeout: () {
setState(() => _isListening = false);
},
);
}
void _stopListening() {
_vosk.stopListening();
setState(() => _isListening = false);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Expanded(child: Center(child: Text(_result))),
ElevatedButton(
onPressed: _isListening ? _stopListening : _startListening,
child: Text(_isListening ? "停止录音" : "开始录音"),
),
],
),
);
}
@override
void dispose() {
_vosk.dispose();
super.dispose();
}
}
5. 注意事项
- 确保模型路径正确
- 处理权限申请(使用 permission_handler 包)
- 真机测试(模拟器可能无法使用麦克风)
- 模型文件较大,首次加载需要时间
这样就能实现基本的语音识别功能。你可以根据需要调整模型和识别参数。

