Flutter教程实现语音识别功能

在Flutter中实现语音识别功能时,使用哪个第三方库最稳定?具体需要哪些权限配置?录音完成后如何实时转换为文字并显示在UI上?遇到后台运行时识别中断的问题该如何解决?iOS和Android平台的识别准确率差异大吗?

3 回复

要实现Flutter的语音识别功能,可以使用speech_to_text插件。首先,在pubspec.yaml中添加依赖:

dependencies:
  speech_to_text: ^5.0.2

然后运行flutter pub get

初始化并请求权限:

import 'package:flutter/material.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final stt.SpeechToText _speech = stt.SpeechToText();
  bool _isListening = false;
  String _text = "点击按钮开始说话";

  @override
  void initState() {
    super.initState();
    _initSpeech();
  }

  void _initSpeech() async {
    await _speech.initialize(onStatus: (status) {}, onError: (e) {});
  }

  void _startListening() async {
    if (!_isListening) {
      setState(() => _isListening = true);
      _speech.listen(onResult: (result) {
        setState(() {
          _text = result.recognizedWords;
        });
      });
    } else {
      setState(() => _isListening = false);
      _speech.stop();
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('语音识别示例')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(_text, style: TextStyle(fontSize: 24)),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _startListening,
                child: Text(_isListening ? '停止监听' : '开始说话'),
              )
            ],
          ),
        ),
      ),
    );
  }
}

这段代码创建了一个简单的界面,包含一个文本显示识别结果和一个按钮来启动或停止语音识别。

更多关于Flutter教程实现语音识别功能的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


要实现语音识别功能,首先需要引入Google的speech_to_text插件。步骤如下:

  1. 在pubspec.yaml中添加依赖:speech_to_text: ^5.0.2

  2. 安装依赖后,在代码中导入:import 'package:speech_to_text/speech_to_text.dart' as stt;

  3. 创建SpeechToText对象并初始化:

stt.SpeechToText speech = stt.SpeechToText();
  1. 请求权限并启动识别:
bool available = await speech.initialize(onStatus: statusListener, onError: errorListener);
if (available) {
  speech.listen(onResult: resultListener);
}
  1. 实现回调函数处理识别结果:
void resultListener(stt.SpeechRecognitionResult result) {
  print('识别结果: ${result.recognizedWords}');
}

void statusListener(String status) {
  print('状态: $status');
}

void errorListener(String errorMessage) {
  print('错误: $errorMessage');
}
  1. 停止监听:speech.stop();

注意申请麦克风权限并在AndroidManifest.xml中添加<uses-permission android:name="android.permission.RECORD_AUDIO" />。这样就能实现简单的语音识别功能了。

Flutter实现语音识别功能

在Flutter中实现语音识别功能可以使用speech_to_text插件,下面是一个简单的实现步骤:

基本步骤

  1. 添加依赖到pubspec.yaml
dependencies:
  speech_to_text: ^latest_version
  1. 导入包:
import 'package:speech_to_text/speech_to_text.dart' as stt;
  1. 基础实现代码:
class SpeechRecognitionDemo extends StatefulWidget {
  @override
  _SpeechRecognitionDemoState createState() => _SpeechRecognitionDemoState();
}

class _SpeechRecognitionDemoState extends State<SpeechRecognitionDemo> {
  final stt.SpeechToText _speech = stt.SpeechToText();
  bool _isListening = false;
  String _text = 'Press the button and start speaking';

  @override
  void initState() {
    super.initState();
    _initSpeech();
  }

  void _initSpeech() async {
    bool available = await _speech.initialize(
      onStatus: (status) => print('Status: $status'),
      onError: (error) => print('Error: $error'),
    );
    
    if (available) {
      setState(() => _isListening = false);
    } else {
      print("语音识别不可用");
    }
  }

  void _listen() async {
    if (!_isListening) {
      bool available = await _speech.listen(
        onResult: (result) => setState(() {
          _text = result.recognizedWords;
        }),
      );
      
      if (available) {
        setState(() => _isListening = true);
      }
    } else {
      await _speech.stop();
      setState(() => _isListening = false);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('语音识别')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_text),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _listen,
              child: Text(_isListening ? '停止' : '开始语音识别'),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. 在Android上需要添加麦克风权限到AndroidManifest.xml
<uses-permission android:name="android.permission.RECORD_AUDIO" />
  1. 在iOS上需要在Info.plist中添加:
<key>NSSpeechRecognitionUsageDescription</key>
<string>需要语音识别权限</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风权限</string>
  1. 需要在运行时请求权限,可以使用permission_handler插件。

这个实现提供了基本的语音识别功能,可以根据需要扩展更多功能,如实时反馈、多语言支持等。

回到顶部