hack のためのネタ帳, etc,,,

未解決案件

状況

で、複数枚の画像について各画素の算術平均を取った平均画像を得たかった。
ImageMagick 複数枚 画像 平均」でググったら、最近流行りの低品質な機械翻訳サイト経由で以下のページが見つかった。
上記のページで、ImageMagick の convert で -fx オプション用いて平均取るスクリプトが張られてたんだが、これを Cygwin 上で試してみたところ、たかだか 1920x1060 程度のサイズなのに、1枚たりとも進まない。
何だこれ?と思い、WSL1 で試してみると、お世辞にも早くはないんだけどまぁ普通に完了。

とりあえず、画像を縮小してみたところ Cygwin でも処理が進んだので、-geometry 250x250 及び -geometry 500x500 に変換して所要時間を確認してみたところ、以下のような結果になった。

Cygwin の環境
$ grep -m1 "model name" /proc/cpuinfo
model name      : Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
$ free -h
              total        used        free      shared  buff/cache   available
Mem:           60Gi        26Gi        34Gi          0B          0B        34Gi
Swap:         9.6Gi       707Mi       8.9Gi
$ uname -srvmo
CYGWIN_NT-10.0 3.1.7(0.340/5/3) 2020-08-22 17:48 x86_64 Cygwin
$ convert --version
Version: ImageMagick 7.0.10-27 Q16 x86_64 2020-08-14 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5)
Delegates (built-in): bzlib cairo fftw fontconfig fpx freetype gslib heic jbig jng jp2 jpeg lcms lzma pangocairo png ps rsvg tiff webp x xml zlib

Cygwin の実行時間
$ identify {a,b}.jpg
a.jpg JPEG 250x138 250x138+0+0 8-bit sRGB 10506B 0.000u 0:00.000
b.jpg JPEG 250x138 250x138+0+0 8-bit sRGB 10470B 0.000u 0:00.000
$ time convert -fx '(u+v)/2' {a,b,c}.jpg

real    0m7.616s
user    0m4.718s
sys     0m2.921s
$ identify {a,b}.jpg
a.jpg JPEG 500x276 500x276+0+0 8-bit sRGB 31398B 0.000u 0:00.000
b.jpg JPEG 500x276 500x276+0+0 8-bit sRGB 31274B 0.000u 0:00.000
$ time convert -fx '(u+v)/2' {a,b,c}.jpg

real    0m34.427s
user    0m21.156s
sys     0m15.140s

WSL1 の環境
$ grep -m1 "model name" /proc/cpuinfo
model name      : Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
$ free -h
              total        used        free      shared  buff/cache   available
Mem:            60G         23G         36G         17M        223M         37G
Swap:          184G        707M        183G
$ uname -srvmo
Linux 4.4.0-18362-Microsoft #1049-Microsoft Thu Aug 14 12:01:00 PST 2020 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.4 LTS
Release:        18.04
Codename:       bionic
$ convert --version
Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org
Copyright: © 1999-2017 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP
Delegates (built-in): bzlib djvu fftw fontconfig freetype jbig jng jpeg lcms lqr ltdl lzma openexr pangocairo png tiff wmf x xml zlib

WSL1 の実行時間
$ identify {a,b}.jpg
a.jpg JPEG 250x138 250x138+0+0 8-bit sRGB 10.5KB 0.000u 0:00.009
b.jpg JPEG 250x138 250x138+0+0 8-bit sRGB 10.5KB 0.000u 0:00.000
$ time convert -fx '(u+v)/2' {a,b,c}.jpg

real    0m0.064s
user    0m0.109s
sys     0m0.031s
$ identify {a,b}.jpg
a.jpg JPEG 500x276 500x276+0+0 8-bit sRGB 31.4KB 0.000u 0:00.000
b.jpg JPEG 500x276 500x276+0+0 8-bit sRGB 31.3KB 0.000u 0:00.000
$ time convert -fx '(u+v)/2' {a,b,c}.jpg

real    0m0.117s
user    0m0.391s
sys     0m0.063s

real の比較
250x138500x276比率
WSL10.064s0.117s1 : 1.828
Cygwin7.616s34.427s1 : 4.520
比率1 : 119.0001 : 294.248

結論としては、原因は不明だが、
どうも Cygwin の ImageMagick に問題があり -fx オプションの処理が死にそうに遅いって状況みたいなんだけど、
単純計算でも元の 1920x1060 だと 1 枚当たり 10 分近くかかるわけで、WLS1 比で約 300 倍の遅さとか、いや、流石にそれはいらくなんでも遅過ぎでしょ。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます