#microsoft #deep-learning #speech #api-bindings #ffi #luis

sys luis_sys

Microsoft LUIS API 的 FFI 绑定

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 异步

Download history 98/week @ 2024-03-31 1/week @ 2024-04-07

63 个月下载量

MIT 许可证

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);

EventStreamRecognizer::start 返回,并实现为 futures::Stream 以进行异步操作。可以通过 set_filterresultingjsontext 进行细化,以泵送不同格式的结果。您可以通过 Future/Stream 组合来完成这些操作和更多操作。

版本

查看 变更日志

注意

  • 该包仍在开发中,谨慎使用于生产环境。

  • 由于 LUIS 服务仅具有 C/C++ 版本的语音 SDK,因此当前版本仅支持 LUIS 的一小部分功能,而 LUIS SDK 正处于快速发展阶段。

  • 未测试 Windows 版本 SDK。

  • Linux 版本 SDK 目前仅支持 Ubuntu 发行版。

  • 请首先阅读先决条件

依赖项

~3-14MB
~172K SLoC