如何从上传的 png 文件中打开 Google Colaboratory notebook 单元格中的图像?

How can I open images in a Google Colaboratory notebook cell from uploaded png files?

我正在使用 Google Colaboratory 笔记本。 我上传了一个名为 bp.png 的文件到工作目录,我可以在代码单元格中通过 运行ning !ls 看到该文件在那里。 然后我尝试使用这段代码在降价单元格中查看图像:

<h2 align="center">Image</h2>
<img src="bp.png" width="600">

但是 Colab 笔记本的单元格在 运行 之后保持为空(header 除外),尽管如果我 运行 在本地 Jupyter 笔记本中,图像确实出现在该本地笔记本中的单元格。

更新:

我知道我可以使用上传到工作目录的文件,因为我上传的自定义 .py 文件可以毫无问题地导入到我的 Colab 笔记本中。例如,我可以上传一个文件 py_file.py,然后在 Colab notebook 中像 from py_file import some_function 那样使用它,并且它有效。

试试这个

from IPython.display import Image
Image('bp.png')

您也可以设置宽度和高度

Image("bp.png", width=100, height=100)

要显示多张图片,需要调用display。 (只有 1 张图片是自动的)

from IPython.display import Image, display
display(Image('1.png'))
display(Image('2.png'))

更新jan/2019

将您的图片放入 /usr/local/share/jupyter/nbextensions/

然后从/nbextensions/开始显示,例如

%%html
<img src='/nbextensions/image.png' />

更新feb/2022

在 Google Colab 中,打开文件浏览器图标(左侧导航栏)并导航至 usr/local/share/jupyter/nbextensions,如上所述。单击 nbextensions 文件夹上的省略号菜单 > 上传和 select 要上传的图像。确保使用正确的文件名更新上面代码片段中的 img 标记,并且您需要使用代码框(而不是文本)。请注意,当您的运行时被回收时,您的图像将从目录中删除(我在上传图像时收到一个警告对话框,说明如此),所以要小心。

也可以在 Colab 的 markdown/Text 单元格中显示图像。创建一个文本单元格,然后您将有一个带有图标的顶部栏。 Select“插入图片”对应的图片图标,然后从本地机器中选择图片。它似乎不允许你从 google 驱动器 select,但是

这是一个可以显示来自任何目录的图像文件的函数。

请注意,此函数产生的结果与 IPython.display.Image 相同。

from IPython.display import HTML
from base64 import b64encode

def show_image(path_to_image, width=None, height=None):

    mime_type = None
    path_to_image = path_to_image.lower()

    # More MIME types:
    # https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
    if path_to_image.endswith('.jpg') or path_to_image.endswith('.jpeg'):
        mime_type = 'image/jpeg'
    elif path_to_image.endswith('.png'):
        mime_type = 'image/png'
    elif path_to_image.endswith('.gif'):
        mime_type = 'image/gif'
    else:
        raise ValueError('Unknown extension: %s' % (path_to_image))

    img = open(path_to_image, 'rb').read()
    data_url = 'data:image/jpeg;base64,' + b64encode(img).decode()

    width_str = "width='%d'" % (width) if width is not None else ''
    height_str = "height='%d'" % (width) if height is not None else ''

    display(HTML("<img src='%s' %s%s>" % (data_url, width_str, height_str)))

示例:

show_image('frames/frame_1000.jpg', width=300)