Octopus
由Picovoice在加拿大温哥华制作
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日
- 初始发布。