2021年4月19日 星期一

Raspberry Pi Sky Camera

 


總之來記錄一下我的戶外天空相機。

我一直很想要做的是一個能夠照天空的縮時攝影機,不過最大的問題一直都在怎麼做到防水,卡在我的機械結構嚴重欠缺正常的知識。所以當初第一版長的是這樣:

買了一個盜版但是有WiFi的運動攝影機SJ4000再加上防水盒,然後改裝加上降壓電路直接從5V降成鋰電池3.8V,電池空出來的地方再放一個MCU讓開機的時候直接打開WiFi。
沒錯,處理防水跟改電路我選後者。SJ4000的WiFi連上RPI,然後RPI控制照相跟抓檔案/刪檔案,只是問題在於這台的韌體非常不穩定,長期用下來他的WebServer會有機率的死當,再加上照出來效果真的還好,就沒繼續弄了。

基本上就是一個給RPI Camera V2用的防水盒
原廠也有出一個改裝魚眼的套件,只是我沒買。主要是因為買的到IMX219的M12可替換鏡頭模組,可以直接裝上RPI Camera V2的電路板上 (如上圖),所以只要找的到合適的M12鏡頭就可以用了。但是我當時沒想到1/4"的魚眼鏡頭有那麼難找,上圖的設計是給1/2",鏡頭大到裝不下不說,照出來用1/4"的也沒有到全景,只好退回原本的廣角鏡頭。


然後又因為照天空很無聊所以改照101,角度調完之後就丟出去了,排線想說是是看能撐多久所以沒做甚麼特殊的保護。

不過照片當然沒有那麼簡單,魚眼鏡頭很容易造成鏡頭色散,嚴重的話就需要手動去校正,什麼叫做色散? 讓我用這張照片解釋:
校正前
校正後



可以看到圖有很明顯的中心偏綠,外側偏紅的情形,這是因為這個色散超出了RPI ISP的校正範圍,所以這時候就需要自己生出校正的矩陣:
1.首先要來照一張全白的畫面:
2.用https://github.com/6by9/lens_shading 這個來生出ls_table.h
再重新compile raspistill之後就好了

校正完畢之後照出來效果應該就會好很多,接下來要做的就是考慮日夜變化。
因為晚上的時候我希望曝光時間可以拉到10s (Raspberry Pi Camera V2的上限),白天我希望能夠照幾張不同的曝光來合成HDR,所以這裡我先用了這個: https://github.com/risacher/sunwait
來判斷現在的Strategy是哪個,我設定的是太陽落到-7度之後變成晚上的照相模式。

之後照相把raw檔也記錄下來,但是之後處裡的時候把jpg和raw切開,這樣如果我之後懶得碰raw,至少我可以只下載jpg的部分。
head -c -10237440 /home/pi/photo/ramdisk/$FILEDATE.jpgraw > /home/pi/photo/ramdisk/$FILEDATE.jpg
大概長這樣,順帶一提我開了一個小的ramdisk來放暫存檔案,最後資料會直接傳到現在已經消失的無上限教育版Google Drive。

從去年回美國之前架設好到今年二月初掛掉,這是今年二月的照片:
排線斷得很慘,而且還進了一點水,所以是時候來升級這台,並且把之前的資料來整理一下 (加上Google把無上限空間收回,我也得要把資料重新載下來)。

因為半年的資料不少,為了我的硬碟著想(timelapse大概有8T),我沒有用raw檔來做處理,還是直接抓jpg檔案(1.8T)。用PIL寫上照片的時間,然後處理HDR,只是可能因為我只用了jpg來合成,HDR的效果其實還好:

當然也有可能是因為白天的曝光Strategy的級距太小,只有ev-3,0,+3這三個級距。

這時候剛好看到一個合成完畢的Frame長這樣:
還滿好看的,雖然我不知道為什麼這原始檔案就有那個奇怪的亮度階梯在那邊

最後附上兩種縮時,一個是有HDR另一個沒有:


如果我把同個時間點但是不同天的照片抓出來排縮時:


你可以很明顯地看到背景的星星,金星,月亮移動方式都不一樣


大概是這樣,希望接下來的版本換掉排線之後可以用久一點。

需要改進的大概就是白天曝光的級距加大,晚上的要縮小,raw檔案可能要先壓縮再來上傳,以及要處理raw轉dng的相機校正檔案。還有日落跟日出可能要有個階梯式的Strategy調整方式,尤其是固定awb。希望我有空來修改raspistill直接把不同的曝光frame抓出來。