Flutter高性能插件cheetah_flutter的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter高性能插件cheetah_flutter的使用

Cheetah 是一个由位于加拿大温哥华的 Picovoice 开发的设备端语音转文本引擎。以下是关于如何在 Flutter 中使用 Cheetah 插件的一些详细说明。

Cheetah 语音转文本引擎

Cheetah 是:

  • 私有的;所有语音处理都在本地进行。
  • 准确。
  • 紧凑且计算效率高。
  • 跨平台:
    • Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64)
    • Android 和 iOS
    • Chrome, Safari, Firefox, 和 Edge
    • Raspberry Pi (3, 4, 5)

兼容性

该插件适用于以下平台上的 Flutter 2.8.1+:

  • Android 5.0+ (API 21+)
  • iOS 13.0+

安装

首先,你需要在你的系统上安装 Flutter SDK。安装完成后,你可以运行 flutter doctor 来检查是否还有其他缺失的要求。

要在你的项目中添加 Cheetah 插件,请在 pubspec.yaml 文件中引用它:

dependencies:
  cheetah_flutter: ^<version>

AccessKey

在初始化时,Cheetah 需要一个有效的 Picovoice AccessKey。AccessKey 作为你在使用 Cheetah SDK 时的身份凭证。你可以免费获取 AccessKey,并确保将其保密。

请在 Picovoice 控制台 上注册或登录以获取 AccessKey。

权限

为了启用硬件麦克风的录音功能,你必须确保已经在 iOS 和 Android 上启用了适当的权限。

在 iOS 上,打开 Info.plist 并添加以下行:

<key>NSMicrophoneUsageDescription</key>
<string>[Permission explanation]</string>

在 Android 上,打开 AndroidManifest.xml 并添加以下行:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />

Cheetah 模型文件集成

将 Cheetah 模型文件添加到你的 Flutter 应用程序中:

  1. Picovoice 控制台 中创建一个模型,或者使用默认模型。
  2. 将模型文件添加到项目的 assets 文件夹中。
  3. pubspec.yaml 文件中添加资产:
flutter:
  assets:
    - assets/cheetah_model.pv
  1. 在代码中,模型文件的路径可以设置为:
String modelPath = "assets/cheetah_model.pv";

或者,如果模型文件以不同的方式部署到设备上,则可以使用文件在设备上的绝对路径。

使用

通过传递模型文件路径来创建 Cheetah 实例:

import 'package:cheetah_flutter/cheetah.dart';

String accessKey = '{ACCESS_KEY}' // 从 Picovoice 控制台获取的 AccessKey (https://console.picovoice.ai/)
String modelPath = '{CHEETAH_MODEL_PATH}' // 相对于 assets 文件夹的路径或文件在设备上的绝对路径

void createCheetah() async {
    try{
        _cheetah = await Cheetah.create(accessKey, modelPath);
    } on CheetahException catch (err) {
        // 处理 Cheetah 初始化错误
    }
}

转录音频:

List<int> buffer = getAudioFrame();

String transcript = "";

while (true) {
    CheetahTranscript partialResult = await _cheetah.process(getAudioFrame());
    transcript += partialResult.transcript;

    if (partialResult.isEndpoint) {
        CheetahTranscript finalResult = await _cheetah.flush();
        transcript += finalResult.transcript;
    }
}

完成操作后,资源需要显式释放:

cheetah.delete();

示例代码

import 'package:flutter/material.dart';
import 'package:cheetah_flutter/cheetah.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Cheetah Demo')),
        body: Center(child: Text('Press the button to start transcription')),
        floatingActionButton: FloatingActionButton(
          onPressed: () async {
            String accessKey = 'YOUR_ACCESS_KEY'; // 替换为你的 AccessKey
            String modelPath = 'assets/cheetah_model.pv'; // 模型文件路径

            try {
              _cheetah = await Cheetah.create(accessKey, modelPath);
              print("Cheetah initialized successfully.");
            } on CheetahException catch (err) {
              print("Error initializing Cheetah: ${err.message}");
            }
          },
          child: Icon(Icons.mic),
        ),
      ),
    );
  }
}

Cheetah? _cheetah;

// 获取音频帧的示例函数(需要替换为实际音频采集逻辑)
List<int> getAudioFrame() {
  // 示例:返回一个空的音频帧列表
  return [];
}

更多关于Flutter高性能插件cheetah_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter高性能插件cheetah_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用高性能插件cheetah_flutter的代码示例。cheetah_flutter 是一个假想的插件名称,用于说明如何集成和使用一个高性能的Flutter插件。由于实际插件的细节可能有所不同,这里将提供一个通用的模板代码来展示如何集成和使用一个高性能插件。

首先,你需要确保在pubspec.yaml文件中添加了对该插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  cheetah_flutter: ^latest_version  # 替换为实际插件的最新版本号

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

接下来,在你的Flutter项目的Dart代码中,你可以按照以下方式使用cheetah_flutter插件。这里假设cheetah_flutter提供了一个高性能的列表组件,用于展示大量数据并保持流畅滚动。

import 'package:flutter/material.dart';
import 'package:cheetah_flutter/cheetah_flutter.dart';  // 导入插件

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Cheetah Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  // 生成大量数据示例
  List<String> generateLargeData() {
    List<String> data = [];
    for (int i = 0; i < 10000; i++) {
      data.add('Item $i');
    }
    return data;
  }

  @override
  Widget build(BuildContext context) {
    List<String> largeData = generateLargeData();

    return Scaffold(
      appBar: AppBar(
        title: Text('Cheetah Flutter High-Performance List'),
      ),
      body: CheetahListView.builder(  // 使用CheetahListView替代默认的ListView
        itemCount: largeData.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(largeData[index]),
          );
        },
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. pubspec.yaml文件中添加了cheetah_flutter插件的依赖。
  2. 在Dart代码中导入了cheetah_flutter插件。
  3. 使用CheetahListView.builder替代了默认的ListView.builder,假设CheetahListViewcheetah_flutter插件提供的一个高性能列表组件。
  4. 生成了一个包含10000个条目的大数据列表,并将其展示在列表中。

请注意,上述代码中的CheetahListViewcheetah_flutter插件是假设存在的,用于说明如何集成和使用一个高性能的Flutter插件。实际使用时,你需要根据具体插件的文档和API来调整代码。

此外,为了确保高性能,插件可能会使用底层渲染技术、GPU加速或其他优化手段。因此,在集成和使用插件时,务必参考插件的官方文档,了解最佳实践和性能优化建议。

回到顶部