人物写真から目瞑り写真を除外するツール Tool to exclude photos of people with their eyes closed from portraits photos
本ソフトウェアは趣味の一環として作成されたものです。このソフトウェアはMITライセンスの元配布されます。このソフトウェアを使用したいかなる結果にも、著者は責任を負いません。
- Windows 10 or 11 (x64)
- Python3.12 (これより前のバージョンでは動作確認はしていません、動くかも?)
- PySimpleGUI
pip install PySimpleGUI
でインストールできます。 - OpenCV(CV2)
pip install opencv-python
でインストールできます
Python及びPythonのライブラリOpenCVのカスケード分類器を使用して写真を分類するソフトウェアです。
カスケード分類器のうち、顔の検知および瞳の検知を用いて、写真を四種類にフォルダ分類します。
OpenCVの瞳カスケード分類器が、閉じている目を検知しないことを利用して、顔の数と瞳の数の比から目を開いているか閉じているか検知します。
- 顔が検知され、瞳が全て検知されている
$(eye)=2(face), 0<(face)$ - 顔が検知され、瞳が一部検知されている
$0<(eye)<2(face), 0<(face)$ - 顔が検知され、瞳が検知されていない
$(eye)=0, 0<(face)$ - 顔が検知されていない
$(face)=0$
子供などを被写体とする、枚数を多く撮る撮影では写真の編集等をする以前に、写真の選別を行わなければならないことがあります。しかし、一枚一枚写真の選別をすることは時間のかかる作業であると考えます。そこで、一般的にミスとされる目瞑り写真を除外することで、選別作業の効率化を図ることがこのツールの目的です。
カスケード分類器が検知できるファイルはJPG,PNGなどの一般的なファイル形式のみとなっていますが、RAWファイルにおいても
- JPGファイルと同名
- 同じフォルダ内に存在する
という条件を満たすものに関しては、JPGファイルの検知結果に合わせて移動することが可能です。 そのためJPG+RAWなどで撮影したデータにも対応する様になっています。
- Pythonをインストールします。
- PySimpleGUIをインストールします。
pip install PySimpleGUI
- OpenCV(CV2)をインストールします。
pip install opencv-python
2,3の行程はrequirement.txtを利用して pip install -r requirements.txt
でも可能です。
- Releaseから、ソースコードをダウンロードし、適当な場所で展開します。
- コマンドで
Python -m PortraitEyeChecker
を実行するか、AppStart.batを実行します。
本ソフトウェアは入力=>設定=>実行という順番で操作します。
まず最初に対象フォルダを選択します。
対象フォルダを指定すると、対象フォルダ直下をファイル検索して処理します。
フォルダは一番上のテキストボックスに(相対/絶対:推奨)パスを入力する、もしくは右にある参照ボタンを押してダイアログを開いて選択することができます。
相対パスで表記する際は、本リポジトリのルートフォルダ(READMEと同階層)からの距離で記載してください。
本ソフトウェアは、フォルダ内に存在するファイルを拡張子別に収集します。大文字と小文字は区別されませんが、綴りの違う表記は別で扱われます 例) jpg = JPG, jpg ≠ jpeg
移動させたいファイルでOpenCVが検知できるファイル(JPG,PNG,BMPなどの一般的な画像形式)の拡張子はリスト左「検知対象とする拡張子」、移動させたいファイルでOpenCVが検知できないファイル(各種RAWファイルなど)はリスト右「同時移動する拡張子」に追加していきます。
「拡張子を入力」と書かれた下のテキストボックスに拡張子を入力し、追加、削除ボタンを押すと拡張子が追加、削除されます。
例:JPGで記録している場合
JPG
を左の検知対象とする拡張子へ追加。
例:JPGとARW(RAWファイル)で記録している場合
JPG
を左の検知対象とする拡張子へ追加、ARW
を右の同時移動する拡張子へ追加。
検知対象とする拡張子は最低一つ必要です。また、同じ写真が複数の拡張子である場合は、そのうちOpenCVで読み取れる一つを検知対象とする拡張子に設定してください
例:JPG,PNG,ARWで記録している場合
JPG
を左の検知対象とする拡張子に追加、PNG
,ARW
を右の同時移動する拡張子に追加。
(JPGとPNGは逆でも可)
OpenCVでは検知できないRAWファイルのみでは使用できません
設定では顔認識及び、瞳認識のパラメータを操作することができます。本ソフトウェアは顔認識=>瞳認識の順番に動作するため、顔認識と瞳認識で独立したパラメータを持っています。
scaleFactor
探索する際の画像の縮小率
カスケード分類器は何度も画像を縮小しながら探索するため、縮小スケールが小さい方が検知漏れが少ない。一方で縮小/検知の回数が増加するため作業時間が延長する。minNeighbor
探索する際に検知候補が近傍に必要とする最小数
何回も探索を繰り返すため、ほぼ同じ位置に複数回の検知候補が存在することが多い。最小検知数を設定することで、少ない回数のみ検知された誤検知対象物を除外することが期待できる。一方で上げすぎる場合検知すべき対象も排除される可能性がある。
下段にはステータスバー及び操作ボタンがあります。
ステータスバーは処理を開始すると、検知の進行具合に合わせて表示されます。
開始ボタンは必要な情報を入力した上で押すと、検知処理を開始します。一度開始すると設定値を変更しても反映されないのでご注意ください。また、処理中はボタンがグレーアウトして押下できなくなります。
取り消しボタンは、処理中に作業を停止する場合に使用します。中止するとその段階で検知処理が停止します。中止をしても、それ以前の作業は戻らないためご注意ください。中止が可能なタイミングでのみ、グレーアウトが解除されます。
本ソフトウェアにはconfigファイルが存在します。configファイルはアプリを起動した際の初期値を変更する他、内部処理での数値を変更することができます。各項目の説明は以下の通りです。
face_model
顔検知用モデルの位置を指定します。eye_model
瞳検知用モデルの位置を指定します。face_scaleFactor
顔検知のscaleFactorの初期値を設定します。face_minNeighbor
顔検知のminNeighborの初期値を設定します。eye_scaleFactor
瞳検知のscaleFactorの初期値を設定します。eye_minNeighbor
瞳検知のminNeighborの初期値を設定します。resize_border
大きな画像ファイルは処理に時間がかかるため、事前に縮小をしておく必要があります。長辺がこの設定値より大きい画像はこの設定値まで縮小されます。fulleye_folder_relative_position_from_folder
瞳が全て検知された写真を移動するフォルダの名称を入力します。フォルダ名に使用できない文字は入力しないでください。someeye_folder_relative_position_from_folder
瞳が一部検知された写真を移動するフォルダの名称を入力します。フォルダ名に使用できない文字は入力しないでください。noeye_folder_relative_position_from_folder
瞳が検知されなかった写真を移動するフォルダの名称を入力します。フォルダ名に使用できない文字は入力しないでください。noface_folder_relative_position_from_folder
顔が検知されなかった写真を移動するフォルダの名称を入力します。フォルダ名に使用できない文字は入力しないでください。theme
PySimpleGUIのテーマを指定します。
検出精度は100%ではないため、あくまでも補助ツールとしてご使用ください。
Ver1.0のリリース
未定