[英]Python - load lots of images without using all available ram
我有大約1.5 GB的圖像需要處理。 問題是,當我嘗試將它們作為np數組加載時,我似乎用光了我所有的ram(8 GB)。
這是我加載圖像的方法:
def load_image( infilename ) :
img = Image.open( infilename )
img.load()
data = np.asarray( img, dtype="int32" )
img.close()
del img
return data
我以為關閉和刪除img會有所幫助,但沒有幫助。 這可能與垃圾回收有關嗎?
代碼遍歷文件名列表中的所有圖像:
for i in range(len(files)):
imgArray = imgs.load_image(files[i])
images.append(imgArray)
shapes.append(np.shape(imgArray))
有沒有更好的辦法?
可能值得使用PIL一張一張地加載圖像文件以獲取它們的大小元組,收集有關平均值的統計信息,然后收集它們的平均值,然后在numpy或PIL中再次打開它們以進行實際處理。 您可能還需要考慮對統計部分進行抽樣,因此您不需要全部加載,也不用說要花那么長時間,因為PIL相對有效。
您也許可以使用手動垃圾回收來清除循環之間的某些內存:
def memclear():
import gc #garbage collector
cleared = gc.collect()
print(cleared)
在每個循環結束時致電: memclear()
,因此:
for i in range(len(files)):
imgArray = imgs.load_image(files[i])
images.append(imgArray)
shapes.append(np.shape(imgArray))
memclear()
希望這可以解決它。 我認為這是不受歡迎的,因為它手動調用了垃圾清理,這通常是令人不悅的,但是不幸的是有時似乎有必要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.