素人が自分でライフログカメラを組んでみた(その2)
前回の記事はこちら
さてシステムの時間がUTCになっていては、写真の撮影日時が全部狂ってしまうので、管理に手間がかかりすぎます。
Linuxはほとんど触ったことがないので、ググっていきましょう。
Linuxのタイムゾーンの設定めんどくせぇ
前回の記事でシェルスクリプトに環境変数を入れてみましたが、うまく反映されないのでさらに調べたところ、シェルスクリプトには親子関係があり、親システムには子シェルスクリプトの設定が反映されないので意味がないとのこと。
それでこちらを試しましたが
/usr/share/zoneinfo/Asia/Tokyoが無い。
/etc/sysconfig/clockも見当たらない。
ファイルとディレクトリを作って再起動してみましたが、読み込みません。
はい、次。
/usr/share/zoneinfo/が見当たりません
timedatectl コマンドも通りません
次。
tzselectコマンドは通りません。
tzconfigコマンドも通りません。
はい次。
zshの設定ファイルに記述するとよいという情報が入ってきましたので検索
示されているどの設定ファイルも見当たりません。作って適当なディレクトリに置いてみましたが意味なし。
参ったのでシステムの設定を変えるのは諦めました。
pythonでExifをいじっていく
システムの時刻が変えられないなら自分で勝手な値を書き込んでしまいましょう。
試しに画像のExifを表示させようとしたところ、このカメラはメタデータを一切つけてくれないということが判明
前回の記事でUTCが表示されていたのは、撮影日時ではなく、ファイルの最終更新日時だったようです。
まずは日本の時刻を出していく
tz = datetime.timezone(datetime.timedelta(hours=9),name='JAPAN') d = datetime.datetime.now(tz)
時刻をもとにファイル名を付けてSDカードに写真を一旦保存する
filename = d.strftime('%Y-%m-%d %H-%M-%S') filepath = '/media/sdcard/'+filename+'.jpg' cv2.imwrite(filepath, frame) camera.release()
で、Exifを付加させたいわけですが、最初pyexiv2が使いやすそうだったのでインストールしたところ、32bitのシステムに非対応だということで使わせてもらえませんでした。
なので他にExifが書けるものが落ちてないか調べてpiexifを採用
プロパティDateTimeOriginalに、あらかじめ決められた書式で文字列をエンコードして渡す
exif_ifd = {piexif.ExifIFD.DateTimeOriginal: d.strftime('%Y:%m:%d %H:%M:%S').encode('utf-8')} exif_dict = {"Exif":exif_ifd} exif_bytes = piexif.dump(exif_dict)
先ほど一旦保存した写真を開いて、Exifを付けて上書き
im = Image.open(filepath) im.save(filepath, exif=exif_bytes)
これで撮影日時が記録されるようになりました。ただしファイルの更新日はUTCのままです。
どんどん使っていきましょう
ここでもうひと手間
やっぱり迷彩柄をつけました。逆に怪しいような気もしますが....。マッキーは色落ちが激しくて黒と水色のマダラになってしまった
ちょっとオーバーヒートが心配、あとメモリがギリギリなので画質下げた方がいいかもしれません。
連続使用時間ですが、2500mAhのバッテリーの電池残量表示のLEDが4つある内の1つを3時間くらいで消費しているので、フル充電するとおよそ12時間動くことになりそうです。旅行に行っても日中は持ちそうですね。
参考