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此脚本:
- 启动本地MinIO+WSIStreamer实例
- 将幻灯片上传到本地S3存储桶
- 启动连接到服务器的PathView
连接到服务器
- 打开
File → Connect to Server(Ctrl+Shift+O) - 输入服务器URL(例如。,
http://localhost:3000) - 如果需要,请输入身份验证密钥
- 从服务器浏览并选择幻灯片
生产部署
对于生产环境,请将WSIStreamer与您的S3兼容存储一起部署:
docker run -p 3000:3000 \
-e WSI_S3_BUCKET=my-slides-bucket \
-e AWS_ACCESS_KEY_ID= \
-e AWS_SECRET_ACCESS_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 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
}两个覆盖层都是从单个文件同时加载的,组织图为细胞级分析提供了背景。
______________________________________________________________________
文档
______________________________________________________________________
贡献
欢迎捐款。请遵循以下指南:
- 问题:包括平台详细信息、PathView版本和复制步骤
- 拉取请求:遵循现有的代码风格,在适用的情况下包括测试
- 功能请求:在实施之前打开一个问题进行讨论
开发版本
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.
