Вы используете атрибут 'местоположения' элемента 'адреса' в привязке порта WSDL?

Так же, как и другой вариант, я попробовал в Pyvips (полное раскрытие: я сопровождающий Pyvips, поэтому я не очень нейтрален):

#!/usr/bin/python3

import sys
import time
import pyvips

start = time.time()

a = pyvips.Image.new_from_file(sys.argv[1], access="sequential")
b = pyvips.Image.new_from_file(sys.argv[2], access="sequential")
out = a * 0.2 + b * 0.8
out.write_to_file(sys.argv[3])

print("pyvips took {} milliseconds".format(1000 * (time.time() - start)))

Pyvips является «конвейерная» библиотека обработки изображений, так что код будет выполнять загрузку, обработку и сохранение всего параллельно.

На этом двухъядерном ноутбуке i5 с четырьмя потоками, используя два тестовых изображения Марка, я вижу:

$ ./overlay-vips.py blobs.jpg ships.jpg x.jpg
took 39.156198501586914 milliseconds

Итак, 39 мс для двух загрузок jpg, обработки и одного сохранения jpg.

Вы можете рассчитать время только части наложения, скопировав исходные изображения и результат в память, например:

a = pyvips.Image.new_from_file(sys.argv[1]).copy_memory()
b = pyvips.Image.new_from_file(sys.argv[2]).copy_memory()

start = time.time()
out = (a * 0.2 + b * 0.8).copy_memory()
print("pyvips between memory buffers took {} milliseconds"
        .format(1000 * (time.time() - start)))

Я вижу:

$ ./overlay-vips.py blobs.jpg ships.jpg x.jpg 
pyvips between memory buffers took 15.432596206665039 milliseconds

numpy составляет около 60 мс на этот же тест.

Я попробовал небольшой вариант красивого примера Марка:

#!/usr/bin/python3

import sys
import time
import numpy as np
from PIL import Image

import numba
from numba import jit, prange

@jit(nopython=True, parallel=True)
def method2(image1, image2, transparency):
   h, w, c = image1.shape
   for y in prange(h):
      for x in range(w):
         for z in range(c):
            image1[y][x][z] = image1[y][x][z] * transparency \
                    + (image2[y][x][z] * (1 - transparency))
   return image1

# run once to force a compile
i1 = np.array(Image.open(sys.argv[1]).convert('RGB'))
i2 = np.array(Image.open(sys.argv[2]).convert('RGB'))
res = method2(i1, i2, 0.2)

# run again and time it
i1 = np.array(Image.open(sys.argv[1]).convert('RGB'))
i2 = np.array(Image.open(sys.argv[2]).convert('RGB'))

start = time.time()
res = method2(i1, i2, 0.2)
print("numba took {} milliseconds".format(1000 * (time.time() - start)))

Image.fromarray(np.uint8(res)).save(sys.argv[3])

И я вижу:

$ ./overlay-numba.py blobs.jpg ships.jpg x.jpg 
numba took 8.110523223876953 milliseconds

Итак, на этом ноутбуке numba примерно в 2 раза быстрее, чем pyvips.

Если вы также загружаете и сохраняете время, это немного медленнее:

$ ./overlay-numba.py blobs.jpg ships.jpg x.jpg 
numba plus load and save took 272.8157043457031 milliseconds

Но это кажется несправедливым, поскольку почти все это время находится в загрузке и сохранении PIL.

5
задан Community 23 May 2017 в 12:01
поделиться

1 ответ

Атрибут местоположения является только подсказкой. Клиент может сохранить URL в .config файл, например, с идеей, что .config файл может быть изменен позже.

3
ответ дан 15 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: