訳あって画像処理をしたいため、画像変換エンジン・画像変換OSS・画像変換ライブラリについて調査したメモ書き。特に画像の拡大縮小(リサイズ機能)に焦点をあてて調べてます。
- ImageMagick
- Graphicsmagick
- ImageMagickから派生したライブラリ
- Imlib2
- OpenCV
- 汎用的な画像ライブラリ
- pillow(PIL)
- pythonの画像ライブラリ
- GD
- PHPの画像ライブラリ
- Small_Light
- apacheのモジュール
- 裏側はImageMagick
- Nginx_Small_light
- Nginxのモジュール
- 裏側はImageMagick
- pilbox
- webAPI
- https://github.com/agschwender/pilbox
- 裏側はpillow
- thumbor
- webAPI
- https://github.com/thumbor/thumbor
- 裏側はGraphicMagick?
■python画像ライブラリ‐比較
pythonで使えるライブラリに関して、まさに比較しているサイトがあった
- gd
- kaa-imlib2
- PIL
- PythonMagick
- pgmagick
- OpenCV Python
の6つを比較している。
■多くのライブラリを比較している
Software | Run time (secs real) | Memory (peak RSS MB) | Times slower |
---|---|---|---|
tiffcp -s | 0.19 | 148 | |
VIPS C/C++ 8.4 | 0.17 | 43 | 1.0 |
Python VIPS 8.4 | 0.26 | 51 | 1.5 |
VIPS C/C++ 8.4, JPEG images | 0.33 | 61 | 1.9 |
VIPS command-line 8.4 | 0.47 | 40 | 2.8 |
ymagine git master 15/12/15 (see 2) | 1.06 | 2.9 | 3.2 (compared to vips-c JPEG) |
GraphicsMagick 1.3.23 | 0.6 | 491 | 3.5 |
sips 10.4.4 (see 6) | 0.7 (est.) | 268 | 4.1 |
NetPBM 10.0-15.3 | 0.84 | 74 | 4.4 |
ImageMagick 6.8.9-9 | 0.75 | 485 | 4.5 |
VIPS C/C++ 8.4, one thread | 0.77 | 32 | 4.5 |
VIPS nip2 8.4 | 0.79 | 85 | 4.6 |
RMagick 2.15.2 (ImageMagick 6.8.9) | 0.86 | 682 | 5.1 |
Pillow 3.1.2 (see 1) | 0.94 | 207 | 5.6 |
OpenCV 2.4.9.1 | 1.13 | 215 | 6.7 |
libgd 2.1.1 (see 2) | 2.31 | 186 | 7 (compared to vips-c JPEG) |
ExactImage 0.9.1 (see 3) | 1.39 | 129 | 8.2 |
Imlib2 1.4.7 (see 9) | 1.53 | 241 | 9 |
FreeImage 3.17 (see 7) | 1.59 | 185 | 9.2 |
ImageMagick 7.0.2-5 (see 11) | 1.57 | 733 | 9.2 |
ImageScience 1.3.0 (based on FreeImage 3.17, see 7, 8) | 1.81 | 360 | 10.6 |
gmic 1.6.2 | 1.9 | 724 | 11.2 |
pike 8.0 | 2.28 | 342 | 13.4 |
OpenImageIO 1.6.11 (see 10) | 3.07 | 578 | 18.1 |
GEGL 0.3.8 / BABL 0.1.18 (see 4) | 12.4 | 851 | 73 |
Octave 4.0 (see 5) | 15.48 | 6155 | 91 |
■こちらも検証サイト
結論は以下の通り、VIPS・EPEGがかなり早いが、他のは高機能。みたいな感じ?
From the above results, VIPS seems to be the fastest among all followed by epeg and opencv. But one thing to consider is the features provided vs performance. Libraries such as VIPS and EPEG are more optimized towards image resizing and image cropping while opencv, graphicsmagick and imagemagick provides a slew of image processing and analysis features.
■Imlib2とImageMagickの比較検証のサイト(日本語)
■pillowの公式サイトでのパフォーマンス比較
PIL・Pillow・Pillow-SIMD・ImageMagick・Skia・OpenCV・IPPのパフォーマンス比較を行っている。
■画像変換Nightという勉強会が過去にあった模様
■画像の最適化
画像の最適化を行うものは以下のようなものがあるらしい(まったく中身を調べてない)
- ImageOptim
- ImageAlpha
- JPEGmini
■dockerからのGPUリソースを利用
GPUリソースをdockerから利用することに関しては以下のページが参考になった
Github:https://github.com/NVIDIA/nvidia-docker
日本語解説:http://gihyo.jp/admin/serial/01/ubuntu-recipe/0461
そしてwindows10からではGPUパススルー(ホストOSでGPU使えなくする代わりにゲストOS上で使えるようにする技術)を実施するぐらいしかCudaを効率的に利用できなさそう…
■画像リサイズに関してGPUとCPUでの比較
- 一説によるとCPUの50倍
- GPUベースだと、GraphicMagicより15倍、Ymagine(Yahooの画像変換API?)より10倍早いらしい。Flickrの記事。
- Image Compute Engine (ICE):GPU使ったほうが7倍から14倍早い
- matlabでCPUとGPUで画像リサイズを比較した結果:15倍程度はやそう
- OpenCVはCudaに対応するとPrimitiveな画像処理は30倍速い
- と言っているが、実際はそんなに早くないらしい
- http://opencv.org/platforms/cuda.html
- Open単に並列処理すればいいというわけではないようだ(引用は、GPU処理でなくOpenCLの話だけれど)
- 以下引用: 次に-resizeや+contrastでOpenCLによる高速化があまり見られない (どころか、平均値では遅くなっている)点についてであるが、これはOpenCL税とでも言うべきものの影響ではないかと思う。つまりCPUからGPUに仕事を投げる際、またGPUからCPUに結果を返す際、にかかる時間である。
- https://mizukama.sakura.ne.jp/ol/article_016.php
コメント