RPA方式は結局「大量一括」処理には向かないので
もちは餅屋、画像処理はGIMPにおまかせします。かえるのクーの助手の「井戸中 聖」(いとなか あきら)でございます。
UWSCによる簡易的な画像前処理をやってみましたが、良好でした。
お手軽ですが、RPAの限界もすぐ見えてしまいました。大風呂敷広げたのに、カッコわるっ。
・タイミングやマシン負荷、イレギュラー状態により処理が失敗することがしばしばある。
・人向けのインターフェースとして、操作ハンドリングを自動的に行っている。もともとオペレーション速度は緩く想定されているため、自動化しても処理速度としては限界がでてくる。
・複数のソフトやオペレーションを「無理やり」結び付けているだけなので、単一プログラム/スクリプトで実行できる場合は、そちらの方が断然よいはず。*1
RPAは、人間が操作するより断然速いですが、専用プログラムで全力を出すよるも超絶遅いわけでございます。専用処理PG >>> RPA >> 人手 ...ですよねぇ。
お詫び:PythonでRPAは延期します
予定していたPyAutoGUIをつかってのPython RPAはパスします。お詫びします。
本当はPyAutoGUIをいろいろ実験するつもりでした。
で紹介されているような機能は、簡単に実装できそうです。
現在「やりたいこと」=「学習画像の前処理」としては、汎用性は薄れるものの、GIMPのスクリプト単独で行うほうが断然早くて確実です。
そこで
GIMPでPythonスクリプト実行
やります。GIMPはMACでもLinuxでも、さらにWindowsでも動作させることができますし、こちらのほうが汎用的かもしれません。 画像処理ソフトのGIMPには、現在LISP系のスクリプトとPython系のスクリプト実行の機能があります。ただし、プラグインのPythonは2系です。GIMP自体が3系になったときにPython3系に対応すると思われますが、現在は2系を使うしかありません。
あくまで、PythonからGIMPを制御するのではなく、GIMPからPython/LISPスクリプトを実行する。該当スクリプト用にGIMPのAPIを公開しているといったところです。現行pythonからGIMPモジュール自体をimportして、インスタンス化してなんでも行えるわけではないようです。(こんなのできると最高ですが)
やりたいこと
・yamlファイルで共通パラメータ、個別のパラメータを指定して、それによってGMPの操作を実行する。
・順次ファイルを読み込んで、定型的な処理をしていく動作を大量にさせたい。
確認したいこと
・Pythonスクリプトを実行するとき、そのpythonスクリプトの中で、numpyとかの各種モジュールが通常とおり使えるかどうか。プラグインなのでがちがちに囲まれて制約が多いかもしれません。
・画像ファイル以外の情報をpythonとして扱うことができるか。
ひさびさ(30年ぶりくらい?)にLISPを触りたい気持ちを抑えてPythonで行います。
先輩の説明
よろしくお願いします。
本当に5分で理解できました!感謝大盛り、つゆだくです!
10分くらいでスクリプトの登録と所定のメニューの場所へプラグイン機能を表示する方法を理解できました!あたま大盛、たまご付きです!
今私が知りたいすべてがここにありました。トロだく、つゆだくだく、もう食べられません!!
一括処理も全く問題ないようです。import os も問題なく使えるので、私のやりたい処理にはなんの支障もなさげです!!
では、UWSCで作成したスクリプトと同様の動作をGIMPのプラグイン/Pythonだけで作成してみます。
実食!実装!
ようやく完成しました。
必ずUTF-8で保存しておいてください。
デバッグがしにくくて泣きました。リモートデバッグ(ステップ実行)する方法はあるようです。そちらに流れるか不明です。
メニューとダイアログの表示
まずは、メニューと画面がでるようにしました。
必要パッケージの追加導入(鬼門)
さて、今時ならyamlを使った方が簡単だとおもいましたが、GIMPのpython2.7系のsite-packageは最小限のものしかはいっていません。osが入っているので、入出力系のだいたいのことはできるので、通常は問題ありませんが、応用的な使い方をする場合は、どうしてもpip install したくななります。
(ここからの手順は環境変更に自信のある方、環境がおかしくなっても復旧可能な方のみ参照ください。生半可な情報でやると必ず現環境を破壊します!ドキュメントを読み込めてませんが、GIMPの内部python環境にpipするのは想定外のような気がします。)
・GIMP内にpipコマンドがない あるいは、python -m pip install xxxxではエラーになる ので、本家python2.7系を入れることになります。(エラーにならなければOKですが、わたくしの環境ではNGでした。2.7系を別にいれる時点で大部分の方は無理のはずです)*2
おおまかな手順(設定はあくまで一例です)
・python 2.7系をインストールします。(例:私の環境はWindows10です。 C:\Python27\ に入れました。)猛者以外はanacondaを避けたほうがよいです。:anacondaは導入済のモジュールの相互関連性が非常に高いため)
・環境変数を一旦2.7系にかえます。(ローカルPathの先頭にC:\Program Files\GIMP 2\bin; C:\Python27\Scriptsを追加)
・pip が2.7系のものであることを確認(where pip; pip -V など)したあと、管理者権限コマンドプロンプトで
pip install pyyaml
します。
・どこかのsite-packagesフォルダに格納されています。(わたくしの環境では C:\Python27\Lib\python2.7\site-packages に入りました)
通常だったらPYTHONPATHに上記パスを追加するところですが、GIMPが環境変数設定を(GIMP内で動作するpythonへ)通してくれないので、以下をおこ言います。
・GIMP/pythonのsite-packagesにインストールされた「ディレクトリごとファイルの複写」する。
※直接pip install 時にGIMPのsite-packagesの指定が可能であれば、そちらでもOKです。
(わたくしの環境では、_yaml, yaml, PyYAML-5.4.1.dist-info ファイルをGIMP 2 配下のsite-packagesへ複写しました(管理者権限が必要です))
このあとGIMPを再起動して、コンソールで
import yaml
として、エラーがでなければOKです。これでGIMP のpythonスクリプトでyamlが使えます。基本的にどのモジュール追加もこのやり方でOKです。(ただしGIMPの既存モジュールのバージョンを変えないもの!、機能的衝突しないもの!!DLL依存でないもの:numpyとかはDLL依存なのでできません)
yamlが使えるようになったので、yamlパラメータファイルを考えます。
UWSCのときのControl.xlsx ファイルと同様にしてみます。
pyFu-pix2pix-preprocess.yaml (ドラフト版)
実行の補足:
バッチ実行するときはgimpの実行オプションの後ろに
--console-messages
を付加します。
これでコンソールに実行経過が表示されます。
1ファイルあたり4秒以上かかっています。感覚的に1ファイル1秒程度(悪くて2秒程度)と想定していたので、とても悲しいです。※他のマシンでは2秒程度のものもあったので使えないことはない!?
究極の高速化を求めるためには、既存のソフトの助けは借りず、(高速化したいならGIMPではなく)通常Python+numpyさらにはC++でやりましょう。と、いまさら天の声が聞こえました。
※GIMP + python-Fu/numpyは成功していないことをあらためて申し上げます。
GIMPでのバッチ画像処理が速ければ、どんどん詰めていこうと思っていましたが、このあたりでやめておきます。
皆様、ゴルシ様の指導、鞭撻お疲れさまでした!
※注:上記画像はウマ娘ファンの方の作品です!機械学習で創成変換したものではございませんので、誤解なきようお願いします。(でもできるんじゃね?)