15
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[flowimds] OSS pythonライブラリ開発しました!~画像一括処理ライブラリ~

15
Last updated at Posted at 2026-01-08

flowimds_rogo.png

こんにちは!
今回、自分の面倒な作業を解消するためにOSSのPythonライブラリを開発したので、紹介します

uv add flowimdsもしくは、pip install flowimdsで使用できます!

以下、リポジトリです
Github:https://github.com/mori-318/flowimds

開発を始めた背景

私には、長年の疑問がありました
なぜ画像を一括処理する良い感じのライブラリが存在しないんだ!!!!

自分で簡単に実装することもできますし、最近ならAIに頼むだけで実装できますが、これを毎回行なったり、メンテナンスすることは面倒ですよね、、、

そこで、自分でライブラリを開発して公開すれば良いのではないかとなりました笑
また、OSS開発に興味があったため、OSSとして開発をすることにしました

flowimdsの紹介

簡単な使用方法

インストール

uv add flowimds

もしくは、

pip install flowimds

一番基本的なコードは、以下になります!

# ライブラリのインポート
import flowimds as fi

# どのような画像処理を行うかを設定
pipeline = fi.Pipeline(
    steps=[
        fi.ResizeStep((128, 128)),  # 画像を128x128のサイズにリサイズ
        fi.GrayscaleStep(),  # グレースケール化
    ],
)

# 処理対象のフォルダを選択して、処理を実行
result = pipeline.run(input_path = "input_dir")

# 指定したディレクトリパスに画像を保存
result.save(output_path = "output_dir")

flowimdsの特徴

  • シンプルで簡単に画像一括処理を実装することができます
  • 並列処理などの高速化のための工夫を行なっているため、処理速度が結構早いです!
  • 入力ディレクトリの構造を保った出力ディレクトリの生成ができます
  • ossライブラリのため、改善点や欲しい機能などあれば、開発者としてライブラリに反映させることができます
  • etc ..

その他機能

上記の基本的なコード以外に使用できる機能を以下に示します!

  • runでは、画像ディレクトリパス(input_path)以外に、画像パスのリスト、2次元numpy配列のリストを指定できます
  • ResizeStepやGrayscaleStep以外にも、roteteStepやflipStepなど他の処理を組み合わせることができます
  • Pipeline定義時に、引数でlog=Trueにすることで、詳細なログ出力を行うことができます
  • etc ..

OpenCVを使った簡単な一括処理スクリプトとの処理速度比較

画像1万枚に対して、同じ内容の画像処理を行った場合の処理速度を比較してみます

検証環境は、以下のとおりです!

  • M3 Macbook Air
  • メモリ:16GB、ストレージ:512GB

使用したコードは以下です!

  • OpenCVを用いた簡単な画像一括処理スクリプト
import os
import glob
import time

import cv2

def process(input_dir, output_dir):
    start = time.time()

    image_paths = glob.glob(os.path.join(input_dir, "*"))
    os.makedirs(output_dir, exist_ok=True)

    for image_path in image_paths:
        image = cv2.imread(image_path)
        resized_image = cv2.resize(image, (128, 128))  # 128x128へのリサイズ
        gray_image = cv2.cvtColor(resized_image, cv2.COLOR_BGR2GRAY)  # グレースケール化
        cv2.imwrite(os.path.join(output_dir, os.path.basename(image_path)), gray_image)

    end = time.time()
    print(f"処理時間: {end - start:.3f}")

if __name__ == "__main__":
    process("tmp", "out")

  • flowimdsを用いた画像一括処理スクリプト
import time

import flowimds as fi

def process(input_dir, output_dir):
    start = time.time()

    # 処理内容の定義
    pipeline = fi.Pipeline(
        steps=[
            fi.ResizeStep((128, 128)),  # 画像を128x128のサイズにリサイズ
            fi.GrayscaleStep(),  # グレースケール化
        ],
    )

    result = pipeline.run(input_path = input_dir)
    result.save(output_dir)

    end = time.time()
    print(f"処理時間: {end - start:.3f}")

if __name__ == "__main__":
    process("tmp", "out")

結果

OpenCVスクリプト flowimdsスクリプト
9.7秒 3.1秒

上記のように、flowimdsの方が高速なことがわかります!

最後に

今回は、私が開発した画像一括処理のためのPython OSSライブラリ、flowimdsを紹介しました
今後も、機能追加など行なっていくつもりです
また、もしこのプロジェクトに参加したかったり、改善点やアイディアがある場合は、ぜひコントリビューターとしてプロジェクトに参加して欲しいです!
一緒に進化させていきましょう!!!

15
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?