子どもの写真を撮るようになってから、ピンぼけの写真が無駄に増えてしまって困っていました。最近は子供が勝手に写真を撮りだす始末。画面半分も指入ってるし。スマホと一眼レフから自動転送された写真を機械的に整理するだけで、何万枚も貯まった写真からピンぼけ写真を手作業で特定するのは大変な作業です。さらに、John's Background SwitcherというフリーソフトでPCデスクトップの壁紙を自動更新していることもあって、不意にピンぼけ写真が壁紙になってしまい何とも言えないデスクトップに。
ところが、ピンぼけ写真を抽出するような機能を持ったソフトは探してみても意外とない。ピンぼけ写真の補正ソフトは直ぐに見つかるのに。じゃあ作ったらいいんじゃん。というノリでOpenCVを利用したエッジ検出によるスコアリングソフトをpython で自作してみました。貯まりに貯まった約6万枚の写真からピンぼけ写真を一括で抽出して、そこそこ写真整理ができたので紹介したいと思います。
目次:
1. ソフトダウンロード
2. 利用方法
3. 結果について
4. OpenCVとは(補足説明)
5. まとめと今後の展望
1. ソフトダウンロード
以下のURLからZipファイルをダウンロードして下さい。
Dropbox - ピンぼけ写真検索.zip - Simplify your life
2. 利用方法
適当なフォルダを作成してZipファイルを解凍します。ピンぼけ写真検索.exeを実行すると、フォルダ選択のウインドウが出ます。写真整理に「簡単デジカメ写真整理」というソフトを使っているので/年/年-月/というフォルダ構成になっています。
JPGファイルのあるフォルダ選択すると、サブフォルダを含めた全ての画像についてスコアリング処理を開始します。暫くお待ち下さい。
全ての処理が完了するとさきほど選択したフォルダにresult.xlsxというファイルが作成されています。PCのCPU性能にもよりますが、CPU:Intel(R) Pentium(R) Silver N6005の私のミニPC GMKtec NucBox7では約2400個の画像ファイルの処理完了まで3時間くらい放置しました。
3. 結果について
結果はExcelファイルとして選択したフォルダにresult.xlsxとして出力されます。トータルスコアの小さい順に縮小画像と合わせて確認することができます。A列はハイパーリンクになっているので、クリックすると通常使用している画像ビューワーが起動して、画像が表示されます。あとはビューワーの操作から不要なピンぼけ写真を削除してください。
※1 縮小画像の表示は500までです。
※2 トータルスコアは画像全体のスコアと顔部分のスコアの合計値です。
※3 顔認識は全体スコアが19万以下の場合にのみ行います。
4. OpenCVとは(補足説明)
OpenCVは、コンピュータビジョンのためのオープンソースのライブラリです。画像や動画の処理において、様々な機能を提供しています。OpenCVは、C++、Python、Javaなどのプログラミング言語から利用することができ、幅広いプラットフォームで動作します。
OpenCVにはカスケード分類機という顔認識のための学習済みのモデルがたくさん用意されています。これを利用することで簡単に顔認識を実装できます。今回はこの学習済みモデルを作成して利用して顔認識をしています。
5. まとめと今後の展望
作った本人の感想は「まあまあ使えるじゃん。ただ、写真を削除するかどうかは結局悩むなー」。まあ、明らかに酷い写真はきちんとスコアが低くなって、キチンと削除できると思います。
今後の展望としては、以下のような改善や追加機能の開発が考えられますが、300年ぐらい先です。
・スコアリングアルゴリズムの改善
現在はエッジ検出のみを使用していますが、他のアルゴリズムの組み合わせによって、より高精度なピンぼけ検出が可能になるかも。
・顔認識の精度向上
顔認識にOpenCVのカスケード分類機を利用していますが、精度がイマイチです。他のライブラリを利用して顔認識の精度を向上させることで、より正確なスコアリングが行えるようになるかも。
・ユーザーインターフェースの改善
現在はコマンドラインベースですが、より使いやすいグラフィカルユーザーインターフェース(GUI)を開発することで、使いやすくなるかも。
なお、当ソフトの利用した事による損害について、一切の責任を負いません。自己の責任の上で使用して下さい。感想や要望、バグなどありましたらコメントからお願いします。