顯示具有 教學 標籤的文章。 顯示所有文章
顯示具有 教學 標籤的文章。 顯示所有文章

2009年5月3日 星期日

使用gpsPhoto

之前介紹過使用gpsPhoto和exiftools來幫相片加上geotag,此工具的好處是支援DSLR的raw檔。

一般工具則只支援JPG檔而已,對於RAW檔使用者有許多不便。

最近在網路上找到一篇不錯的資料,將指令變成批次檔,之後只要將相片資料夾和gps檔案放好定位後拖曳就可以自動加上geotag(事實上,是我自己寫得批次檔突然有問題一.一,只好去找現成來用)。


原文連結:使用 gpsPhoto.pl


原文如下:


我已經介紹過不用 GPS 將地理資訊加到照片,現在來說明如何利用 gpsPhoto.pl 將 GPS 紀錄整合到相片裡面。講解以前,請確認你已經有 GPX 格式的 GPS 紀錄,同時也安裝了 gpsPhoto.pl。

gpsPhoto.pl 用來標記相片地理位置的選項十分繁多,我簡化只說明兩種用法:

gpsPhoto.pl --dir {imageDir} --gpsdir {gpxDir} --timeoffset {N}

gpsPhoto.pl --image {image} --gpsfile {gpx} --timeoffset {N}

第一種用法可以一次標記地理位置到 imageDir 目錄內的全部相片檔,GPX 檔案則全數放在 gpxDir 目錄內;第二種用法可以標記地理位置到一張相片 image,gpx 是 GPX 檔案名稱。N 數值是用來描述相片時間與 GMT (格林威治時間) 的關係,我的相機不能設定時區,所以我是直接設成台灣當地時間。GPX 檔案內使用的是 GMT 時區,相片時間必須減掉 -28800 秒 (8 小時) 才等於 GMT,所以對我而言,N 值等於 -28800。(註:有的 GPS 軟體轉出來的 GPX 時間已經是當地時區,這時 N = 0)

我喜歡一次就標記指定目錄的全部相片,而且還希望能遞迴搜尋處理所有子目錄,所以下面的批次命令檔 GeoTaggingDir.cmd 可以派上用場:

@echo off
if %1!==! goto :Syntax
setlocal
set gpsdir="C:\Download Files\GPS utilities\LogFiles"
for /D %%i in (%*) do call :GeoTaggingDir %%i
endlocal
pause
goto :EOF

:Syntax
echo Syntax:
echo GeoTaggingDir.cmd {input1} [input2] ...
pause
goto :EOF

:GeoTaggingDir
for /D %%i in ("%~1\*.*") do call :GeoTaggingDir "%%i"
echo Processing directory %1
gpsPhoto.pl --dir %1 --gpsdir %gpsdir% --maxtimediff 180 --timeoffset -28800

記得修改:第四行的 gpsdir 變數指定 GPX 檔案放置的目錄路徑 (我喜歡將所有的 GPX 檔集中放置同一目錄,讓 gpsPhoto 自己去尋找適當紀錄),最後一行是執行 gpsPhoto.pl 的語法,這裡多用了 --maxtimediff 選項,由於 GPS 不可能隨時記錄地點,有時也會與衛星信號失聯,所以 180 代表相片時間與 GPS 紀錄相差小於 180 秒就承認找到記錄,預設是 120 秒。喜歡的話還可以加上其他選項,例如 --copyright "by-nc-sa" 指定 Creative Common License Type;--credit "Shenghung Lin" 放上名字。

在檔案總管選擇要處理相片的資料夾,用滑鼠左鍵拖曳到 GeoTaggingDir.cmd 開始標記地理位置。

2008年10月12日 星期日

利用exiftool和gpsphoto把raw檔加上geotag

昨天參考了01上的文章為Raw圖檔同步軌跡-GpsPhoto.pl,動手把Canon的CR2檔案和轉出來的jpeg加上gpstag資料。

如此上傳圖案到picasa和flikr就會自動帶入位置,同時也可利用google earth來瀏覽照片。

不過該篇文章有些地方沒有寫的很明白,在此作個補充。

幫raw檔加上geotag前,記得先copy一份出來備份,避免加上geotag後raw檔無法開啟,原始檔案又砍掉就麻煩了。

首先電腦必須安裝ActivePerl

安裝完畢後執行Perl Package Manager

選View all packages找到image-ExifTool,目前版本是7.30,官網最新是7.46,日後再來教學如何更新版本。
gpsPhoto01

點選後,選右上角的Mark for Install,圖示右下方會出現+的符號
gpsPhoto02

接下來選右上角的綠色箭頭圖示Run Marked Actions,或是用快捷鍵ctrl+enter
gpsPhoto03

接下來程式就會開始安裝,跑完後可以選左上角的view all installed packages,確認有沒有出現在列表。
gpsPhoto04

主要步驟安裝完畢,接下來要安裝gpsPhoto

到官網取得程式,在Direct download of gpsPhoto.pl (HEAD)按右鍵另存新檔。

下載後是gpsPhoto.pl,copy到Active Perl安裝目錄(預設是C:Perl)的bin目錄底下
gpsPhoto05

以上安裝完畢

接下來準備好軌跡檔,以Garmin為例,輸入軌跡檔後另存為gpx檔案,檔名建議英文
gpsPhoto06

為了方便使用,建議把gps的軌跡檔和圖片放一起

按左下角的開始->執行,輸入cmd,執行
輸入gpsphoto.pl -dir=c:\album\1010 -timeoffset=-28800 -gpsfile=c:\album\1010.gpx -maxtimediff=60 -kml=google.kml
gpsPhoto07

在此說明一下-dir為指定目錄,我相片是放在c:album101,所以我是輸入c:\album101,

如果是檔案,則改為-file=檔名路徑,例如-file=c:\album\1010\123.JPG

-timeoffset=-28800是台灣(GMT+8)的值,算法是 值(秒)=GMT-當地時間(相機時間)

因為台灣為GMT+8,標準時間為GMT+0,所以GMT+0 - GMT+8為負,因此-28800後軌跡檔時間才會對應到相機。

Canon 40D的時間設定是正常設定,有的相機時間設定是GMT格式,這時候就要作一些調整,一般來說大致是用-28800。

-gpsfile為指定gpx檔的路徑。

-maxtimediff=60,設定相片和gps軌跡的時間誤差,預設120秒,我設定60秒提高精確度,如果有相片無法對應,則逐步提高數值,我是以60秒為間隔往上。

-kml=google.kml,同時輸出google earth的檔案,可以不用

中途會發現有的圖片顯示could not find a coordinate,那表示檔案和軌跡時間無法對應,這時候回去調整maxtimediff數值,開始往上加,例如120、180等等,直到全部檔案都完成對應為止。
gpsPhoto08

完全對應則會出現exact match,最後顯示對應57張圖,全部有64張,所以還有7張需要修正
gpsPhoto09

修改-maxtimediff值
gpsPhoto10

已經有geotag的圖片,則不會寫入新的位置,只會更新尚未寫入geotag的圖片。
gpsPhoto11

等全部圖片更新完畢,就可以上傳了。
gpsPhoto12

a quickr pickr post

備份DSM transmission的BT檔

群暉的transmission套件的BT檔存放位置是 /usr/local/transmission/var/torrents 利用cp /usr/local/transmission/var/torrents 目的資料夾路徑,就可以將BT檔COPY到新資料夾備份