日ごろ撮りためた子どもたちの写真を日付で整理し、Googleフォトにアップロードまでしてくれるツールを制作しました!
大量にある写真の整理作業を、ワンクリックでできるようになりました。
このツール制作で学んだPythonのプログラミング知識がこちら!
- ファイルのコピー・移動
- フォルダの作成
- ファイルの更新日付取得
- 画像ファイルのExifデータ参照
- 画像ファイルの圧縮
- Google Photos APIの使い方
きっかけ
わが家では、日々こどもの写真や動画をスマホやNikonのカメラで撮っては、ローカルネットワーク内のNAS(Network Attached Storage)に蓄積しています。
データは、日々写真と動画がいっしょくたになって一つの仮置きフォルダに蓄積されていきます。そのため、以下の作業を1セットとして、定期的に整理作業を行っていました。
- 仕分けちゃんというフリーツールを使って、写真と動画を日付ごとのフォルダに分類。
- FileHammerというフリーツールを使って、写真と動画を分類。
- 好きな写真をコピーし、Caesiumというフリーツールで圧縮。
- 圧縮した写真データをGoogleフォトにアップロード。
今回、この定期的に行っている日付分類・写真動画分類・圧縮・Googleフォトへのアップロードという一連の作業について、1クリックで自動的にやってくれるツールを制作しました。
仕様検討
動作イメージ
大きく以下3の動作構成とします。
- 仕分け
- 画像圧縮
- Googleフォトにアップロード
具体的なファイル操作イメージです。
ユーザ入力
仕分け元や仕分け先のフォルダを指定したり、作業上の都合で一時的に仮置きする必要があるため、ユーザは以下の情報をツールに入力することにします。
- 仕分け元のフォルダ
- 仕分け先のフォルダ(写真)
- 仕分け先のフォルダ(動画)
- Googleフォトアップロード用の一時フォルダ
- アップロードしたいGoogleフォトのアルバム名
制作したツール
起動画面
制作したツールの起動画面です。
ユーザは、仕分け元や仕分け先のフォルダを指定します。
仕分け動作
仕分け開始ボタンを押すと、①仕分け、②画像圧縮、③Googleフォトにアップロードまでの一連の作業を連続してやってくれます。
各作業の処理進捗を表示するため、プログレスバーを3つ設けました。処理状況は、処理を完了したファイル数をもって進んでいきます。
各機能の説明
仕分け機能
仕分け機能の処理内容はこのようになっています。
- ファイルの日付を確認
- 振分先として日付フォルダを作成
- 拡張子を見て行先を振り分け
- 画像ファイルを一時フォルダにコピー
写真ファイルと動画ファイルが混ざった状態の仮置きフォルダを、os.walk関数でサブフォルダまで検索し、ファイルをひとつずつ見ていきます。見るポイントは、ファイルの拡張子と更新日付です。画像ファイルか動画ファイルかで、移動先を判別します。
移動先のフォルダは、この時に同時に作成します。取得したファイルの更新日付で命名したフォルダを作成し、移動先とします。
また、画像ファイルについては後でGoogleフォトにアップロードするため、分類処理と平行して一時フォルダにコピーをとっていきます。
画像圧縮機能
Googleフォトにアップロードするために一時フォルダにコピーした画像ファイルを、圧縮していきます。
圧縮度の設定(パラメータ名:quality)は、いくつか試しましたが30がよさそうでした。この値をいろいろ変えて圧縮し、圧縮後の画像を拡大して確認したところ、30ぐらいが目視での劣化判別ができないギリギリな感じでした。
Google photoアルバムアップロード機能
圧縮した画像ファイル(写真データ)たちを、予め家族と共有しているGoogle photoアルバムにアップロードします。
Google photo APIを使ってアップロードするようにしました。
APIを介しての写真アップロードは、Google photoのサイトで事前に作成したアルバムに対してはできませんでした。これまで祖父母と共有していたアルバムに対して、APIを介して写真をアップロードしようとすると、permissionエラーが出ました。
そこで、一旦APIを使ってGoogleフォト上にアルバムを作成し、そのアルバムを共有設定にして改めて家族にアクセス権を付与することで、ツールからもアップロードできるようにしました。
参考にしたサイト
Google photo APIの具体的な使い方については、こちらのとっとメモをご覧ください。
まとめ
これまでフリーツールを駆使して定期的に実施していた写真・動画ファイル整理作業は、なにげに30分は拘束される作業だったのですが、今回ツールを制作することで1クリック作業にすることができたので、人が手を動かすのは1分もかからず、拘束時間を短くすることができました。
以上になります!
コメント