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 包)
  • 真机测试(模拟器可能无法使用麦克风)
  • 模型文件较大,首次加载需要时间

这样就能实现基本的语音识别功能。你可以根据需要调整模型和识别参数。

回到顶部