病理切片图像查看器

PathView是一款高性能数字病理学切片图像查看器,支持GPU加速渲染、细胞分割可视化、组织分类热图及AI代理集成。

  • by PABannier
  • C++
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 PABannier/Pathview

使用说明

PathView

用于数字病理学的高性能全幻灯片图像(WSI)查看器。PathView通过模型上下文协议(MCP)将GPU加速的平铺渲染与多边形覆盖相结合,用于细胞分割可视化、组织分类热图和AI代理集成。


目录


特性

特性 描述
高性能渲染 通过多分辨率金字塔图块加载和LRU缓存实现平滑平移/缩放
远程流 通过WSIStreamer磁贴服务器从S3兼容存储流式传输幻灯片
多边形叠加 使用Protocol Buffers中的基于类的样式渲染细胞分割数据
组织热图可视化 GPU加速的基于图块的组织分类热图,具有空间索引功能,用于实时可视化
AI代理控制 通过MCP进行完全程序化控制,使用27个工具进行导航、快照和ROI分析
概览小地图 单击以使用实时视口指示器跳转导航
交叉平台的 原生支持macOS和Linux

快速开始

# Clone the repository
git clone https://github.com/PABannier/PathView.git
cd PathView

# Build (macOS with Homebrew vcpkg)
export VCPKG_TARGET_TRIPLET=arm64-osx
cmake -B build -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_TOOLCHAIN_FILE=$(brew --prefix vcpkg)/scripts/buildsystems/vcpkg.cmake
cmake --build build -j$(nproc)

# Run
./build/pathview

安装

先决条件

依赖关系 描述 安装
CMake 3.16+ 构建系统 brew install cmake 或 apt install cmake
C++17编译器 GCC 8+、Clang 10+或Apple Clang Xcode CLI工具或 apt install g++
OpenSlide WSI I/O库 brew install openslide 或 apt install libopenslide-dev
vcpkg 包管理器 brew install vcpkg 或 从源代码安装

从源代码构建

macOS

# Set triplet for your architecture
export VCPKG_TARGET_TRIPLET=arm64-osx   # Apple Silicon
# export VCPKG_TARGET_TRIPLET=x64-osx   # Intel

# Configure and build
cmake -B build \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_TOOLCHAIN_FILE=$(brew --prefix vcpkg)/scripts/buildsystems/vcpkg.cmake

cmake --build build -j$(nproc)

Linux

export VCPKG_TARGET_TRIPLET=x64-linux

cmake -B build \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_TOOLCHAIN_FILE=~/vcpkg/scripts/buildsystems/vcpkg.cmake

cmake --build build -j$(nproc)

验证安装

./build/pathview --version

用法

打开幻灯片

动作 方法
打开本地幻灯片 File → Open Slide... 或 Ctrl+O
连接到服务器 File → Connect to Server 或 Ctrl+Shift+O

导航

动作 输入
平移 鼠标左键拖动
缩放 鼠标滚轮或触控板捏住
跳转到区域 点击小地图
重置视图 View → Reset View

加载多边形覆盖

从协议缓冲区文件中加载单元分段数据:

File → Load Polygons...

多边形使用基于类的着色和细节级别优化进行渲染。

组织热图可视化

PathView在协议缓冲区文件中可用时自动加载组织分类热图。组织图提供像素级组织分类叠加,渲染为彩色热图。

特征:

  • 多层瓷砖:支持与载玻片分辨率级别匹配的金字塔结构组织图
  • 基于类别的着色:每个组织类别都用不同的颜色渲染
  • 空间索引:O(k)使用二维网格空间索引进行视口查询,以实现高效渲染
  • 每班能见度:在侧边栏中打开/关闭单个纸巾类
  • 不透明度控制:将叠加透明度从0%调整到100%
  • GPU加速:瓷砖被缓存为SDL纹理,以实现平滑渲染

控制:

  • View → “图层”面板→ 组织图谱部分
  • 使用复选框切换可见性
  • 使用滑块调整不透明度
  • 启用/禁用单个组织类别
  • 颜色指示器显示每个类的指定颜色

窗口标题会动态更新,以显示当前加载的幻灯片文件名(对于本地幻灯片)或幻灯片ID(对于远程幻灯片),从而可以轻松跟踪您正在查看的幻灯片。


远程幻灯片

PathView通过以下方式从S3兼容存储流式传输幻灯片 WSIStreamer,无需本地下载即可查看大型幻灯片。

快速演示

# Requires Docker, docker-compose, and MinIO client (mc)
./scripts/demo_remote_slide.sh ~/Downloads/sample.svs

此脚本:

  1. 启动本地MinIO+WSIStreamer实例
  2. 将幻灯片上传到本地S3存储桶
  3. 启动连接到服务器的PathView

