簡體   English   中英

OSError: [Errno 24] 使用 Nibabel 打開的文件太多

[英]OSError: [Errno 24] Too many open files using Nibabel

我有一個python3.6程序,使用nibabel包來分析NIFTI格式的醫學圖像。

import glob
import nibabel as nib
health = [nib.load(pt) for pt in glob.glob(healthdir+'*.nii')] # len = 200
health_data = [h.get_data() for h in health]

它發生了OSError: [Errno 24] Too many open files最后一行OSError: [Errno 24] Too many open files 我使用了以下代碼,發現它在最后一個元素中發生了錯誤。

health_data = []
for i in range(len(health)):
    try:
        health_data.append(health[i].get_data())
    except:
        print(i) # 199

我試圖搜索相關主題,例如Nibabel: IOError: [Errno 24] Too many open files: . 但是,它並不能解決問題。 另外,我不喜歡使用ulimit 謝謝!

不familliar與Nibabel但嘗試with

    health_data = []
    for filepath in glob.glob(healthdir+'*.nii'):
       with nib.load(filepath) as health:
           health_data.append(health.get_data())

**未測試

使用后,您可能需要刪除該對象。

def show_origin_image(name,s=100,max_limit=None, min_limit=None):
    origin = name
    file_name_list = [each for each in os.listdir(origin) if not each.startswith('.')]
    file_name_list = file_name_list[min_limit:max_limit]
    dimension = 2
    width_num = 6
    height_num = math.ceil(len(file_name_list) / width_num)
    plt.figure(figsize=(15, height_num * 2.8))
    data_list = []
    for n,each in enumerate(file_name_list, 1):
        agent = nib.load(os.path.join(origin, each), keep_file_open=False)
        three_d_data = np.asarray(agent.dataobj)
        size = three_d_data.shape
        image = np.take(three_d_data, s, dimension)
        plt.subplot(height_num, width_num, n)
        plt.imshow(image, 'gray')
        plt.axis('off')
        data_list.append(three_d_data)
        # add delete operation!
        del agent
    return data_list

我在導入許多自生成的 NIfTI 圖像時遇到了同樣的問題。
使用nilearn而不是nibabel為我解決了這個問題。

from nilearn.image import smooth_img
import glob
image_dir = glob.glob(some_path + '*.nii')
images = smooth_img(image_dir, fwhm=None)
image_maps = []
for img in images:
    img_data = img.get_fdata()
    image_maps.append(img_data)
    del img_data

為我處理了 10 000 張圖像,耗時約 12 分鍾。
smooth_img讀取 nifti 並應用大小為fwhm的平滑內核(全寬半最大值......我認為)。 我這樣做是因為它有效,而且我需要在腳本中的不同情況下進行平滑處理。 您可以查看nilear.image.load_img 它應該做同樣的事情。

最好的事物

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM