Flutter语音识别评估插件azure_speech_assessment的使用

Flutter语音识别评估插件azure_speech_assessment的使用

azure_speech_assessment

本项目基于以下两个项目的代码:

  1. cristianbregant: https://github.com/cristianbregant/azure_speech_recognition
  2. jjordanoc:https://github.com/jjordanoc/azure_speech_recognition_null_safety

开始使用

此项目是使用Azure语音识别服务的起点。

要使用此插件,您必须已经在认知服务页面上创建了一个账户。

安装

要安装该包,请使用最新版本:

dependencies:
  azure_speech_assessment: ^0.0.7

使用方法

首先,导入插件:

import 'package:azure_speech_assessment/azure_speech_assessment.dart';

初始化

有两种类型的初始化器:

简单初始化器

应在除意图识别外的所有情况下使用。默认语言设置为"en-EN",但您可以根据需要更改(如果支持)。默认静音超时时间为1000毫秒。(它必须是一个介于100到5000之间的整数)

AzureSpeechAssessment.initialize("your_subscription_key", "your_server_region", lang: "it-IT", timeout: 3000);

意图初始化器

仅在意图识别时使用。默认语言设置为"en-EN",但您可以根据需要更改(如果支持)。

AzureSpeechAssessment.initializeLanguageUnderstanding("your_language_subscription_key", "your_language_server_region", "your_language_appId", lang: "it-IT");

识别类型

简单语音识别(支持Android和iOS)

识别完成后返回响应。

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:azure_speech_assessment/azure_speech_assessment.dart';

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final AzureSpeechAssessment _speechAzure = AzureSpeechAssessment();
  String subscriptionKey = "your_key";
  String serverRegion = "your_server_region";
  String language = "it-IT";

  void activateSpeechRecognizer() {
    // 必须的初始化
    AzureSpeechAssessment.initialize(subscriptionKey, serverRegion, lang: language);

    _speechAzure.setFinalTranscription((text) {
      // 对最终转录进行操作
    });

    _speechAzure.setRecognitionStartedHandler(() {
      // 在识别开始时调用(可以不使用)
    });
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    activateSpeechRecognizer();
  }

  Future<void> recognizeVoice() async {
    try {
      await AzureSpeechAssessment.simpleVoiceRecognition();
    } on PlatformException catch (e) {
      print("启动识别失败: '${e.message}'.");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter语音识别'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: recognizeVoice,
          child: Text('开始语音识别'),
        ),
      ),
    );
  }
}

带麦克风流的语音识别

通过麦克风流返回临时短语,并在识别结束时返回最终响应。

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:azure_speech_assessment/azure_speech_assessment.dart';

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final AzureSpeechAssessment _speechAzure = AzureSpeechAssessment();
  String subscriptionKey = "your_key";
  String serverRegion = "your_server_region";
  String language = "it-IT";

  void activateSpeechRecognizer() {
    // 必须的初始化
    AzureSpeechAssessment.initialize(subscriptionKey, serverRegion, lang: language);

    _speechAzure.setFinalTranscription((text) {
      // 对最终转录进行操作
    });

    _speechAzure.setRecognitionResultHandler((text) {
      // 对部分转录进行操作(每次识别一个单词时都会调用)
      // 如果您有一个显示字符串,可以在这里调用setState()以更新部分结果
    });

    _speechAzure.setRecognitionStartedHandler(() {
      // 在识别开始时调用(可以不使用)
    });
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    activateSpeechRecognizer();
  }

  Future<void> recognizeVoiceMicStreaming() async {
    try {
      await AzureSpeechAssessment.micStream();
    } on PlatformException catch (e) {
      print("启动识别失败: '${e.message}'.");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter语音识别'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: recognizeVoiceMicStreaming,
          child: Text('开始语音识别'),
        ),
      ),
    );
  }
}

意图识别

