地理情報とあまり関係ないですが
先日参加した学会の懇親会にて主催者の一人が
“こんな処理ができたらいいなー”
とおっしゃっていたことを次の週の野外調査の宿舎で思い出しました。
んでビールのみながらPythonでスクリプトを書きました。
自動撮影装置(自動撮影カメラ)で
X番目に撮影された画像(動画でもよい)とX+1番目に撮影された画像の
タイムスタンプを比較し、差が指定された時間以内(今回は分単位)であれば
両者をグループ化する(同じフォルダに格納する)という単純な処理です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# -*- coding: utf8 -*- ## 標準モジュールのインポート import os import glob import datetime import shutil ### 入力例 ## path "C:\\data\\nakates\\" ## ext "jpg" ## intval 10 def gpic(path, ext, intval): # 対象フォルダ内のファイルリスト作成 flist = glob.glob(path + '*.' + str(ext)) # リストの要素の個数をカウント fcount = len(flist) # リストをソート flist.sort() # 変数の初期値を設定 # i はグループ化の名称(グループ内で最も早く撮影されたデータの順序) i = 0 # x はリスト内の順を示す変数 x = 0 while i < fcount: # ファイルの保存フォルダを作成 os.mkdir(path + str(i)) # x番目のファイルを保存フォルダ内にコピー shutil.copy2(flist[x],path + str(i) + "\\" + os.path.basename(flist[x])) # リストの要素数を超えないように条件設定 if x + 1 == fcount: break # x+1番目のファイルをx2と定義 x2 = x + 1 # x番目およびx+1番目のファイルのタイムスタンプをdatetime形式で抽出 dt = datetime.datetime.fromtimestamp(os.stat(flist[x]).st_mtime) dt2 = datetime.datetime.fromtimestamp(os.stat(flist[x2]).st_mtime) # x番目およびx+1番目のファイルのタイムスタンプの差が10分を超えなければループ while dt2 - dt < datetime.timedelta(0,0,0,0,intval,0,0): # x の10分後以内にx+1番目のファイルが撮影された場 # x+1番目のファイルを保存フォルダ内にコピー x = x + 1 shutil.copy2(flist[x],path + str(i) + "\\" + os.path.basename(flist[x])) ## x + 1 がリストの要素数と同じ場合ループ終了 if x + 1 == fcount: break # x+1番目のファイルをx2と定義 x2 = x + 1 # x番目およびx+1番目のファイルのタイムスタンプをdatetime形式で抽出 dt = datetime.datetime.fromtimestamp(os.stat(flist[x]).st_mtime) dt2 = datetime.datetime.fromtimestamp(os.stat(flist[x2]).st_mtime) # チェック用メッセージ print "grouping segment " + str(i) + " was finished" print "group " + str(i) + " is including files from no " + str(i) + " to " + str(x) # ディレクトリ内ファイル数をカウント pcount = int(x) - int(i) + 1 # ディレクトリ名をリネーム start_end_count ex 15_20_6 os.rename(path + str(i),path + str(i) + "_" + str(x) + "_" + str(pcount)) # 次に作成されるグループのリスト内での順番を定義 i = x + 1 x = x + 1 # ディレクトリ名をリネーム(最後のファイル用) os.rename(path + str(i),path + str(i) + "_" + str(x) + "_" + str(pcount)) print "finish" if __name__ == '__main__': print "this is code block" |
とりあえず
ここからダウンロードして解凍
gpic フォルダをフォルダごと
windowsであれば
C:\Python27\Lib\
にコピーしてください。
それで
python (command line)
または
コマンドプロンプト(最初にpythonと入力しENTERする)
などで以下のようにコマンドを入力して実行してみてください。
1 2 3 4 5 |
# モジュールのインポート from camtrap import gpic as g # g.gpic("dataディレクトリ","対象ファイルの拡張子",指定する間隔(分単位)) # 入力例 g.gpic("C:\\data\\","jpg",10) |
対象とするデータフォルダ内にグループ毎のフォルダが出力され
そこに対象グループに含まれるファイルが格納(コピー)されます。
取り急ぎメモかわりに書きました。
ではでは