Eagle-iOS 1.0.1

Eagle-iOS 1.0.1

Eric MikulinIan LaveryKwangsoo Yeo维护。



Eagle-iOS 1.0.1

  • Picovoice

Eagle

GitHub release GitHub

PyPI npm Maven Central CocoaPods

Picovoice 在加拿大温哥华制造

Twitter URL

YouTube Channel Views

Eagle 是一个设备端扬声器识别引擎。Eagle 是

  • 隐私性;所有声音处理都在本地运行。
  • 跨平台
    • Linux (x86_64), macOS (x86_64, arm64), Windows (x86_64)
    • Android 和 iOS
    • Chrome, Safari, Firefox 和 Edge
    • 树莓派 (4, 3) 和 NVIDIA Jetson Nano

请注意,Eagle 当前处于开发阶段。虽然我们优先考虑稳定性和兼容性,但 Eagle 的某些方面可能会在不断完善和提升引擎以提供最佳用户体验的过程中进行更改。

目录

概述

Eagle 包含两个不同的步骤:注册和识别。在注册步骤中,Eagle 分析特定说话者的一系列语音,以学习他们的独特语音指纹。这一步会生成一个 个人资料,这个资料可以存储并用于下一步。在识别步骤中,Eagle 使用注册阶段的 个人资料 来注册说话者。然后,Eagle 在实时将输入的音频帧与所有注册的说话者的语音指纹进行比较,以确定它们之间的相似度。

AccessKey

AccessKey 是您的身份验证和授权令牌,用于部署包括 Eagle 在内的 Picovoice SDK。任何使用 Picovoice 的用户都需要一个有效的 AccessKey。您必须保护您的 AccessKey 的私密性。即使在离线运行情况下,您仍需要互联网连接以使用 Picovoice 许可证服务器验证您的 AccessKey。

AccessKey 也会验证您的使用是否在账户的限额范围内。所有注册 Picovoice 控制台 的用户都会获得此处描述的 免费套餐 使用权。如果您想提高您的限额,您可以购买订阅计划。

示例

Python 示例

安装示例包

pip3 install pveagledemo

说话人注册

创建新的说话人资料

eagle_demo_mic enroll --access_key ${ACCESS_KEY} --output_profile_path ${OUTPUT_PROFILE_PATH}

eagle_demo_file enroll \
    --access_key ${ACCESS_KEY} \
    --enroll_audio_paths ${ENROLL_AUDIO_PATHS}
    --output_profile_path ${OUTPUT_PROFILE_PATH}

说话人识别

测试说话人识别引擎

eagle_demo_mic test \
    --access_key ${ACCESS_KEY} \
    --input_profile_paths ${INPUT_PROFILE_PATH}

eagle_demo_file test \
    --access_key ${ACCESS_KEY} \
    --input_profile_paths ${INPUT_PROFILE_PATH}
    --test_audio_paths ${TEST_AUDIO_PATHS}

${ACCESS_KEY} 替换为您从 Picovoice 控制台获得的。

有关 Python 示例的更多信息,请访问 demo/python

Android 示例

使用 Android Studio,将 demo/android/EagleDemo 打开为 Android 项目,然后运行应用程序。

打开文件 MainActivity.java,然后将 "${YOUR_ACCESS_KEY_HERE}" 替换为您的 AccessKey

iOS 示例

要运行示例,转到 demo/ios/EagleDemo 并运行。

pod install

在文件 ViewModel.swift 中,将代码 let accessKey = "${YOUR_ACCESS_KEY_HERE}" 替换为您的 AccessKey

然后,使用 Xcode 打开生成的 EagleDemo.xcworkspace 并运行应用程序。

C 示例

构建示例

cmake -S demo/c/ -B demo/c/build && cmake --build demo/c/build --target eagle_demo_mic

列出可用的音频输入设备

./demo/c/build/eagle_demo_mic -s

扬声器注册

注册新的扬声器

./demo/c/build/eagle_demo_mic -l ${LIBRARY_PATH} -m ${MODEL_PATH} -a ${ACCESS_KEY} -e ${OUTPUT_PROFILE_PATH}

扬声器识别

测试扬声器识别引擎

./demo/c/build/eagle_demo_mic -l ${LIBRARY_PATH} -m ${MODEL_PATH} -a ${ACCESS_KEY} -i ${INPUT_PROFILE_PATH}

${LIBRARY_PATH} 替换为 lib 目录下可用的库路径,将 ${MODEL_PATH} 替换为 lib/common 目录下可用的模型文件路径,将 ${ACCESS_KEY} 替换为从 Picovoice 控制台 获得的 AccessKey。注册步骤中的 ${OUTPUT_PROFILE_PATH} 是生成的扬声器配置文件路径。识别步骤中的 ${INPUT_PROFILE_PATH} 是要测试的生成扬声器配置文件路径。

