#bindings #nlp #wrapper #bindings-generator #audio #neural-network

sys aprilasr-sys

为 April-asr C API (libaprilasr) 提供的低级 FFI 绑定

4 个版本

0.1.3 2024年2月4日
0.1.2 2024年2月3日
0.1.1 2024年1月29日
0.1.0 2024年1月27日

#400多媒体

39 每月下载
aprilasr 中使用

0BSD 许可证

210KB
5.5K SLoC

C 5K SLoC // 0.1% comments C++ 333 SLoC // 0.2% comments Rust 49 SLoC // 0.1% comments

aprilasr-sys

april-asr C API (libaprilasr) 提供的低级 FFI 绑定。

概述

使用 CMake 从源代码编译 libaprilasrOUT_DIR,并生成 April API 绑定,通过 vendored 上游源代码提供,该源代码指向由 git 子模块定义的特定提交 sha。

要求

构建需要以下系统库

  • libonnxruntime
  • libclang

使用 locate 搜索已安装的库。例如,在 Linux 上运行命令 locate libonnxruntime.so 以确定是否安装了 ONNX Runtime

安装

要获取发布到 crates.io 的最新未撤回版本

cargo add aprilasr-sys

或者使用 git 通过 cargo 获取开发分支的最新版本

cargo add --git https://codeberg.org/vhs/aprilasr-sys.git

也可以将此 crate 作为 vendored

mkdir crates && \
    (cd crates; git submodule add https://codeberg.org/vhs/aprilasr-sys)

一旦克隆,更新依赖项的 Cargo.toml 清单如下

[dependencies]
aprilasr-sys = { path = "crates/aprilasr-sys" }

示例

有关基本用法示例,请参阅 examples/init.rs 并运行以下命令

cargo run --example init

您应该看到类似以下输出

April ASR api v1 initialized and ready for model.

开发

首先克隆 vendored 源代码

git submodule update --init --recursive

要生成绑定,运行以下命令

cargo build [--release]

要指定包含目录,请在运行构建之前设置环境变量 APRIL_INCLUDE_DIR

要检查生成的绑定

bat $(echo $(exa target/*/build/*/out/bindings.rs) | head -1)

该命令需要 batexa rust 二进制文件,并以语法高亮显示输出。

版本控制

除非 april-asr 采用 语义版本控制,否则请考虑使用 chrono 来解析日期格式。

let date_str = "2023.05.12";
let native_date = chrono::NaiveDate::parse_from_str(date_str, "%Y.%m.%d");
p!("{:?}", native_date);

在这里,p!build.rs 中的一个调试助手,而 date_str 表示 VERSION,它在 vendor/april-asr/CMakeLists.txt 文件中。通过一些额外的工作,cmake-parser 看起来非常适合解析文件以获取版本。

基于日期的版本控制目前尚未在 build.rs 构建脚本中实现。一旦实现了版本控制,将其用作 pkg-config 的输入以扫描系统中的库也将是理想的。

有关其他可能的改进,请参阅 制作 *-sys crate

供应商

由于我们使用 git 子模块来供应商 April ASR 源代码,因此我们有更新子模块以在上游源代码更改时生成新绑定的能力。

要查看 april-asr 子模块的当前提交

git submodule status | awk '{print substr($1, 1, 7)}'

要将子模块更新到子模块的 main 分支的最新提交

git submodule update --remote --recursive --merge

此命令从子模块的远程仓库获取最新的提交,检出由 main 分支引用的提交,并在主仓库中更新子模块。

发布

crates.io 打包此 crate 的步骤

  1. 供应商 中所述更新 git 子模块。
  2. 运行 cargo clean 以删除现有的构建工件。
  3. 运行 cargo build --release 以更新生成的绑定。
  4. 开发 中所述检查绑定。
  5. 运行 cargo test 以执行包括 bindgen 的单元测试。
  6. 运行 cargo run --example init 以检查示例。
  7. 运行 cargo doc 以生成 crate 文档并对其进行审查。
  8. Cargo.toml 清单中提升软件包版本。
  9. 运行 cargo publish --dry-run 以审查您的工作。
  10. 然后,运行 cargo logincargo publish 以发布 crate。

发布后,访问 docs.rs 以审查 crate 文档

依赖关系

~0–2MB
~40K SLoC