小编Tha*_*eed的帖子

如何销毁Python对象并释放内存

我试图迭代超过100,000个图像并捕获一些图像功能,并将所得的dataFrame作为pickle文件存储在磁盘上。

不幸的是,由于RAM的限制,我被迫将图像分成20,000个大块并对其进行操作,然后再将结果保存到磁盘上。

在开始循环以处理下一个20,000图像之前,下面编写的代码应该保存20,000图像的结果数据框。

但是-这似乎没有解决我的问题,因为在第一个for循环结束时内存没有从RAM中释放

因此,在处理第50,000条记录时,该程序由于内存不足错误而崩溃。

在将对象保存到磁盘并调用垃圾收集器后,我尝试删除这些对象,但是RAM使用率似乎并未下降。

我想念什么?

#file_list_1 contains 100,000 images
file_list_chunks = list(divide_chunks(file_list_1,20000))
for count,f in enumerate(file_list_chunks):
    # make the Pool of workers
    pool = ThreadPool(64) 
    results = pool.map(get_image_features,f)
    # close the pool and wait for the work to finish 
    list_a, list_b = zip(*results)
    df = pd.DataFrame({'filename':list_a,'image_features':list_b})
    df.to_pickle("PATH_TO_FILE"+str(count)+".pickle")
    del list_a
    del list_b
    del df
    gc.collect()
    pool.close() 
    pool.join()
    print("pool closed")
Run Code Online (Sandbox Code Playgroud)

python memory-management out-of-memory pandas

13
推荐指数
1
解决办法
1446
查看次数

如何从Jupyter Notebook中的对象释放内存

我试图弄清楚如何在jupyter笔记本上工作时释放python对象占用的空间。

在特定的场景中,我正在处理多个大型数据框,完成一些计算后,我想加载一个新的数据框。

但是,这总是会导致内存错误,并且我的系统开始冻结。

所以我想我将尝试删除python对象。

到目前为止我尝试过的事情:
1.使用del并调用垃圾收集器

del pyobject
import gc
gc.collect()
Run Code Online (Sandbox Code Playgroud)
  1. 使用IPython Magic命令

    %reset_selective -f pyobject

这两种方法均无法真正释放内存。查看htop命令后,我发现jupyter笔记本计算机仍在使用20GB的RAM。仅当我重新启动内核时,它们的内存才被释放(但是后来我失去了下一步数据分析所需的所有其他变量)

python pandas jupyter-notebook

6
推荐指数
1
解决办法
293
查看次数

在 numpy 中创建“白色”图像(二维图像)

看起来我似乎在理解图像在 numpy 数组中的表示方式方面存在一些根本性的差距。

img = np.ones([100,100,3], dtype=np.uint8)*255
plt.imshow(img)
Run Code Online (Sandbox Code Playgroud)

上面的代码创建了一个“白色”的 3 通道图像。

每个像素都有值 [255,255,255]

明白了。

现在我想创建一个“白色”灰度图像。我真的不需要 RGB 通道来存储白色图像,是吗?

img_bw = np.ones([100,100], dtype=np.uint8)*255
plt.imshow(img_bw, cmap = "gray")
Run Code Online (Sandbox Code Playgroud)

即使每个像素位置的值为 255,这也会创建一个“黑色图像”?

好的,让我拿我之前的 3 通道白色图像并将其转换为灰度,看看 numpy 数组是什么样的。

img_bw1 = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
plt.imshow(img_bw1, cmap = "gray") 
Run Code Online (Sandbox Code Playgroud)

这也给了我一个“黑色图像”?

那么灰度“白色图像”的 numpy 矩阵到底是什么样的呢?

img = io.imread("https://www.colorcombos.com/images/colors/FFFFFF.png" , as_grey=True)
plt.imshow(img*255, cmap = "gray")
Run Code Online (Sandbox Code Playgroud)

这是一张白色的图像。该矩阵中的每个像素的值都为 216 及以上

plt.imshow(img, cmap = "gray")
Run Code Online (Sandbox Code Playgroud)

这也是一个白色的图像。该矩阵中的每个像素的值都为 0.86 及以上。

我完全迷路了。

问题 -

  1. 如何在 numpy 中创建灰度二维白色图像?

  2. 为什么不使用 cv2.Color 将 numpy 中的 3 通道白色图像转换为灰度图像给我一个白色图像?

python opencv numpy image-processing scikit-image

5
推荐指数
1
解决办法
7676
查看次数

在Numpy矩阵上调用Google Cloud Vision API

我正在使用Google Text检测API对图像执行OCR。

我发现当我使用opencv对图像进行一些预处理时,OCR结果要好得多。

我的问题是-我如何在内存中以Numpy数组的形式调用Google cloud Vision API?官方的Google文档仅显示视觉api接受磁盘中的图像作为输入。

我想避免不必要的磁盘写入。

python numpy google-api google-compute-engine google-cloud-functions

3
推荐指数
1
解决办法
644
查看次数