有关 C 示例的更多信息,请访问 demo/c

Web 示例

demo/web 在终端运行以下命令:

yarn
yarn start

(或)

npm install
npm run start

在浏览器中打开 https://:5000 来尝试示例。

SDKs

Python

安装Python SDK

pip3 install pveagle

发言人注册

创建剖析器的实例

import pveagle

# AccessKey obtained from Picovoice Console (https://console.picovoice.ai/)
access_key = "${ACCESS_KEY}"
eagle_profiler = pveagle.create_profiler(access_key)

创建新的说话人资料

def get_next_enroll_audio_data():
    pass


percentage = 0.0
while percentage < 100.0:
    percentage, error = eagle_profiler.enroll(get_next_enroll_audio_data())

注册完成后导出发言人配置文件

speaker_profile = eagle_profiler.export()

释放剖析器获取的资源

eagle_profiler.delete()

发言人识别

使用之前导出的发言人配置文件创建引擎实例

eagle = pveagle.create_recognizer(access_key, speaker_profile)

处理传入的音频帧

def get_next_audio_frame():
    pass


while True:
    score = eagle.process(get_next_audio_frame())

最后,务必显式释放资源

eagle.delete()

Android

要将包包含到您的Android项目中,请确保已经在您的顶级build.gradle文件中包含了mavenCentral(),然后向您的应用的build.gradle添加以下内容:

dependencies {
    implementation 'ai.picovoice:eagle-android:${LATEST_VERSION}'
}

语音注册

创建剖析器的实例

import ai.picovoice.eagle.*;

final String accessKey = "${ACCESS_KEY}";

try {
    EagleProfiler eagleProfiler = new EagleProfiler.Builder()
            .setAccessKey(accessKey)
            .build();
} catch (EagleException e) { }

创建新的说话人资料

public short[] getNextEnrollAudioData() {
    // get audio data
}

EagleProfilerEnrollResult result = null;
try {
    while (result != null && result.getPercentage() < 100.0) {
        result = eagleProfiler.enroll(getNextEnrollAudioData());
    }
} catch (EagleException e) { }

注册完成后导出发言人配置文件

try {
    EagleProfile speakerProfile = eagleProfiler.export();
} catch (EagleException e) { }

释放剖析器获取的资源

eagleProfiler.delete();

语音识别

使用之前导出的发言人配置文件创建引擎实例

import ai.picovoice.eagle.*;

final String accessKey = "${ACCESS_KEY}";

try {
    Eagle eagle = new Eagle.Builder()
        .setAccessKey(accessKey)
        .setSpeakerProfile(speakerProfile)
        .build();
} catch (EagleException e) { }

处理传入的音频帧

public short[] getNextAudioFrame() {
    // get audio frame
}


try {
    while (true) {
        float[] scores = eagle.process(getNextAudioFrame());
    }
} catch (EagleException e) { }

最后,务必显式释放资源

eagle.delete()

iOS

Eagle iOS绑定可以通过CocoaPods获得。要将它导入到您的iOS项目中,请将以下行添加到您的Podfile,然后运行pod install命令:

pod 'Eagle-iOS'

语音注册

创建剖析器的实例

import pveagle

let accessKey : String = // .. AccessKey obtained from Picovoice Console (https://console.picovoice.ai/)
let eagleProfiler = try EagleProfiler(accessKey: accessKey)

创建新的说话人资料

func get_next_enroll_audio_data(numSamples: Int) -> [Int16] {
    // ...
}

do {
    let numSamples = eagleProfiler.minEnrollSamples()

    var percentage = 0.0
    var feedback: EagleProfilerEnrollFeedback?

    while (percentage < 100.0) {
        (percentage, feedback) = try eagleProfiler.enroll(pcm: get_next_enroll_audio_data(numSamples: numSamples))
    }
} catch { }

注册完成后导出发言人配置文件

let speakerProfile = try eagleProfiler.export()

释放剖析器获取的资源

eagleProfiler.delete()

说话人识别

使用之前导出的发言人配置文件创建引擎实例

let eagle = Eagle(accessKey: accessKey, speakerProfiles: [speakerProfile])

处理传入的音频帧

func get_next_audio_frame() -> [Int16] {
    // ...
}

do {
    let profileScores = try eagle.process(pcm: get_next_audio_frame())
} catch { }

最后,务必显式释放资源

eagle.delete()

C

