2015-11-26 2 views
0

Я пробовал использовать метод bokeh image_rgba, но обнаружил, что он очень медленный, я просто показываю изображение размером 1000 * 500 пикселей, и html занимает ~ 5 секунд для загрузки (ничто не основано на веб-сайте здесь, я все работает/хранится локально)Самый эффективный способ отображения jpg с боке? Image_rgba удивительно медленный

Снова сам код запускается быстро, он просто отображает изображение thqt медленно. Я пробовал exqmples из галереи bokeh, и скорость в порядке.

Я, таким образом, задаюсь вопросом, есть ли что-нибудь, что я мог бы сделать для html для загрузки быстрее? Является ли image_rgba лучшим способом для отображения изображения с помощью боке?

Это код, я использую:

pic = PIL.Image.open('/Users/blabla/eiffelTower.jpg') 

    self.imgArray = np.array(pic) 

    N1 = imgArray.shape[0] 
    N2 = imgArray.shape[1] 

    img = np.zeros((N1,prolongatedN2), dtype=np.uint32) 
    view = img.view(dtype=np.uint8).reshape((N1, N2, 4)) 

    view[:N1,:N2,0] = self.imgArray[range(N1-1,-1,-1),:N2,0] 
    view[:N1,:N2,1] = self.imgArray[range(N1-1,-1,-1),:N2,1] 
    view[:N1,:N2,2] = self.imgArray[range(N1-1,-1,-1),:N2,2] 

    fig = bokeh.plotting.figure(plot_width = plot_width, plot_height=plot_height) 

    fig.image_rgba(image=[img], x=[0], y=[0], 
         dw=[plot_width], dh=[plot_height]) 
    script, div = bokeh.embed.components(p.fig, INLINE) 

    output_file('testBokeh.html') 

    show(fig) 

Опять я очень удивлен, что отображение локально сохраненные 1000 * 500 пикселей будет очень медленно.

+0

Bokeh всегда отображается в браузере, поэтому в этом смысле он всегда работает в Интернете. Например, это 500 тыс. RGBA-значений, которые должны быть сериализованы в JSON, сохранены на диске, загружены с диска, а затем десериализованы из JSON в браузере, а затем отображаются. В работе есть бинарный протокол websocket, который устраняет почти все эти накладные расходы при запуске вашего скрипта, например. 'bokeh служит foo.py', но он еще не готов к' 0.11.1' – bigreddot

ответ

1

FWIW, я делаю это, и это очень быстро.

from __future__ import division 

import numpy as np 
from PIL import Image 
from bokeh.plotting import figure, show, output_file 


# Open image, and make sure it's RGB*A* 
lena_img = Image.open('Lenna_rect.png').convert('RGBA') 
xdim, ydim = lena_img.size 
print("Dimensions: ({xdim}, {ydim})".format(**locals())) 
# Create an array representation for the image `img`, and an 8-bit "4 
# layer/RGBA" version of it `view`. 
img = np.empty((ydim, xdim), dtype=np.uint32) 
view = img.view(dtype=np.uint8).reshape((ydim, xdim, 4)) 
# Copy the RGBA image into view, flipping it so it comes right-side up 
# with a lower-left origin 
view[:,:,:] = np.flipud(np.asarray(lena_img)) 

# Display the 32-bit RGBA image 
dim = max(xdim, ydim) 
fig = figure(title="Lena", 
      x_range=(0,dim), y_range=(0,dim), 
      # Specifying xdim/ydim isn't quire right :-(
      # width=xdim, height=ydim, 
      ) 
fig.image_rgba(image=[img], x=0, y=0, dw=xdim, dh=ydim) 

output_file("lena.html", title="image example") 

show(fig) # open a browser 
Смежные вопросы