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

如何将远程SSH服务器中的图像读取为Dask数组,imread是否支持该操作

将远程SSH服务器中的图像读取为Dask数组是完全可实现的,以下提供两种常用的落地方案:

方案1:SSHFS挂载远程目录(最便捷)

该方案通过SSHFS工具将远程服务器的目录映射为本地挂载目录,映射完成后可以直接调用dask-image的imread接口读取,不需要修改原有本地读取逻辑。

  • 第一步:安装SSHFS工具
    • Debian/Ubuntu系统:sudo apt install sshfs
    • macOS系统:brew install macfuse sshfs
    • Windows系统:可安装win-sshfs工具
  • 第二步:挂载远程目录
    执行挂载命令:
    sshfs 用户名@远程服务器IP:远程图像根目录 本地空挂载目录路径
    
    示例:
    sshfs lvs@192.168.1.100:/home/lvs/dataset/imgs ./remote_imgs
    
  • 第三步:直接读取挂载目录的图像
    代码示例:
    from dask_image.imread import imread
    
    # 直接读取挂载后的本地路径,和读本地文件逻辑完全一致
    dask_arr = imread("./remote_imgs/*.jpg")
    # 验证数组结构
    print(dask_arr.shape)
    
  • 用完卸载命令:
    • Linux:fusermount -u ./remote_imgs
    • macOS:umount ./remote_imgs

注意:如果挂载失败,确认SSH用户对远程目录有读权限,本地挂载目录为空且具备读写权限

方案2:SSH流式直接读取(无需挂载)

如果不想做本地目录挂载,可以通过paramiko库建立SSH连接,配合dask.delayed封装读取逻辑,手动构建Dask数组,适合无挂载权限的场景。

  • 第一步:安装依赖
    pip install dask paramiko pillow dask-image numpy
    
  • 第二步:代码实现
    import paramiko
    import numpy as np
    from PIL import Image
    import io
    import dask
    import dask.array as da
    
    # SSH连接配置
    SSH_CONFIG = {
        "hostname": "远程服务器IP",
        "username": "SSH用户名",
        # 优先用密钥认证更安全,注释password即可
        # "key_filename": "/本地用户目录/.ssh/id_rsa",
        "password": "SSH密码"
    }
    
    # 封装单张远程图像读取逻辑,用dask.delayed装饰
    @dask.delayed
    def read_single_remote_img(remote_img_path):
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(**SSH_CONFIG)
        sftp = ssh.open_sftp()
        # 流式读取远程文件
        with sftp.open(remote_img_path, "rb") as f:
            img_bytes = f.read()
        img = Image.open(io.BytesIO(img_bytes))
        arr = np.array(img)
        sftp.close()
        ssh.close()
        return arr
    
    # 提前获取远程服务器上所有需要读取的图像路径列表
    remote_img_paths = [
        "/home/lvs/dataset/imgs/1.jpg",
        "/home/lvs/dataset/imgs/2.jpg",
        # 可自行扩展列表内容
    ]
    
    # 构建Dask数组
    delayed_objs = [read_single_remote_img(p) for p in remote_img_paths]
    # 先取一张样本确定数组shape和dtype
    sample_arr = delayed_objs[0].compute()
    dask_arr = da.stack([
        da.from_delayed(obj, shape=sample_arr.shape, dtype=sample_arr.dtype) 
        for obj in delayed_objs
    ])
    
    # 验证结果
    print(dask_arr.shape)
    

注意:如果读取的图像量很大,可以在读取逻辑中加入SSH连接池复用,避免频繁创建销毁连接拖慢性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:57:03