You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在UKB-RAP的DNAnexus JupyterLab中加载眼底图像数据

在UKB-RAP的DNAnexus JupyterLab中加载UK-Biobank眼底图像方法

单个指定图像加载(以eid=1234567的p21015_i0_a0为例)

已知目标图像的entity=participant、name=p21015_i0_a0、eid=1234567及存储路径,可按以下步骤加载:

  1. 定位目标图像文件ID
    使用dxpy匹配eid和字段名找到对应文件:
import dxpy

# 获取当前项目ID
project_id = dxpy.find_one_project()["id"]

# 查找目标图像文件(通过eid和name模糊匹配)
file_obj = dxpy.find_one_data_object(
    typename="File",
    name=f"*{1234567}*p21015_i0_a0*",
    folder=f"/{project_id}/Assessment centre/Eye measures/Retinal optical coherence tomography",
    project=project_id
)

file_id = file_obj["id"]
  1. 下载图像到JupyterLab工作目录
# 根据实际图像格式修改后缀(如.tif/.jpeg)
dxpy.download_dxfile(file_id, "p21015_i0_a0.png")
  1. 加载并查看图像
    用Python图像处理库加载(示例用PIL):
from PIL import Image

img = Image.open("p21015_i0_a0.png")
img.show()

批量加载眼底图像

基于你已掌握的表型数据提取流程,批量处理图像需重点关注附件字段的元数据提取,步骤如下:

  1. 筛选图像相关字段
    从数据字典中定位participant实体下的所有眼底图像字段(以p21015开头为例):
import pandas as pd
import glob
import os

# 加载数据字典(复用你的现有代码)
path = os.getcwd()
data_dict_csv = glob.glob(os.path.join(path, "*.data_dictionary.csv"))[0]
data_dict_df = pd.read_csv(data_dict_csv)

# 筛选participant实体下的p21015系列图像字段
image_fields = list(
    data_dict_df.loc[
        (data_dict_df["entity"] == "participant") & 
        (data_dict_df["name"].str.startswith("p21015")), 
        "name"
    ].values
)

# 格式化为dx extract_dataset所需的字段格式
image_fields_str = ",".join([f"participant.{f}" for f in image_fields])
  1. 提取图像元数据(含文件ID)
    使用--attachments参数提取图像附件的文件ID和路径信息:
import subprocess
import dxpy

# 获取dataset标识(复用你的现有代码)
dispensed_dataset_id = dxpy.find_one_data_object(typename='Dataset', name='app*.dataset', folder='/', name_mode='glob')['id']
project_id = dxpy.find_one_project()["id"]
dataset = ":".join([project_id, dispensed_dataset_id])

# 执行提取命令,生成包含图像文件ID的元数据文件
cmd = [
    "dx", "extract_dataset",
    dataset,
    "--fields", image_fields_str,
    "--attachments",  # 关键:获取附件类字段的文件引用
    "--delimiter", ",",
    "--output", "retinal_images_metadata.csv"
]
subprocess.check_call(cmd)
  1. 批量下载并加载图像
    遍历元数据文件,批量下载图像到本地并加载:
# 读取元数据
metadata_df = pd.read_csv("retinal_images_metadata.csv")

# 创建存储目录
os.makedirs("retinal_images", exist_ok=True)

# 批量下载
for idx, row in metadata_df.iterrows():
    eid = row["eid"]
    for field in image_fields:
        file_id = row[f"{field}_file_id"]
        if pd.notna(file_id):
            # 生成唯一文件名
            filename = f"{eid}_{field}.png"
            dxpy.download_dxfile(file_id, f"retinal_images/{filename}")

# 批量加载示例(转为numpy数组)
from PIL import Image
import numpy as np

image_array_list = []
for img_path in glob.glob("retinal_images/*.png"):
    img = Image.open(img_path)
    image_array_list.append(np.array(img))

注意事项

  • 图像格式:UK-Biobank的OCT图像多为TIFF格式,下载时需对应修改文件后缀。
  • 存储空间:批量下载前确认JupyterLab工作目录的可用空间,若图像数量大,建议采用流式处理(直接通过dxpy在云端处理,无需全量下载)。
  • 权限验证:确保当前项目拥有目标图像文件的读取权限。

内容的提问来源于stack exchange,提问作者Jay Woden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 17:07:13