Octopus-iOS 2.0.0

Octopus-iOS 2.0.0

Kwangsoo YeoIan LaveryMohammadreza RostamEric Mikulin 维护。



  • Picovoice

Octopus

GitHub

PyPI Maven Central

Picovoice在加拿大温哥华制作

Twitter URL

YouTube Channel Views

Octopus 是 Picovoice 的语音到索引引擎。它通过不依赖文本表示直接索引语音。这种仅声学的途径通过消除词汇量限制和消除竞争假设(例如同音异义词)问题来提高准确性。

目录

示例

Python 示例

安装演示包

sudo pip3 install pvoctopusdemo

在终端运行以下命令

octopus_demo  --access_key {AccessKey} --audio_paths ${AUDIO_PATHS}

${AccessKey} 替换为您从 Picovoice 控制台 获得的 AccessKey,并将 ${AUDIO_PATHS} 替换为空格分隔的音频文件列表。八爪鱼开始处理音频文件,并要求您输入搜索短语,并以交互方式显示结果。

有关 Python 演示的更多信息,请转到 demo/python

C 示例

构建演示

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

索引指定的音频文件

./demo/c/build/octopus_index_demo ${LIBRARY_PATH} ${ACCESS_KEY} ${AUDIO_PATH} ${INDEX_PATH}

然后搜索索引以查找指定的短语

./demo/c/build/octopus_search_demo ${LIBRARY_PATH} ${MODEL_PATH} ${ACCESS_KEY} ${INDEX_PATH} ${SEARCH_PHRASE}

${LIBRARY_PATH} 替换为位于 lib 下的适当库的路径,将 ${ACCESS_KEY} 替换为您从 Picovoice 控制台 获得的 AccessKey,将 ${AUDIO_PATH} 替换为指定音频文件的路径和格式,将 ${INDEX_PATH} 替换为缓存索引文件路径,将 ${SEARCH_PHRASE} 替换为搜索短语。

有关 C 示例的更多信息,请转到 demo/c

Android 示例

使用 Android Studio,将 demo/android/OctopusDemo 打开为 Android 项目。

MainActivity.java 内将 "${YOUR_ACCESS_KEY_HERE}" 替换为您从 Picovoice 控制台 获得的 AccessKey。然后运行演示。

有关 Android 演示的更多信息,请转到 demo/android

iOS 示例

demo/ios/OctopusDemo 中,请在终端运行以下命令以安装 Octopus CocoaPod

pod install

"{YOUR_ACCESS_KEY_HERE}" 替换在 ViewModel.swift 中的位置,这里替换为你从 Picovoice 控制台 获得的 AccessKey。然后,使用 Xcode 打开生成的 OctopusDemo.xcworkspace 并运行应用程序。

有关 iOS 示例的更多信息,请访问 demo/ios

Web 示例

demo/web 中,请在终端运行以下命令

yarn
yarn start

(或)

npm install
npm run start

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

SDKs

Python

创建引擎实例

import pvoctopus

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

handle = pvoctopus.create(access_key=access_key)

索引原始音频数据或文件

import pvoctopus

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

handle = pvoctopus.create(access_key=access_key)

audio_data = [...]
metadata = handle.index_audio_data(audio_data)

# or

audio_file_path = "/path/to/my/audiofile.wav"
metadata = handle.index_audio_file(audio_file_path)

# Then search the metadata for phrases

matches = handle.search(metadata, phrases=['avocado'])

avocado_matches = matches['avocado']
for match in avocado_matches:
    print(f"Match for `avocado`: {match.start_sec} -> {match.end_sec} ({match.probability})")

完成任务后,需要显式释放资源,执行 handle.delete()

C

包含相关信息的头文件 pv_octopus.h。构建对象实例

    const char *model_path = "..."; // absolute path to the model file available at `lib/common/octopus_params.pv`
    const char *access_key = "..." // AccessKey provided by Picovoice Console (https://console.picovoice.ai/)
    pv_octopus_t *handle = NULL;
    pv_status_t status = pv_octopus_init(access_key, model_path, &handle);
    if (status != PV_STATUS_SUCCESS) {
        // error handling logic
    }

