ちょっと、そこ!私は Pillow のサプライヤーです。今日はマルチプロセス環境で Pillow を使用する方法についてのヒントを共有します。
まず最初に、マルチプロセス設定で Pillow を使用する理由を理解しましょう。 Pillow は、画像処理に最適な Python ライブラリです。しかし、大量の画像や複雑な画像処理タスクを扱う場合、単一プロセスのアプローチでは非常に時間がかかる可能性があります。そこでマルチプロセッシングの出番です。これにより、複数の CPU コアに作業を分割できるようになり、全体の処理時間が短縮されます。
前提条件
詳細に入る前に、Pillow がインストールされていることを確認してください。 pip を使用してインストールできます。
pip インストール枕
また、Python の基本的な理解も必要です。マルチプロセッシングモジュール。このモジュールは、Python で複数のプロセスを実行する簡単な方法を提供します。
基本的なセットアップ
簡単な例から始めましょう。ディレクトリに多数の画像があり、それらすべてのサイズを変更したいとします。マルチプロセッシングと Pillow を使用してそれを行う方法は次のとおりです。
PILからOSをインポートインポート画像インポートマルチプロセッシングdefsize_image(image_path):try:imgとしてImage.open(image_path)を使用:new_size = (img.width // 2, img.height // 2) resize_img = img.resize(new_size) Output_path = os.path.join('resize', os.path.basename(image_path)) resize_img.save(output_path) e としての例外を除く: print(f"{image_path} の処理エラー: {e}") if __name__ == '__main__': image_dir = 'images' image_files = [os.path.join(image_dir, f) for f in os.listdir(image_dir) if f.endswith(('.png', '.jpg', '.jpeg'))] os.path.exists('resize') でない場合: os.makedirs('resize') pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) pool.map(resize_image, image_files) pool.close() pool.join() print("すべての画像のサイズが正常に変更されました。")
このコードでは、最初に関数を定義しますサイズ変更_画像これは画像パスを取得し、Pillow を使用して画像を開いてサイズを変更し、サイズ変更した画像を新しいディレクトリに保存します。次に、if __name__ == '__main__'ブロックにあるすべての画像ファイルのリストを取得します。画像ディレクトリ。という新しいディレクトリを作成します。サイズ変更されたリサイズした画像を保存します。
次に、マルチプロセッシング.プール使用可能な CPU コアの数と同じプロセス数を持つオブジェクト。のプール.マップ関数は、サイズ変更_画像リスト内の各画像ファイルに関数を適用します。最後に、プールを閉じ、すべてのプロセスが使用を完了するのを待ちます。プール.close()そしてプール.join()。
リソースの共有
マルチプロセス環境における課題の 1 つは、リソースの共有です。たとえば、単一の枕を使用したい場合は、画像オブジェクトが複数のプロセスにまたがる場合は注意が必要です。
パイソンのマルチプロセッシングモジュールには、プロセス間でデータを共有するさまざまな方法があります。一般的な方法の 1 つは、共有メモリを使用することです。ただし、Pillow イメージに関しては、通常、プロセス間でイメージ パスを渡し、各プロセスで個別にイメージを開く方が良いでしょう。これは、Pillow イメージは簡単にシリアル化できないため、つまりプロセス間で簡単に共有できないためです。
エラー処理
マルチプロセス環境で作業する場合、エラー処理はさらに重要になります。 1 つのプロセスが失敗しても、操作全体が停止することはありません。上の例では、try-excel ブロックを追加しました。サイズ変更_画像画像処理中に発生する可能性のある例外をキャッチする機能。


パフォーマンスに関する考慮事項
マルチプロセスは画像処理を大幅に高速化できますが、常に最適なソリューションであるとは限りません。複数のプロセスの作成と管理にはオーバーヘッドが伴います。したがって、少数の画像や単純なタスクを処理している場合は、単一プロセスのアプローチの方が高速である可能性があります。
また、作成するプロセスが多すぎてシステムに過負荷がかからないように注意してください。上の例では、マルチプロセッシング.cpu_count()プロセスの数を決定します。これは出発点としては適切ですが、特定のシステムやタスクの要件に基づいて調整する必要がある場合があります。
当社のビジネスにおけるユースケース
枕のサプライヤーとして、当社はいくつかの方法でマルチプロセス画像処理を使用しています。例えば、大量のご注文をいただいた場合、枕カバー、Webサイト用に商品画像を加工する必要があります。私たちはマルチ処理を使用して、これらの画像のサイズ変更、トリミング、透かしの追加を迅速に行います。
別の使用例は、新しいものに取り組んでいるときです。枕デザイン。同じデザインの複数のバリエーションを生成する必要がある場合、マルチ処理はこれをタイムリーに行うのに役立ちます。
品質管理のためにマルチプロセスも使用しています。完成品の画像を処理して欠陥がないか確認することができます。たとえば、Pillow を使用すると、枕カバーの縫製がまっすぐであるかどうか、または枕に汚れがあるかどうかを検出できます。
結論
マルチプロセス環境で Pillow を使用すると、画像処理タスクを高速化する強力な方法になります。複数の CPU コアに作業を分割することで、大量の画像をより効率的に処理できます。ただし、多重処理のオーバーヘッドを考慮し、エラーを適切に処理することが重要です。
高品質を求める市場にいるなら枕製品に関するお問い合わせや、ビジネスのための画像処理に関するサポートが必要な場合は、お気軽にお問い合わせください。当社は枕に関するあらゆるニーズにお応えし、画像処理要件に最適なソリューションを提供いたします。中小企業でも大企業でも、当社にはお客様のニーズを満たす専門知識とリソースがあります。
参考文献
- Python マルチプロセッシングのドキュメント
- 枕の公式ドキュメント
今日のブログはここまでです。お役に立てば幸いです。ご質問やご意見がございましたら、お気軽に以下にご記入ください。
