#bindings #histopathology #microscopy #interface #org

程序+库 openslide

Rust 对 OpenSlide C 库的绑定

2 个不稳定版本

使用旧的 Rust 2015

0.2.0 2018年11月19日
0.1.0 2018年6月22日

#704科学

36 每月下载量

MIT/Apache

2MB
1.5K SLoC

OpenSlide Rust

Rust 对 OpenSlide (https://openslide.org/) 的绑定。

此作品与官方 OpenSlide 项目无关联。

要求

此库是为以下构建的

OpenSlide 3.4.1
Rust 1.30

我不能保证它适用于其他版本。

构建 OpenSlide

https://openslide.org/download/ 下载 OpenSlide 3.4.1 到某个位置(此处,DOWNLOAD_DIR

在某处构建项目(此处,BUILD_DIR

cd BUILD_DIR
tar xvzf DOWNLOAD_DIR/openslide-3.4.1.tar.gz
cd openslide-3.4.1
./configure
make
sudo make install

在构建输出中,您将看到类似以下内容

Libraries have been installed in:
   /usr/local/lib

为了使库可发现,我们将它(称为 LIB_DIR)追加到环境变量 LD_LIBRARY_PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:LIB_DIR

现在您应该能够编译并运行使用此 OpenSlide 绑定的项目。请参阅 examples 文件夹中的示例。

接口

此库提供了一种 原生 接口和一种更 方便 的接口。

原生接口

原生接口包含对 OpenSlide API 的原始绑定,没有任何冗余。此接口应接近原始库中的 C 接口,包括函数命名和文档。这至少有两个目的

1: 您可以轻松使用 C 库的文档 2: 如果您对我的便利包装不满意,您可以使用这个原始 API 创建自己的。

//! Example using the raw binding api

extern crate failure;
extern crate openslide;

use failure::Error;
use openslide::bindings;

fn main() -> Result<(), Error> {
    let filename = "assets/CMU-1-Small-Region.svs";
    let osr = bindings::open(filename)?;
    let num_levels = bindings::get_level_count(osr)?;
    println!("Slide has {} levels", num_levels);
    bindings::close(osr);

    Ok(())
}

请注意,对正确使用(如检查有效级别数量或非负缩放因子)的断言很少或没有。另外,如上例所示,您必须显式关闭幻灯片。

便利接口

便利接口封装了原生接口,并提供了更接近Rust风格的接口。这些封装将通过类型系统和其它检查来确保正确的使用。由于OpenSlide结构体实现了Drop特质,因此无需显式关闭已打开的幻灯片。

//! Example using the convenience binding api

extern crate failure;
extern crate openslide;

use std::path::Path;
use failure::Error;
use openslide::OpenSlide;

fn main() -> Result<(), Error> {
    let filename = Path::new("assets/CMU-1-Small-Region.svs");
    let os = openslide::OpenSlide::new(&filename)?;
    let num_levels = os.get_level_count()?;
    println!("Slide has {} levels", num_levels);

    Ok(())
}

依赖项

~13MB
~88K SLoC