Python Image Library (PIL, python3에서는 pillow)을 이용하여 python에서 image 생성/변경 등이 가능합니다. 그리고, 이 성능 평가를 위해서는 pillow-perf라는 code를 이용할 수 있습니다. 먼저 pillow-perf를 git으로부터 clone 합니다.
[root@python1 ~]# git clone https://github.com/python-pillow/pillow-perf.git
아래와 같이 pip로 필요 package들을 설치합니다.
[root@python1 ~]# cd pillow-perf/testsuite/
[root@python1 testsuite]# pip install -r ./requirements.txt
이제 다음과 같이 몇가지 테스트를 수행해봅니다. 아래의 결과는 Naver nCloud에서 제공되는 E5-2660 v4@2.00GHz에서 수행된 것입니다. 이 테스트는 single-thread로 되어 있고, IBM POWER8/POWER9에서도 동일한 방법으로 수행할 수 있습니다.
[root@python1 testsuite]# ./run.py scale --progress
Scale 2560×1600 RGB image
to 26x16 bil 0.01323 s 309.62 Mpx/s
to 26x16 bic 0.02488 s 164.62 Mpx/s
to 26x16 lzs 0.03783 s 108.28 Mpx/s
to 320x200 bil 0.02107 s 194.43 Mpx/s
to 320x200 bic 0.03579 s 114.45 Mpx/s
to 320x200 lzs 0.05393 s 75.95 Mpx/s
to 2048x1280 bil 0.05956 s 68.77 Mpx/s
to 2048x1280 bic 0.08711 s 47.02 Mpx/s
to 2048x1280 lzs 0.12037 s 34.03 Mpx/s
to 5478x3424 bil 0.28072 s 14.59 Mpx/s
to 5478x3424 bic 0.38422 s 10.66 Mpx/s
to 5478x3424 lzs 0.49239 s 8.32 Mpx/s
[root@python1 testsuite]# ./run.py scale --mode RGBA
Scale 2560×1600 RGBA image
to 26x16 bil 0.02508 s 163.33 Mpx/s
to 26x16 bic 0.04012 s 102.09 Mpx/s
to 26x16 lzs 0.05564 s 73.62 Mpx/s
to 320x200 bil 0.03434 s 119.29 Mpx/s
to 320x200 bic 0.04993 s 82.04 Mpx/s
to 320x200 lzs 0.07300 s 56.11 Mpx/s
to 2048x1280 bil 0.10238 s 40.01 Mpx/s
to 2048x1280 bic 0.13699 s 29.90 Mpx/s
to 2048x1280 lzs 0.18249 s 22.44 Mpx/s
to 5478x3424 bil 0.51842 s 7.90 Mpx/s
to 5478x3424 bic 0.63934 s 6.41 Mpx/s
to 5478x3424 lzs 0.78471 s 5.22 Mpx/s
[root@python1 testsuite]# ./run.py scale --runs 50
Scale 2560×1600 RGB image
to 26x16 bil 0.01308 s 313.08 Mpx/s
to 26x16 bic 0.02493 s 164.28 Mpx/s
to 26x16 lzs 0.03770 s 108.64 Mpx/s
to 320x200 bil 0.02115 s 193.62 Mpx/s
to 320x200 bic 0.03549 s 115.42 Mpx/s
to 320x200 lzs 0.05399 s 75.87 Mpx/s
to 2048x1280 bil 0.05944 s 68.91 Mpx/s
to 2048x1280 bic 0.08735 s 46.89 Mpx/s
to 2048x1280 lzs 0.12058 s 33.97 Mpx/s
to 5478x3424 bil 0.28272 s 14.49 Mpx/s
to 5478x3424 bic 0.38564 s 10.62 Mpx/s
to 5478x3424 lzs 0.49298 s 8.31 Mpx/s
[root@python1 testsuite]# ./run.py blur
Blur 2560×1600 RGB image
1px 0.22742 s 18.01 Mpx/s
10px 0.22500 s 18.20 Mpx/s
30px 0.22543 s 18.17 Mpx/s
[root@python1 testsuite]# ./run.py convert
Convert 2560×1600 RGB image
RGB to L 0.00539 s 760.07 Mpx/s
RGBA to LA 0.00652 s 627.90 Mpx/s
RGBa to RGBA 0.03590 s 114.08 Mpx/s
RGBA to RGBa 0.00851 s 481.57 Mpx/s
그 외에, 실제 jpg 파일들을 이용하여 몇가지 PIL 처리를 하는 sample code를 수행해보는 것도 괜찮습니다.
[root@python1 ~]# cat piljpg.py
from PIL import Image, ImageFilter
list = [ "1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg", "8.jpg", "9.jpg", "10.jpg" ]
for x in list:
im = Image.open(x)
print(im.size)
im.save('pasta.jpg')
im = Image.open(x)
size = (64, 64)
im.thumbnail(size)
im.save('python-thumb.jpg')
im = Image.open(x)
cropImage = im.crop((100, 100, 150, 150))
cropImage.save('python-crop.png')
im = Image.open(x)
img2 = im.resize((600, 600))
img2.save('python-600.jpg')
img3 = im.rotate(90)
img3.save('rotate.jpg')
im = Image.open(x)
blurImage = im.filter(ImageFilter.BLUR)
blurImage.save('python-blur.jpg')
[root@python1 ~]# time python piljpg.py
(2281, 3072)
(972, 1422)
(972, 1422)
(972, 1422)
(972, 1422)
(972, 1422)
(5040, 4912)
(1600, 1280)
(2281, 3072)
(972, 1422)
real 0m15.047s
user 0m14.759s
sys 0m0.285s
piljpg.py의 코드와 거기에 쓰인 *.jpg 파일은 아래 구글 드라이브에 올려놓았습니다.
https://drive.google.com/open?id=1LdjcDXrQ3Dps0ertGwGMyMYKRhxo5FEB
댓글 없음:
댓글 쓰기