28 个版本
0.4.5 | 2019 年 8 月 14 日 |
---|---|
0.4.4 | 2019 年 8 月 7 日 |
0.4.3 | 2019 年 6 月 25 日 |
0.3.24 | 2019 年 6 月 12 日 |
0.3.11 | 2019 年 3 月 15 日 |
#659 in 异步
63 个月下载量
270KB
2.5K SLoC
luis_sys
Rust 对 Microsoft LUIS API 的 FFI 绑定。
Microsoft LUIS C/C++ SDK 的 Rust 风格包装器。
使用方法
将 luis_sys 添加到项目 Cargo.toml
的依赖部分,如下所示:
[dependencies]
luis_sys = "^0.3.8"
注意:该包包括 Cognitive Services Speech SDK Linux 版本 1.3.1。Windows 版本未进行测试。
示例
使用 luis_sys、logger 和 futures 的 crate 创建主函数入口。
use env_logger;
use futures::{Future, Stream};
use log::{error, info};
use luis_sys::{builder::RecognizerConfig, events::Flags, Result};
use std::env;
use tokio;
fn main() {
env::set_var("RUST_BACKTRACE", "1");
env::set_var("RUST_LOG", "debug");
env_logger::init();
info!("Start ASR test...");
recognize_test().unwrap();
info!("Stop ASR test...");
}
使用配置信息和订阅信息构建构建器。音频输入是 example
文件夹中的 wav 文件。
let mut factory = RecognizerConfig::from_subscription(
"YourLanguageUnderstandingSubscriptionKey",
"YourLanguageUnderstandingServiceRegion",
)?;
// Choose the events to subscribe.
let flags = Flags::Recognition
| Flags::SpeechDetection
| Flags::Session
| Flags::Connection
| Flags::Canceled;
// Add intents if you want a intent recognizer. They are phrases or intents names of a pre-trained language understanding model.
let intents = vec![
"否定".to_string(),
"肯定".to_string(),
"中秋快乐祝你们平安无事快乐健康的生活".to_string(),
"祝福".to_string(),
];
factory
.set_flags(flags)
.set_audio_file_path("examples/chinese_test.wav")
.set_model_id("YourLanguageUnderstandingAppId")
.set_intents(intents)
.put_language("TheLanguageOfAudioInput")?;
.put_detailed_result(true)?;
factory.recognizer()
构建仅语音识别的识别器。 factory.intent_recognizer()
构建语音意图识别器。
启动阻塞的意图识别,并在单个语音后返回。单个语音的结束是通过在末尾监听静音或处理最多 15 秒的音频来确定的。
fn recognize_once(factory: &RecognizerConfig) -> Result {
info!("Synchronous ASR ");
let recognizer = factory.recognizer()?;
let result = recognizer.recognize()?;
info!("done: {}", result);
Ok(())
}
在 tokio 运行时中进行异步意图识别。
fn recognize_stream(factory: &RecognizerConfig) -> Result {
info!("Asynchronous ASR, streaming Event object");
let mut reco = factory.intent_recognizer()?;
let promise = reco
.start()?
// Add event filter to choice events you care.
.set_filter(Flags::Recognized | Flags::SpeechDetection)
.for_each(|msg| {
info!("result: {:?}", msg.into_result());
Ok(())
});
tokio::run(promise);
Ok(())
}
翻译和合成音频。
factory
// Add one or many target languages to tranlate from speech.
.add_target_language("en")?
// Enable audio synthesis output.
.put_translation_features("textToSpeech")?
// Select voice name appropriate for the target language.
.put_voice_name("Microsoft Server Speech Text to Speech Voice (en-US, JessaRUS)")?;
info!("Asynchronous translation and audio synthesis");
let mut reco = factory.translator()?;
let promise = reco
.start()?
.set_filter(Flags::Recognized | Flags::Synthesis)
.for_each(|evt| {
// Handle the translation or synthesis result.
Ok(())
})
.map_err(|err| error!("{}", err));
tokio::run(promise);
EventStream
由 Recognizer::start
返回,并实现为 futures::Stream
以进行异步操作。可以通过 set_filter
、resulting
、json
和 text
进行细化,以泵送不同格式的结果。您可以通过 Future/Stream 组合来完成这些操作和更多操作。
版本
查看 变更日志。
注意
-
该包仍在开发中,谨慎使用于生产环境。
-
由于 LUIS 服务仅具有 C/C++ 版本的语音 SDK,因此当前版本仅支持 LUIS 的一小部分功能,而 LUIS SDK 正处于快速发展阶段。
-
未测试 Windows 版本 SDK。
-
Linux 版本 SDK 目前仅支持 Ubuntu 发行版。
-
请首先阅读先决条件。
依赖项
~3-14MB
~172K SLoC