include/pv_eagle.h 头文件包含相关信息。

说话人注册

构建一个分析实例

const char *access_key = "${ACCESS_KEY}";
const char *model_path = "${MODEL_PATH}";

pv_eagle_profiler_t *eagle_profiler = NULL;
pv_status_t status = pv_eagle_profiler_init(
            access_key,
            model_path,
            &eagle_profiler);
if (status != PV_STATUS_SUCCESS) {
    // error handling logic
}

${ACCESS_KEY} 替换为从 Picovoice 控制台获得的 AccessKey,将 ${MODEL_PATH} 替换为位于 lib/common 下的模型文件路径。

使用 eagle_profiler 创建一个新的说话人配置文件

extern const int16_t *get_next_enroll_audio_frame(void);
extern const int32_t get_next_enroll_audio_num_samples(void);

float enroll_percentage = 0.0f;
pv_eagle_profiler_enroll_feedback_t feedback = PV_EAGLE_PROFILER_ENROLLMENT_ERROR_AUDIO_OK;

while (enroll_percentage < 100.0f) {
  status = pv_eagle_profiler_enroll(
          eagle_profiler,
          get_next_enroll_audio_frame(),
          get_next_enroll_audio_num_samples(),
          &feedback,
          &enroll_percentage);
  if (status != PV_STATUS_SUCCESS) {
      // error handling logic
  }
}

int32_t profile_size_bytes = 0;
status = pv_eagle_profiler_export_size(eagle_profiler, &profile_size_bytes);
void *speaker_profile = malloc(profile_size_bytes);
status = pv_eagle_profiler_export(
        eagle_profiler,
        speaker_profile);
if (status != PV_STATUS_SUCCESS) {
    // error handling logic
}

一旦说话人配置文件导出,可以释放由分析器获取的资源

pv_eagle_profiler_delete(eagle_profiler);

说话人识别

使用之前导出的发言人配置文件创建引擎实例

pv_eagle_t *eagle = NULL;
pv_status_t status = pv_eagle_init(
        access_key,
        model_path,
        1,
        (const void *const *) &speaker_profile,
        &eagle);
if (status != PV_STATUS_SUCCESS) {
    // error handling logic
}

现在可以使用 eagle 处理传入的音频帧

extern const int16_t *get_next_audio_frame(void);
const int32_t frame_length = pv_eagle_frame_length();

float score = 0.f;
while (true) {
    const int16_t *pcm = get_next_audio_frame();
    const pv_status_t status = pv_eagle_process(eagle, pcm, &score);
    if (status != PV_STATUS_SUCCESS) {
        // error handling logic
    }
}

最后,完成后确保释放获取的资源

pv_eagle_delete(handle);

网页

使用 yarn(或 npm)安装 Eagle 软件包

yarn add @picovoice/eagle-web

扬声器注册

创建 EagleProfiler 的实例

const eagleModel = {
  publicPath: ${MODEL_RELATIVE_PATH},
  // or
  base64: ${MODEL_BASE64_STRING},
}

const eagleProfiler = await EagleProfiler.create(
        ${ACCESS_KEY},
        eagleModel);

${ACCESS_KEY} 替换为从 Picovoice 控制台获取的 AccessKey,将模型选项替换为位于 lib/common 下的模型文件路径或该文件的 base64 字符串。

使用 EagleProfiler 创建新的扬声器配置文件

function getAudioData(numSamples): Int16Array {
  // get audio frame of size `numSamples`
}

let percentage = 0;
while (percentage < 100) {
  const audioData = getAudioData(eagleProfiler.minEnrollSamples);

  const result: EagleProfilerEnrollResult = await eagleProfiler.enroll(audioData);
  if (result.feedback === EagleProfilerEnrollFeedback.AUDIO_OK) {
      // audio is good!
  } else {
      // feedback code will tell you why audio was not used in enrollment
  }
  percentage = result.percentage;
}

// export speaker profile
const speakerProfile: EagleProfile = eagleProfiler.export();

扬声器识别

使用通过 EagleProfiler 创建的一个或多个扬声器配置文件创建引擎实例

const eagle = await Eagle.create(
        ${ACCESS_KEY},
        eagleModel,
        speakerProfile);

实时处理音频帧并获取扬声器评分(即他们说话的可能性)

function getAudioData(numSamples): Int16Array {
  // get audio frame of size `numSamples`
}

while (true) {
  const audioData = getAudioData(eagle.frameLength);
  const scores: number[] = await eagle.process(audioData);
}

版本发布

v0.1.0 - 2023年5月29日

  • 公测版本。

常见问题解答

您可以在这里找到常见问题解答。