如何将远程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工具
- Debian/Ubuntu系统:
- 第二步:挂载远程目录
执行挂载命令:
示例: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
- Linux:
注意:如果挂载失败,确认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
相关产品推荐
相关产品推荐