连接到服务器

  1. 打开 File → Connect to Server (Ctrl+Shift+O)
  2. 输入服务器URL(例如。, http://localhost:3000)
  3. 如果需要,请输入身份验证密钥
  4. 从服务器浏览并选择幻灯片

生产部署

对于生产环境,请将WSIStreamer与您的S3兼容存储一起部署:

docker run -p 3000:3000 \
  -e WSI_S3_BUCKET=my-slides-bucket \
  -e AWS_ACCESS_KEY_ID=<your-access-key> \
  -e AWS_SECRET_ACCESS_KEY=<your-secret-key> \
  -e AWS_REGION=us-east-1 \
  wsistreamer/wsi-streamer

看 WSIStreamer文档 用于配置选项,包括身份验证、缓存和CORS。


AI代理集成

PathView提供了一个MCP(模型上下文协议)服务器,用于AI代理的程序控制。API可实现自动化组织分析工作流程,包括导航、屏幕截图捕获和基于ROI的细胞计数。

建筑

┌─────────────┐     MCP/JSON-RPC      ┌─────────────────┐      IPC       ┌─────────────┐
│  AI Agent   │ ◄──────────────────►  │  MCP Server     │ ◄────────────► │  PathView   │
│             │     HTTP + SSE        │  (port 9000)    │    TCP/JSON    │  GUI        │
└─────────────┘                       └─────────────────┘                └─────────────┘
                                              │
                                              ▼
                                      ┌─────────────────┐
                                      │  HTTP Server    │
                                      │  (port 8080)    │
                                      └─────────────────┘

启动MCP服务器

# Terminal 1: Start PathView GUI
./build/pathview

# Terminal 2: Start MCP server
./build/pathview-mcp

端点

服务 URL 描述
MCP服务器 http://127.0.0.1:9000 MCP API(基于HTTP+SSE的JSON-RPC)
HTTP服务器 http://127.0.0.1:8080 快照检索和MJPEG流

可用工具

MCP服务器公开了7个类别的27个工具:

类别 工具 描述
会话 agent_hello 注册代理并获取会话信息
滑动 load_slide, get_slide_info 加载和检查WSI文件
导航 nav_lock, nav_unlock, nav_lock_status, pan, zoom, zoom_at_point, center_on, reset_view, move_camera, await_move 带动画的视口控制
快照 capture_snapshot 将视口捕获为PNG
多边形 load_polygons, query_polygons, set_polygon_visibility 细胞分割覆盖
注释 create_annotation, list_annotations, get_annotation, delete_annotation, compute_roi_metrics ROI创建和细胞计数

工作流示例

# 1. Connect and register
session = await client.call_tool("agent_hello", {
    "agent_name": "pathology-analyzer",
    "agent_version": "1.0.0"
})

# 2. Load resources
await client.call_tool("load_slide", {"path": "/data/slide.svs"})
await client.call_tool("load_polygons", {"path": "/data/cells.pb"})

# 3. Acquire navigation lock
await client.call_tool("nav_lock", {
    "owner_uuid": "agent-12345",
    "ttl_seconds": 300
})

# 4. Navigate to region of interest
move = await client.call_tool("move_camera", {
    "center_x": 50000, "center_y": 30000,
    "zoom": 2.0, "duration_ms": 500
})

# 5. Wait for animation and capture
while not (await client.call_tool("await_move", {"token": move["token"]}))["completed"]:
    await asyncio.sleep(0.05)
snapshot = await client.call_tool("capture_snapshot", {})

# 6. Analyze region
annotation = await client.call_tool("create_annotation", {
    "vertices": [[48000, 28000], [52000, 28000], [52000, 32000], [48000, 32000]],
    "name": "Tumor ROI"
})
print(f"Cell count: {annotation['cell_counts']['total']}")

# 7. Release lock
await client.call_tool("nav_unlock", {"owner_uuid": "agent-12345"})

API文档

关于完整的API参考,包括所有参数、响应模式和错误代码:


数据格式

整张幻灯片图像

PathView支持由识别的所有格式 OpenSlide 对于本地幻灯片:

供应商 扩展
Aperio .svs, .tif
滨松 .vms, .vmu, .ndpi
徕卡 .scn
米拉克斯 .mrxs
飞利浦 .tiff
樱花 .svslide
支架 .tif
文塔纳 .bif, .tif
通用 平铺TIFF

对于来自S3存储桶的流媒体,PathView支持以下格式: WSI 流媒体:

供应商 扩展
Aperio .svs, .tif

细胞分割和组织图谱

PathView使用协议缓冲区文件(.pb, .protobuf)用于存储细胞多边形覆盖和组织分类热图。该格式支持:

细胞多边形:

  • 使用多边形坐标进行每细胞分割
  • 细胞类型分类和置信度评分
  • 每个单元格的质心坐标

组织热图:

  • 在多个分辨率级别上基于平铺的组织分割
  • 每像素组织分类(uint8类ID)
  • 可选zlib压缩,实现紧凑型存储
  • 类ID到组织类型名称映射

数据结构:

message SlideSegmentationData {
    required string slide_id;
    required int32 max_level;
    repeated TileSegmentationData tiles;
    map<int32, string> tissue_class_mapping;
}

message TileSegmentationData {
    required int32 level;
    required float x, y;           // Tile position in slide coordinates
    required int32 width, height;
    repeated SegmentationPolygon masks;     // Cell polygons
    required TissueSegmentationMap tissue_segmentation_map;  // Tissue heatmap
}

两个覆盖层都是从单个文件同时加载的,组织图为细胞级分析提供了背景。


文档

文档 描述
API 规范 完整的MCP API参考,包括类型、参数和示例
AI代理指南 AI代理开发人员集成指南
架构指南 内部架构和开发模式

贡献

欢迎捐款。请遵循以下指南:

  1. 问题:包括平台详细信息、PathView版本和复制步骤
  2. 拉取请求:遵循现有的代码风格,在适用的情况下包括测试
  3. 功能请求:在实施之前打开一个问题进行讨论

开发版本

cmake -B build-debug \
  -DCMAKE_BUILD_TYPE=Debug \
  -DCMAKE_TOOLCHAIN_FILE=$(brew --prefix vcpkg)/scripts/buildsystems/vcpkg.cmake

cmake --build build-debug

运行测试

./build/test/unit_tests

许可证

MIT许可证。看 许可证 了解详情。


Built for digital pathology research and AI-assisted tissue analysis.