写真を整理したい
2000年代半ばにフィルムカメラからデジカメに乗り換えて、ビデオカメラも DV テープから HDD, SD カードと変遷し、今では気軽に何でもスマホで撮るようになりました。おうち NAS には気付いたら 1Tbyte 弱ものデータがあります。
普通にカシャっと撮った写真とビデオが中心ですが、誰かにシェアするとかいった目的でコピーした写真や、キャプチャ画像なんかもいっぱいあります。そういった写真は、あとでたまに目にした時に「これいつ頃のだっけ?」「覚えはあるんだよね、どこだっけ?」「アレの時でしょアレのとき」「アレって?」「ほらーアレだよアレ」ということに陥りがちで、困っていました。
そんな折に、OpenCV を使えば、写真のなかから断片をマッチングできるらしい、と聞きました。画像から切り取った断片がどこにあるか、見つけてくれるそうです。これを使えば、キャプチャ元の写真や動画を特定できるかもしれません。
そんなわけで目標は、おうち NAS に入っている写真から、キャプチャとコピーとその元画像・元動画を見つけることにしました。見つけたら、どう見せるようにしようかな。今はひとまず、シンボリックリンクでも置いとけばいいかな。あとでいいアイデア出てきたら変えよう。
さて、そもそも対象ファイルをぐるっと巡る必要があるんだけど、いくつあるんだろう。OpenCV は python から呼んでる事例が多いので、WSL2 から NAS をマウントして、python でぐるっと巡ってみることにしました。python 何年ぶりだろ。覚えてないくらい昔なので、文法とかぐぐり直しながらになります。
まずはその前に、NAS 上のフォルダ構成を観察してみます。
u939b$ cd とあるフォルダ u939b$ ls -CFla 合計 4648 drwxrwxrwx 3 kashima users 4096 9月 6 2020 ./ drwxr-xr-x 33 kashima users 4096 4月 10 14:13 ../ drwxrwxrwx 3 kashima users 4096 9月 6 2020 '.@__thumb'/ -rw-rw-rw- 1 kashima users 1095488 9月 6 2020 IMG_0001.jpg -rw-rw-rw- 1 kashima users 1076122 9月 6 2020 IMG_0002.jpg -rw-rw-rw- 1 kashima users 791437 9月 6 2020 IMG_0003.jpg -rw-rw-rw- 1 kashima users 845503 9月 6 2020 IMG_0004.jpg -rw-rw-rw- 1 kashima users 897136 9月 6 2020 IMG_0006.jpg
ファイル名が "." から始まるディレクトリがあるのね。Windows 絡みらしい。こういうのは除こう。もうひとつ、pathlib の Path クラスを使うと、ディレクトリ内のファイルをぐるっと for で巡れるらしい。
#!/usr/bin/env python3 from pathlib import Path for file in Path(".").iterdir(): if file.name[0] != ".": print(file)
あぁ、サブディレクトリに対応してないや。あと、"." 以外にもいくつかの文字で始まるファイル名は、取り除いたほうがいいな。
#!/usr/bin/env python3 from pathlib import Path from typing import Generator def iterfile(path: Path) -> Generator[Path, None, None]: first = "" if path.name == "" else path.name[0] if first == "." or first == "@" or first == "_": return if path.is_file(): yield path if path.is_dir(): for child in path.iterdir(): for item in iterfile(child): yield item for file in iterfile(Path(".")): print(file)
よしこれでサブディレクトリ対応 OK。次は写真ファイルだけを for で巡れるようにしてみよう。