Bagaimana saya bisa menampilkan gambar dari file di Jupyter Notebook?

190

Saya ingin menggunakan notebook IPython sebagai cara untuk menganalisis secara interaktif beberapa grafik genom yang saya buat dengan GenomeDiagrammodul Biopython . Meskipun ada dokumentasi yang luas tentang cara menggunakan matplotlibuntuk mendapatkan grafik inline di notebook IPython, GenomeDiagram menggunakan toolkit ReportLab yang menurut saya tidak didukung untuk grafik inline di IPython.

Namun saya berpikir bahwa cara untuk menyelesaikannya adalah dengan menulis diagram alur / genom ke sebuah file dan kemudian membuka inline gambar yang akan memiliki hasil yang sama dengan sesuatu seperti ini:

gd_diagram.write("test.png", "PNG")
display(file="test.png")

Namun, saya tidak tahu bagaimana melakukan ini - atau tahu apakah itu mungkin. Jadi, apakah ada yang tahu jika gambar dapat dibuka / ditampilkan dalam IPython?

zach
sumber

Jawaban:

335

Atas perkenan pos ini , Anda dapat melakukan hal berikut:

from IPython.display import Image
Image(filename='test.png') 

( dokumen resmi )

zach
sumber
Lebih baik menggunakan API publik tanpa mengakses internal: from IPython.display import Imageharus bekerja sejak 0.13.
tomyun
65
ini tidak menampilkan gambar jika di dalam satu lingkaran
muon
6
Kebanyakan orang menginginkan jawaban DrMcCleod.
AturSams
3
Ini hanya berfungsi untuk saya jika saya melewati Gambar (nama file = 'test.png') untuk ditampilkan, seperti yang disarankan di utas di bawah ini: from IPython.core.display import Image, display<b /> display(Image(filename='test.png'))
John Strong
1
Jika Anda ingin gambar juga ditampilkan dalam mode presentasi slide (yang Anda jalankan dengan jupyter nbconvert mynotebook.ipynb --to slides --post serve) maka jalur gambar harus dimulai dengan /sehingga itu adalah jalur absolut dari root web, yaitu![alt text](/test.jpg "Some Title")
ccpizza
215

Jika Anda mencoba untuk menampilkan gambar dengan cara ini di dalam loop, maka Anda perlu membungkus konstruktor gambar dalam metode tampilan.

from IPython.display import Image, display

listOfImageNames = ['/path/to/images/1.png',
                    '/path/to/images/2.png']

for imageName in listOfImageNames:
    display(Image(filename=imageName))
DrMcCleod
sumber
1
Mengapa? (Jangan beri tahu saya kalau tidak, ini tidak berfungsi. Tolong jelaskan mengapa panggilan untuk 'menampilkan' ini diperlukan dalam satu lingkaran tetapi tidak jika Anda hanya menghilangkan satu gambar).
Kris
10
Karena IPython Notebooks hanya menampilkan nilai pengembalian terakhir dalam sel, jadi setiap kali Anda memiliki dua output dari sel yang sama Anda harus menggunakan metode 'display'. Lihat pertanyaan ini untuk lebih lanjut.
DrMcCleod
1
Anda adalah pahlawan saya - Saya sudah mencari ini selama dua hari.
ZaxR
1
Ini bagus. Bagaimana saya membuat gambar berikutnya menggantikan yang sudah ada, seperti untuk efek animasi karena gambar berubah seiring waktu?
blissweb
2
Saya bertanya-tanya, bagaimana kita bisa memasang gambar? Misalnya untuk menampilkan grup gambar 4x4.
gmagno
31

Catatan, sampai sekarang solusi yang diposting hanya berfungsi untuk png dan jpg!

Jika Anda menginginkannya lebih mudah tanpa mengimpor pustaka lebih lanjut atau Anda ingin menampilkan File GIF animasi atau tidak di dalam Notebook Ipython Anda. Ubah garis di mana Anda ingin menampilkannya untuk penurunan harga dan gunakan hack pendek yang bagus ini!

![alt text](test.gif "Title")
Philipp Schwarz
sumber
2
letakkan gambar dalam folder yang sama dengan notebook Jupyter, atau alih-alih "test.gif", gunakan "relatif / path / test.gif"
Philipp Schwarz
23

Ini akan mengimpor dan menampilkan .jpggambar dalam Jupyter (diuji dengan Python 2.7 di lingkungan Anaconda)

from IPython.display import display
from PIL import Image


path="/path/to/image.jpg"
display(Image.open(path))

Anda mungkin perlu menginstal PIL

di Anaconda ini dilakukan dengan mengetik

conda install pillow
Conor Cosnett
sumber
8

Atas perkenan halaman ini , saya menemukan ini berfungsi ketika saran di atas tidak:

import PIL.Image
from cStringIO import StringIO
import IPython.display
import numpy as np
def showarray(a, fmt='png'):
    a = np.uint8(a)
    f = StringIO()
    PIL.Image.fromarray(a).save(f, fmt)
    IPython.display.display(IPython.display.Image(data=f.getvalue()))
Semangat
sumber
4

Anda dapat menggunakan kode html di bagian penurunan harga: contoh:

 <img src="https://www.tensorflow.org/images/colab_logo_32px.png" />
Moumen Lahmidi
sumber
2

Versi Python3 yang lebih bersih yang menggunakan numpy, matplotlib dan PIL standar. Menggabungkan jawaban untuk membuka dari URL.

import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

pil_im = Image.open('image.png') #Take jpg + png
## Uncomment to open from URL
#import requests
#r = requests.get('https://www.vegvesen.no/public/webkamera/kamera?id=131206')
#pil_im = Image.open(BytesIO(r.content))
im_array = np.asarray(pil_im)
plt.imshow(im_array)
plt.show()
Punnerud
sumber
2

Jika Anda ingin menampilkan banyak gambar secara efisien, saya sarankan menggunakan paket IPyPlot

import ipyplot

ipyplot.plot_images(images_array, max_images=20, img_width=150)

masukkan deskripsi gambar di sini

Ada beberapa fungsi lain yang berguna dalam paket itu di mana Anda dapat menampilkan gambar dalam tab interaktif (tab terpisah untuk setiap label / kelas) yang sangat membantu untuk semua tugas klasifikasi ML.

masukkan deskripsi gambar di sini

Karol Żak
sumber
0

Saat menggunakan GenomeDiagramdengan Jupyter (iPython), cara termudah untuk menampilkan gambar adalah dengan mengonversi GenomeDiagram ke gambar PNG. Ini dapat dibungkus menggunakan objek IPython.display.Image untuk membuatnya ditampilkan di notebook.

from Bio.Graphics import GenomeDiagram
from Bio.SeqFeature import SeqFeature, FeatureLocation
from IPython.display import display, Image
gd_diagram = GenomeDiagram.Diagram("Test diagram")
gd_track_for_features = gd_diagram.new_track(1, name="Annotated Features")
gd_feature_set = gd_track_for_features.new_set()
gd_feature_set.add_feature(SeqFeature(FeatureLocation(25, 75), strand=+1))
gd_diagram.draw(format="linear", orientation="landscape", pagesize='A4',
                fragments=1, start=0, end=100)
Image(gd_diagram.write_to_string("PNG"))

[Lihat Notebook]

Quantum7
sumber