使用构建的对象索引音频数据

const char *audio_path = "..."; // absolute path to the audio file to be indexed
void *indices = NULL;
int32_t num_indices_bytes = 0;
pv_status_t status = pv_octopus_index_file(handle, audio_path, &indices, &num_indices_bytes);
if (status != PV_STATUS_SUCCESS) {
    // error handling logic
}

搜索索引数据

const char *phrase = "...";
pv_octopus_match_t *matches = NULL;
int32_t num_matches = 0;
pv_status_t status = pv_octopus_search(handle, indices, num_indices_bytes, phrase, &matches, &num_matches);
if (status != PV_STATUS_SUCCESS) {
    // error handling logic
}

完成操作后,务必释放所获取的资源

pv_octopus_delete(handle);

Android

创建引擎实例

import ai.picovoice.octopus.*;

final String accessKey = "..."; // AccessKey provided by Picovoice Console (https://console.picovoice.ai/)
try {
    Octopus handle = new Octopus.Builder().setAccessKey(accessKey).build(appContext);
} catch (OctopusException ex) { }

使用构建的对象索引音频数据

final String audioFilePath = "/path/to/my/audiofile.wav"
try {
    OctopusMetadata metadata = handle.indexAudioFile(audioFilePath);
} catch (OctopusException ex) { }

搜索索引数据

HashMap <String, OctopusMatch[]> matches = handle.search(metadata, phrases);

for (Map.Entry<String, OctopusMatch[]> entry : map.entrySet()) {
    final String phrase = entry.getKey();
    for (OctopusMatch phraseMatch : entry.getValue()){
        final float startSec = phraseMatch.getStartSec();
        final float endSec = phraseMatch.getEndSec();
        final float probability = phraseMatch.getProbability();
    }
}

完成操作后,务必释放所获取的资源

metadata.delete();
handle.delete();

iOS

创建引擎实例

import Octopus

let accessKey : String = // .. AccessKey provided by Picovoice Console (https://console.picovoice.ai/)
do {
    let handle = try Octopus(accessKey: accessKey)
} catch { }

使用构建的对象索引音频数据

let audioFilePath = "/path/to/my/audiofile.wav"
do {
    let metadata = try handle.indexAudioFile(path: audioFilePath)
} catch { }

搜索索引数据

let matches: Dictionary<String, [OctopusMatch]> = try octopus.search(metadata: metadata, phrases: phrases)
for (phrase, phraseMatches) in matches {
    for phraseMatch in phraseMatches {
        var startSec = phraseMatch.startSec;
        var endSec = phraseMatch.endSec;
        var probability = phraseMatch.probability;
    }
}

完成操作后,务必释放所获取的资源

handle.delete();

Web

使用yarn安装Web SDK

yarn add @picovoice/octopus-web

或使用npm

npm install --save @picovoice/octopus-web

使用OctopusWorker创建引擎实例并转录音频文件

import { Octopus } from "@picovoice/octopus-web";
import octopusParams from "${PATH_TO_BASE64_OCTOPUS_PARAMS}";

function getAudioData(): Int16Array {
... // function to get audio data
  return new Int16Array();
}

const octopus = await OctopusWorker.create(
  "${ACCESS_KEY}",
  { base64: octopusParams }
);

const octopusMetadata = await octopus.index(getAudioData());
const searchResult = await octopus.search(octopusMetadata, "${SEARCH_PHRASE}");
console.log(searchResult);

用你在Picovoice控制台获得的您的密钥替换${ACCESS_KEY}。最后,完成操作后,使用octopus.release()释放资源。

发布

v1.2.0 2022年8月11日

  • 新增对法语、德语、西班牙语、日语、韩语、意大利语和葡萄牙语的语言支持
  • 改进测试基础设施

v1.1.0 2022年5月12日

  • 各种错误修复和改进

v1.0.0 2021年10月8日

  • 初始发布。