意图识别返回临时短语,并在识别结束时返回最终响应。

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:azure_speech_assessment/azure_speech_assessment.dart';

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final AzureSpeechAssessment _speechAzure = AzureSpeechAssessment();
  String subscriptionKey = "your_language_subscription_key";
  String serverRegion = "your_language_server_region";
  String appId = "your_language_appId";
  String language = "it-IT";

  void activateSpeechRecognizer() {
    // 必须的初始化
    AzureSpeechAssessment.initializeLanguageUnderstanding(subscriptionKey, serverRegion, appId, lang: language);

    _speechAzure.setFinalTranscription((text) {
      // 对最终转录进行操作
    });

    _speechAzure.setRecognitionResultHandler((text) {
      // 对部分转录进行操作(每次识别一个单词时都会调用)
      // 如果您有一个显示字符串,可以在这里调用setState()以更新部分结果
    });

    _speechAzure.setRecognitionStartedHandler(() {
      // 在识别开始时调用(可以不使用)
    });
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    activateSpeechRecognizer();
  }

  Future<void> speechIntentRecognizer() async {
    try {
      await AzureSpeechAssessment.intentRecognizer();
    } on PlatformException catch (e) {
      print("启动识别失败: '${e.message}'.");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter语音识别'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: speechIntentRecognizer,
          child: Text('开始意图识别'),
        ),
      ),
    );
  }
}

更多关于Flutter语音识别评估插件azure_speech_assessment的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter语音识别评估插件azure_speech_assessment的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用azure_speech_assessment插件进行语音识别评估的示例代码。这个插件允许你利用Azure的认知服务来进行语音识别评估。

首先,确保你已经在你的Flutter项目中添加了azure_speech_assessment依赖。你可以在pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  azure_speech_assessment: ^最新版本号  # 请替换为当前可用的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,你需要配置Azure的认知服务。这通常涉及获取一个API密钥和订阅ID,并配置服务区域。这些配置信息不应硬编码在客户端应用中,而是应该安全地存储和检索。

以下是一个简单的Flutter应用示例,展示了如何使用azure_speech_assessment插件:

import 'package:flutter/material.dart';
import 'package:azure_speech_assessment/azure_speech_assessment.dart';

void main() {
  runApp(MyApp());
}

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

class _MyAppState extends State<MyApp> {
  final _controller = TextEditingController();
  String _result = '';

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  Future<void> startSpeechAssessment() async {
    // 配置Azure认知服务信息
    final config = SpeechAssessmentConfig(
      subscription: '你的订阅密钥',  // 替换为你的Azure订阅密钥
      region: '你的服务区域',        // 替换为你的Azure服务区域,例如 'westus'
    );

    // 创建SpeechAssessment实例
    final speechAssessment = SpeechAssessment(config: config);

    // 监听结果
    speechAssessment.resultStream.listen((result) {
      setState(() {
        _result = result.recognitionText; // 获取识别文本
        // 你可以在这里处理评估结果,比如获取评估分数等
      });
    });

    // 开始语音识别评估
    try {
      await speechAssessment.startListening();
    } catch (e) {
      print('Error starting speech assessment: $e');
    }
  }

  Future<void> stopSpeechAssessment() async {
    // 停止语音识别评估(这里假设你已经有一个实例speechAssessment)
    // 注意:实际使用中,你需要管理speechAssessment的生命周期
    try {
      await speechAssessment.stopListening();
    } catch (e) {
      print('Error stopping speech assessment: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Azure Speech Assessment Demo'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              TextField(
                controller: _controller,
                decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  labelText: 'Input Text (for demo, not actually used for speech)',
                ),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: startSpeechAssessment,
                child: Text('Start Speech Assessment'),
              ),
              SizedBox(height: 10),
              ElevatedButton(
                onPressed: stopSpeechAssessment, // 注意:这里需要管理speechAssessment实例
                child: Text('Stop Speech Assessment'),
              ),
              SizedBox(height: 20),
              Text('Recognition Result: $_result'),
            ],
          ),
        ),
      ),
    );
  }
}

注意

  1. 上述代码中的speechAssessment实例在startSpeechAssessmentstopSpeechAssessment方法之间需要被正确管理。在实际应用中,你可能需要将speechAssessment实例提升为类的成员变量,以便在多个方法之间共享。

  2. subscriptionregion需要替换为你自己的Azure认知服务信息。

  3. TextField在这个示例中仅用于展示,实际上并不用于语音识别输入。在实际应用中,你将通过设备的麦克风进行输入。

  4. 请确保你已经在Azure门户中启用了认知服务,并获取了有效的API密钥和订阅ID。

  5. 由于azure_speech_assessment插件的具体API可能会随时间变化,请参考最新的插件文档以获取最准确的信息。

回到顶部