旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

【Python】pillow-simdによる画像読み込みの高速化

ディープラーニングのモデルをネットから拾ってくると、画像読み込みにopencvが使われているケースやpillowが使われているケースがあります。自分は使い慣れている/速いという理由でopencvを使ってもらえると助かるのですが、pillowが使われているケースもあり、pillowはopencvと比較して画像読み込み時間が長く、学習に時間がかかって困る時があります。

pillow部分をopencvに書き直す手もありますが、それが面倒という場合もあり、pillow-simdというライブラリを使えばプログラムを書き換えることなく画像読み込みを高速化できると聞いたので試してみます。しかし、pillow-simdはWindowsをサポートしていないのか、インストールでエラーが出ましたが、issueに回避策を見つけた人がいるのでそれに倣いひとまずインストールして試します。

pip uninstall pillow
pip install --upgrade pillow-simd --global-option="build_ext" --global-option="--disable-jpeg" --global-option="--disable-zlib"

4000×3000の画像を読み込んでみたところ、むしろopencvのimreadよりpillow-simdの方が速そうです。

import cv2
from PIL import Image
import time

start = time.time()
image = Image.open('pic.bmp') # Case pillow-simd: time = 78msec
#image = cv2.imread('pic.bmp') # Case opencv: time = 93msec
end = time.time()
print(str(end - start))