Flutter隐私保护通讯插件whisper_dart的使用

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

Flutter隐私保护通讯插件whisper_dart的使用

Whisper简介

Whisper 是一个离线语音转文字的库,可以用于Flutter应用中实现语音识别功能。它基于OpenAI的WhisperWhisper.cpp

注意:此库目前不在维护中,仅作为示例。如果需要将音频转录为文本,请考虑使用galaxeus_ai

演示图

安装

添加依赖

pubspec.yaml文件中添加以下内容:

dependencies:
  whisper_dart: ^latest_version # 请替换为最新版本号

然后运行命令安装依赖:

dart pub add whisper_dart

编译原生库

Linux平台

git clone --recursive https://github.com/azkadev/whisper_dart.git
cd whisper_dart/native_lib
make
sudo make install

Android平台

git clone --recursive https://github.com/azkadev/whisper_dart.git
cd whisper_dart/native_lib
make
make compile.android

示例代码

下面是一个完整的Dart程序示例,展示了如何使用whisper_dart进行语音转文字:

import 'dart:io';
import 'package:whisper_dart/scheme/scheme.dart';
import 'package:whisper_dart/whisper_dart.dart';

void main(List<String> args) async {
  // 初始化Whisper对象,指定共享库路径
  Whisper whisper = Whisper(whisperLib: "./path_library_shared_whisper");

  // 获取并打印Whisper版本信息
  Version whisperVersion = await whisper.getVersion();
  print('Whisper Version: $whisperVersion');

  try {
    // 从wav格式音频文件中提取文本(需确保音频为16位PCM编码)
    Transcribe transcribe = await whisper.transcribe(
      audio: "./path_file_audio_wav_16_bit",
      model: "./path_model_whisper_bin", // 需要下载的模型文件路径
      language: "id", // 支持的语言代码,如"en"、"zh"等
    );
    print('Transcribed Text: ${transcribe.text}');
    
    // 自动转换任意格式音频文件到wav后进行转录
    Transcribe transcribeAnyAudio = await whisper.transcribe(
      audio: WhisperAudioconvert.convert(
        audioInput: File("./path_audio_any_format"),
        audioOutput: File("./path_audio_convert.wav"),
      ).path,
      model: "./path_model_whisper_bin",
      language: "id",
    );
    print('Transcribed Text from Any Audio Format: ${transcribeAnyAudio.text}');
  } catch (e) {
    print('Error occurred: $e');
  }
}

注意事项

  • 支持的语言:Whisper支持多种语言,具体支持列表参见官方文档
  • 模型文件:需要预先下载适合的Whisper模型文件,并正确设置路径。
  • 音频格式要求:对于直接处理的音频文件,建议使用16位PCM编码的WAV文件;对于其他格式,可以通过WhisperAudioconvert.convert()方法自动转换为WAV格式再进行处理。

通过上述步骤,您应该能够在Flutter项目中集成whisper_dart来实现离线语音识别功能。如果有任何问题或需要进一步的帮助,请随时提问!


更多关于Flutter隐私保护通讯插件whisper_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter隐私保护通讯插件whisper_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用whisper_dart插件来实现隐私保护通讯的示例代码。whisper_dart是一个假想的插件名,用于说明目的,实际中请确保使用真实存在的插件,并根据其官方文档进行调整。

第一步:添加依赖

首先,在你的pubspec.yaml文件中添加whisper_dart插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  whisper_dart: ^x.y.z  # 替换为实际版本号

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

第二步:导入插件

在你的Dart文件中导入whisper_dart插件。

import 'package:whisper_dart/whisper_dart.dart';

第三步:初始化插件

通常,插件需要在应用启动时进行初始化。你可以在MainActivity.kt(对于Android)或AppDelegate.swift(对于iOS)中进行必要的初始化,但这里我们主要关注Dart代码。

第四步:使用插件进行加密和解密通讯

以下是一个简单的示例,展示如何使用whisper_dart插件进行消息的加密和解密。

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

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

class _MyAppState extends State<MyApp> {
  final Whisper _whisper = Whisper();
  String? encryptedMessage;
  String? decryptedMessage;
  String plainTextMessage = "Hello, this is a secret message!";

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Whisper Dart Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text('Plain Text Message:'),
              Text(plainTextMessage),
              SizedBox(height: 16),
              Text('Encrypted Message:'),
              Text(encryptedMessage ?? 'N/A'),
              SizedBox(height: 16),
              Text('Decrypted Message:'),
              Text(decryptedMessage ?? 'N/A'),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  // 加密消息
                  String? key = await _generateKey();
                  encryptedMessage = await _whisper.encrypt(plainTextMessage!, key!);
                  
                  // 解密消息
                  decryptedMessage = await _whisper.decrypt(encryptedMessage!, key);

                  // 更新UI
                  setState(() {});
                },
                child: Text('Encrypt and Decrypt'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  // 生成加密密钥(这是一个假想的函数,具体实现取决于whisper_dart插件的API)
  Future<String?> _generateKey() async {
    // 这里的实现依赖于whisper_dart的实际API
    // 假设它提供了一个生成密钥的方法
    // return await Whisper.generateKey();
    // 注意:这里返回的是一个假想的密钥字符串,实际应使用插件提供的API
    return "fake-encryption-key-12345";
  }
}

注意事项

  1. 密钥管理:在实际应用中,密钥的管理非常关键。确保密钥的安全存储和传输。
  2. 错误处理:在生产代码中,应添加适当的错误处理逻辑,以处理加密/解密过程中可能出现的异常。
  3. 插件文档:务必查阅whisper_dart插件的官方文档,以获取最新的API信息和最佳实践。

由于whisper_dart是一个假想的插件名,上述代码中的某些部分(如密钥生成)需要根据实际插件的API进行调整。如果whisper_dart是真实存在的插件,请参考其官方文档获取准确的API使用方法和示例代码。

回到顶部