接下來就不一樣了,首先格式化/data分區(注意,不是清除),輸入yes後確認 (為了刪除加密data分區)
接著重新啟動回recovery (注意,不是回系統)
然後在這一步刷入客製版Magisk (一定要先刷入客製版) Github link
(為了阻止ROM將/data分區再次加密)
刷入後進入系統後刷入Riru Core,完成後重新啟動系統:
重新啟動完成後刷入canary版edxposed (我是用sandhook版本),再重新啟動
重新啟動後,Edxpose就就位了
確認Edxposed啟動之後,接下來可以去Magisk從客製版升級成最新的官方版了~
接下來就可以安裝想要的Xposed App,在Edxposed啟用模組,重新啟動就能用啦~
如果啟用白名單模式要記得把對象Apps也加入白名單內嘿
目前我主要使用Xposed的有地圖類App
配合skyolin helper,可以實現不同App使用不同dpi設定(per app dpi settings):
這樣就可以讓地圖顯示更多細節以供探索了~
]]>網路上有很多解鎖或是刷機的方式,基本上都寫的很片面或是觀念根本就是錯誤的
導致很多剛入坑的新手因為概念混淆而踩了不少坑
這篇就為各位統整一下整個刷機的思路和簡化整體的步驟
解鎖是小米手機刷機的必須步驟,由於2019年之後所有中國版手機都已經禁中國\國際版跨版互刷
所以在刷機前必然的需要解鎖,否則你會重演某位通訊版版友的慘劇——得到一塊高科技磚頭
基本上很簡單,如果你原本沒有一個小米帳號的話,先去註冊一個
但是你原本已經有的話就用原本的帳號就好,基本上越老的帳號等級越高,越有機會等待的時間越少
然後到這個網址申請解鎖:
http://www.miui.com/unlock/apply.php
這部是一般人最容易犯錯的地方
因為將帳號綁定至小米手機並不是在手機裡面登入小米帳號的意思
你登入了小米帳號,並不是完成綁定的動作,真正的綁定的動作請按照以下步驟:
請直接至以下網址下載:
http://www.miui.com/unlock/done.html
這部很多教學弄的很繁雜,一不小心驅動程式裝錯還會導致各種悲劇發生
其實如果常常在摸程式相關的東西的話一定知道Windows下有個類似Ubuntu套件管理程式apt的chocolatey
我們直接透過Chocolatey安裝Android驅動和Fastboot、ADB工具就好
按照官網說明安裝,首先在開始視窗搜尋CMD
得到結果後先別急著按下去,請按右邊的「以系統管理員身份執行」
開啟之後再將以下程式碼貼上(Windows 10內的命令提示字元可以Ctrl+V):
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
重新再以系統管理員身份執行一次命令提示字元視窗之後,就可以開始用Chocolatey安裝套件了
我們直接依照以下指令安裝即可,一鍵完成:
choco install universal-adb-drivers adb -y
完成之後一樣重開命令提示字元視窗
基本上經過168小時的漫長等待之後,請先將手機進行關機
等待20秒,等手機真正完成關機之後同時按下手機的音量下鍵、電源鍵(訣竅:電源鍵請按兩秒後就放開)
開機進入小米兔維修機器人畫面的Fastboot模式
然後將手機使用USB線連接上電腦,打開之前下載的小米解鎖工具(請注意,不是小米刷機工具)
按照工具的提示步驟一步步完成就可以完成刷機
刷機之後工具會直接格式化手機的/data
分區,也就是將整隻手機重設,你解鎖之前的資料都將會不見
之後手機會自動重開機進入歡迎畫面,完成解鎖的步驟
完成解鎖動作之後,我們終於可以對這台手機為所欲為了
接下來就是準備來完成我們喜聞樂見的刷機的部分啦,基本上分成以下兩個步驟:
還記得我們剛剛有通過Chocolatey安裝ADB、Fastboot工具嗎?
接下來我們將會使用Fastboot工具為手機刷入TWRP啦
當然一樣把手機關機後,按音量下和電源鍵進入Fastboot模式
用USB接上電腦,打開命令提示字元CMD
(這個時候不用使用系統管理員權限執行也可以)
然後先用以下指令檢測手機是否有連線上電腦:
fastboot devices
如果手機有連線上的話就會顯示類似以下內容:
接下來我們先去下載你手機型號對應的TWRP:
https://twrp.me/Devices/
找到對應機型後按「Download Link」下面的連結就可以下載
這邊很有趣,其實每台手機基本上都會有一個第三方共用的綽號(有點類似學名)
像是小米的9T Pro綽號就是raphael,可以避免各品牌出了一堆相似的名稱造成的混淆
下載完後假設我把下載到img檔案放到R槽根目錄
我就先在命令提示字元視窗中將自己移動到R槽根目錄:
cd /d R:
然後使用fastboot命令將剛剛下載的TWRP .img檔案刷入手機的Recovery分區
(請注意!twrp-3.3.1-0-davinci.img 名稱請替換成你下載的.img檔案名稱!)
fastboot flash recovery twrp-3.3.1-0-davinci.img
然後將手機重開到剛剛刷寫的TWRP系統以繼續完成刷機步驟
fastboot boot twrp-3.3.1-0-davinci.img
(理論上輸入以上指令會手機自動重開到recovery,如果沒有請按 「電源+音量下」重開到recovery )
如果你是一般的使用者,想要一般順順用的話,可以直接下載官方的國際版系統就好
由於官網下載的連結實在有點混亂,我有找到一個台灣人整理出來的官方韌體下載網站:
連結如下:
https://mirom.ezbox.idv.tw/phone/
如果你要小米官網的線刷工具刷,而不是透過TWRP刷機的話請下載.tgz
檔案
(線刷是更徹底的刷機工具,會把整個手機所有的分區重做,而不是只刷入\system
分區
進行跨版線刷請千萬記得不要把手機鎖lock
回去,會磚)
而一般來說請下載一般的**.zip
檔案**就好(請不要下載到OTA版本,也不要下載後自作聰明的把檔案解壓縮,只有.tgz
檔案需要解壓縮)
第三方ROM一般分為兩種,一種是MIUI的修改版,一種是LinageOS Based的原生系統
一般我的使用經驗來說,原生系統因為缺少對應的高效率驅動和Kernel以及MIUI的省電調度機制,相比MIUI Based的ROM會更加耗電,所以一般來說我還是會使用MIUI Based的ROM
MIUI Based的ROM最主流的就是MIUI.EU,他自己有個論壇,但我們只要下載ROM的話,其實可以去他的下載頁面就好:
還有另一個俄國人做的MIUI.EU Based的第三方版本:MIROOM,下載點在此:
下載完後,請將手機重開進入TWRP,然後用USB接上電腦,將.zip
檔案丟入手機的儲存空間,準備開始刷機
剛剛的步驟我們已經透過在關機狀態下按「音量下」+「電源鍵」進入TWRP Recovery系統
(秘訣:電源鍵只按3秒,音量鍵不放開直到出現TWRP藍色畫面)
接下來簡單幾步就可以刷機啦!
首先如果英文介面看不慣的話,可以按以下步驟設定成繁體中文介面:
接下來簡單三步驟完成刷機:
.zip
檔案(請不要自作聰明的把ZIP檔案解壓縮)當TWRP跳出刷機已完成的時候,先不要急著重啟到系統,為了避免升級遇到的各種奇奇怪怪的問題,我們最好還是先手動清除\data
、\cache
、\dalvik_cache
分區比較好(也就是重設設定,俗稱的三清):
(可以點選清除 -> 滑動按鈕確認恢復出廠;或是點選高級清除,點選以上三個分區後滑動按鈕確認清除)
最後就可以重啟進入系統了,大約等待5~10分鐘左右就可以進入刷機後的系統啦!
基本上除了解鎖的步驟比較難搞之外,如果只需要單純刷機的話在小米系列的手機上只需要幾個步驟就可以完成了,瞬間把一台中國App充斥的系統清洗的乾乾淨淨。
在往後還有通過Magisk平台獲得Root權限和安裝Edxposed (目前能在Android 10使用的Xposed框架),可以實現更多神奇的功能(例如在個別不同的App以不同DPI顯示,在地圖類App上很好用)。不過這部分的步驟要注意到地方就相對繁雜很多,如果之後有空的話再來寫教學吧~
]]>當然,最重要的是Ramdisk驚人的小檔案讀寫速率,遠遠超過目前的任何固態硬碟,這點在處理大量密集小檔的程式碼特別有用,光是解壓縮一些程式碼Source Code包就有明顯地區別,而Compile的時候速度提升就更明顯(雖然以SSD做為系統碟情況下,大部分速度瓶頸都在CPU性能上)。
今天趁著有時間重弄了一下,程式碼參考來自於[1],[2],[3]。
先前的文章建立的Ramdisk磁碟格式都是HFS+。不是說不好,只是Apple最近推的APFS(蘋果檔案格式)磁碟格式是專為SSD設計的,讀寫速度又更快,更適合我們用來建立MAC Ramdisk的磁碟格式。
於是我就照著參考的幾篇文章的方法,把他寫成完整的Code,提供給大家參考用:
###設定Ramdisk大小,單位(MB)###
SIZE=2048
####磁碟名稱###
DISKNAME=Ramdisk
###取得Home資料夾路徑##
HOME_DIR=$(cd ~;pwd)
###要轉移到Ramdisk的資料夾清單###
declare -a PATH_LIST=('Library/Caches/Google' 'Library/Caches/Microsoft Edge Dev' \
"Library/Caches/Adobe Camera Raw 2" "Library/Caches/Homebrew" "Downloads")
###要建立的空資料夾清單###
declare -a EMPTY_PATH_LIST=('Picture' 'Screenshot' \
"Codes" "Documents" "Photo" "TEMP")
###當Ramdisk不存在時建立他###
if [[ ! -d /Volumes/${DISKNAME} ]]; then
DISK_ID=`hdiutil attach -nomount ram://$(( ${SIZE} * 1024 * 1024 / 512 ))`
diskutil partitionDisk $DISK_ID GPT APFS "${DISKNAME}" 0
fi
###把轉移資料夾的過程寫成function###
create_symbolic_link(){
if [[ ! -d /Volumes/${DISKNAME}/${LINK_PATH} ]]; then
echo " Create /Volumes/${DISKNAME}/${LINK_PATH} Directory"
mkdir -p "/Volumes/${DISKNAME}/${LINK_PATH}"
fi
if [[ -d ${HOME_DIR}/${LINK_PATH} ]] && [[ ! -h ${HOME_DIR}/${LINK_PATH} ]];then
echo " Delete ${HOME_DIR}/${LINK_PATH}"
rm -rf "${HOME_DIR}/${LINK_PATH}"
fi
if [[ ! -h ${HOME_DIR}/${LINK_PATH} ]];then
ln -s "/Volumes/${DISKNAME}/${LINK_PATH}" "${HOME_DIR}/${LINK_PATH}"
echo " ...finish linking ${LINK_PATH}\n"
fi
}
###把建立空資料夾的過程寫成function###
create_empty_folder(){
if [[ ! -d /Volumes/${DISKNAME}/${EMPTY_FOLDER} ]]; then
echo " Create /Volumes/${DISKNAME}/${EMPTY_FOLDER} Directory"
mkdir -p "/Volumes/${DISKNAME}/${EMPTY_FOLDER}"
fi
}
###移動到Ramdisk磁碟###
cd /Volumes/${DISKNAME}
###依照清單內容轉移資料夾###
for LINK_PATH in "${PATH_LIST[@]}";
do
echo "linking ${LINK_PATH}"
create_symbolic_link ${LINK_PATH}
done
echo ""
###依照清單內容建立空資料夾###
for EMPTY_FOLDER in "${EMPTY_PATH_LIST[@]}";
do
echo "linking ${EMPTY_FOLDER}"
create_empty_folder ${EMPTY_FOLDER}
done
如果要設定開機啟動的話先把上面的程式碼存成.sh檔案之後放到你想放的位置,例如說我是放到~/Library/Ramdisk/createRamdisk.sh
記得將createRamdisk.sh
權限設定成可執行:
然後將以下程式碼複製:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.ramdisk</string>
<key>ProgramArguments</key>
<array>
<string>/Users/${your_user_name}/Library/Ramdisk/createRamdisk.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
儲存成local.ramdisk.plist
,丟到~/Library/LaunchAgents/
,然後修改檔案權限成644:
chmod 644 ~/Library/LaunchAgents/local.ramdisk.plist
然後增加到自動啟動項目:
launchctl load ~/Library/LaunchAgents/local.ramdisk.plist
啟動自動啟動項目:
launchctl start local.ramdisk
這樣就可以在開機自動啟動Ramdisk了~
最後來測一下速度:
對上現在新的有SLC快取的SSD似乎是沒啥勝算,不過對於一台2013的機器來說,速度已經很快了~
]]>那究竟拍攝效果如何呢?
以下是小米9T長焦的範例,使用此版本移植版GCAM上腳架拍攝:
(建議各位數毛黨可以把照片放大最大,這些照片不怕1:1檢視,所以我都不縮圖)
Google Camera JPG直出:
Google Camera DNG RAW 後製(水平校正、調色):
Google Camera JPG直出:
Google Camera DNG RAW 後製(水平校正、調色):
Google Camera JPG直出:
Google Camera DNG RAW 後製(水平校正、調色):
這支手機還有一個有趣的一點,就是它三顆不同焦段鏡頭都可以使用Google Camera多幀降噪功能,我們可以順便來比較一下:
超廣角(Sony IMX481,F/2.4,124.8°):
因為光圈太小,即使有用Google Camera多幀降噪雜訊一整個爆炸多
標準(Sony IMX586,F/1.75,23.6mm):
IMX586表現稍微好那麼一點
望遠(SAMSUNG S5K3M5,F/2.4,50mm):
至於這樣的水準到底如何呢?就用一張同時以Sony A7M3 50mm鏡頭拍攝的照片做比較吧~
來看看細節差距:
即使不看畫素量,看看那個畫面的純淨度和鏡頭解析力,差距依然是天與地般的巨大。
不過作為一個手機上超級超級小的長焦鏡頭,夜拍的畫質能拉到能夠站上台一起比較的程度已非易事,
其他手機的長焦鏡頭因為沒有多幀降噪,也沒有後製空間,應該就沒有這個可能性了。
手機是幫老媽買的,測試完就還她了,應該近期無法再進行測試這台手機了。
畢竟我不是有能力讓廠商請Model來拍攝各種美美照片的寫手 :)(我已經打聽到業內的價格XD)
接下來就等等看Pixel 4到底有沒有長焦鏡頭囉!!
]]>要了解原因,我們要先談論到一個名詞叫做有效畫素。
有效畫素是指給定的DB值(訊噪比)之下,其在不同ISO之下高於給定DB值的畫素量,即稱為有效畫素。
講的跟外星語一樣,簡單講就是說:在ISO越高的情況之下,真正達到給定水準的畫素量會下降,而在高ISO條件之下所得真實無虛假無灌水的畫素,其實會比相機標示的畫素還要少很多!因為在高ISO之下很多畫素其實都變成沒有意義的雜訊了!
而這個有效畫素,其實就是大家常常掛在嘴邊講的:畫質!
OK,了解了有效畫素了之後我們可能會問,既然高ISO之下有效畫素會衰退,那到底會衰退多少呢?
我們來中國知名相機評測網站藍拓的資料庫一探究竟。在這裡為了方便比較,我選擇了Sony A7一代系列S、M、R作為比較標準,剛好可以展示在技術代差不大下,相同感光元件大小在低、中、高三個不同畫素量的有效畫素表現如何(藍拓資料庫使用法)
相機型號 | 感光元件型號 | 感光元件尺寸 | 單位像素面積 |
---|---|---|---|
Sony A7S | IMX157 | Full Frame | 8.42μm |
Sony A7 | IMX235 | Full Frame | 5.97μm |
Sony A7R | IMX094 | Full Frame | 4.88μm |
我們可以發現一件有趣的事:在ISO100的情況下,畫素量最高的A7R有效畫素可以達到3640萬畫素;標準型的A7則是2430萬畫素;為低光源拍攝而特化的A7S則僅有1220萬畫素,這樣看起來畫素最多的A7R贏面最大嗎?
不,當進光量逐漸減低,我們必須使用到比較高的ISO拍攝時我們會發現,A7R的有效畫素量正在急遽衰退!到了ISO400的時候,A7S、A7、A7R的有效像素量已經相差無幾;而到了ISO800(這也是一般人夜拍可接受的ISO下限)的時候,三台機身的有效畫素量已經發生逆轉!A7S依然維持819萬的有效像素量,而A7R僅剩下679萬,A7則僅剩下區區532萬像素,也就是說在ISO800的時候,低畫素的A7S畫質已經高過了A7R和A7。
結論:**高畫素機身在低光環境使用高ISO的時候很容易翻車!**表現差於低畫素機身!
前面是固定感光元件大小,觀察不同畫素量的機身在不同ISO的畫質。如果現在我們固定畫素量,觀察不同感光元件大小的機身畫質的區別呢?
這裡我們分別選擇畫素都在2000萬畫素附近,盡量在技術代差不大的條件下,感光元件面積分別為1-inch、M43、APS-C、Full-Frame的四台相機:Panosonic GH-5、Sony RX100M6、Sony A6400、Sony A7M3(我手上這台嘿),在不同ISO下的畫質表現:
相機型號 | 感光元件型號 | 感光元件尺寸 | 單位像素面積 |
---|---|---|---|
Sony RX100VI | IMX383 | 1 inch | 2.4μm |
Panasonic DC-GH5 | IMX272 | M43 | 3.3μm |
Sony A6400 | IMX284 | APS-C | 3.91μm |
Sony A7M3 | IMX410 | Full Frame | 5.94μm |
我們可以發現,雖然每台相機都是2000萬畫素左右,但是在40DB條件下有效畫素量打從一開始ISO200就有明顯的區別,感光元件尺寸最小的RX100VI只有不到五百萬畫素,而感光元件最大的A7M3則是扎扎實實的2400萬畫素,利用感光元件尺寸優勢在畫質上暴力碾壓一票同輩。
比對高檔相機對一般人可能比較無感,可能大家比較想問:手機到底表現得如何呢?我的前後兩千萬實際上的有效像素(畫質)相比相機到底差多少呢?
很不幸的,藍拓的資料庫基本上沒有任何一台手機的資料可以比對,因此我只能選擇最接近的選項:大疆 Mavic Pro—感光元件1/2.3吋,1200萬像素的IMX377 CMOS進行比較,而這個規格也剛好是手機CMOS的頂規,與Pixel 2系列使用的CMOS相同。那結果如何呢?
相機型號 | 感光元件型號 | 感光元件尺寸 | 單位像素面積 |
---|---|---|---|
DJI Mavic Pro | IMX377 | 1/2.3 inch | 1.55 μm |
DJI Mavic 2 Pro | 不明 | 1 inch | 2.4μm |
Sony A6400 | IMX284 | APS-C | 3.91μm |
Sony A7RM3 | IMX251 | Full Frame | 4.5μm |
只能說,很慘烈
在表現最好的ISO100下這顆1200萬像素的IMX377實際上的有效像素其實只有354萬像素。
而到了ISO800則更慘:
40DB下有效像素則剩下41萬像素...
41萬!
手機端上表現最好的CMOS 1200萬像素裡面,在ISO800下只有41萬是有效像素!
更別說那些「前後兩千萬」的手機了, 那個單位像素大小只有IMX377的快一半,大概測出來都不勝唏噓...
嘮嘮叨叨了拉了相機CMOS講那麼久,到底結論是什麼呢?
其實就是:
A:如果你的手機的Camera 2 API支援到Level 3,那一定有很大的機率可以使用Google Camera
Google Camera底層演算法的完全依託於Camera 2 API,所以若你的手機如果不支援Camera 2 API,則一定不可能可以使用Google Camera
可不可使用Camera 2 API則可以使用這個APP進行檢測。
(如果沒有登入Google Play可使用APK Mirror連結安裝)
如果檢測結果為Level_3,那恭喜你,一般來說你的手機可以使用幾乎大部分的Google Camera移植版,趕快出門嘗試Google Camera帶來的強大夜拍效果吧。
如果檢測結果為Full,那代表廠商的驅動對Camera 2 API的支援並不不完整。
但還別放棄希望,如果下方欄位顯示你的手機有支援RAW Capture和Burst Capture的話,那你的手機有機會使用某一些特別為某款機型定制的移植版GCam。但前提是必須要有移植版GCAM開發者使用同樣型號或是廠牌的手機才有機會。
當然如果你的手機檢測結果不支援RAW Capture,那麼就不可能有任何移植版Google Camera能夠在拍攝之後完成後續的HDR+合成步驟了,也就是你可能能進到GCAM觀景窗畫面,但是按下拍攝鈕之後不會有任何反應或是拍攝起來完全沒有HDR+多幀合成降噪的效果。
A:這是早期那些移植GCAM開發者犯下的最大錯誤。
早期那些開發者為了讓沒有支援C2API的手機開啟他們的APP之後不會因為不支援C2API而發生閃退,特意讓他們移植的GCAM也相容了傳統的Legacy模式。
但這樣反而造成了大量的誤解,大量不明就裡的使用者的手機因為不支援Camera 2 API,安裝正常移植版的GCAM都一律發生閃退。
東翻西找一番......好不容易找到這些支援Legacy模式的移植版GCAM,安裝後沒有發生閃退,以為自己也終於能使用HDR+的魔法為自己的照片添色.....
然而結果是拍起來和任何一般的第三方相機都沒啥兩樣,甚至還會遜於有稍微針對個別機型調教的原廠相機。
而不幸的是這些不明究理的使用者,安裝了這些支援傳統Legacy模式的GCAM之後......想當然耳,在並沒有使用到Google Camera的演算法情況下,得到了大量比原廠相機還爛的照片。
於是他們就在各處發表了Google Camera不如原廠相機或是和原廠相機沒差多少的感想。
推 dant****11 : 我怎麼覺得s8沒有差很多,而且拍完一張照片app就掛 12/19 13:35
推 dant****11 : 了 12/19 13:35
→ kai***8 : https://imgur.com/Jy6rTKj 我拍是原廠比較好耶 04/29 01:46
→ kai***8 : 沒有夜間模式還是用原廠的就夠好了 04/29 01:47
這種情形特別以Sony、Samsung使用者最常見,因為截至目前為止Sony沒有任何一台手機支援GCAM(直至最近發表的Xperia 1依舊如此);而Samsung則是因為使用Exynos處理器讓其手機對GCAM支援度極度不佳。
而這兩家的旗艦機相機的CMOS其實都用的不差,然而因為不支援Camera 2 API反倒被其他CMOS體質較差、卻支援Camera 2 API的手機利用Google Camera移植版超越,就是相當可惜的了~
A:有幾樣最大的特徵可以看
在觀景窗畫面中將相機切到HDR+ enhance(強化),按下拍攝按鈕,如果畫面中有一個圓圈快速的轉過一圈,那麼表示你的手機有成功調用C2API進行拍攝。
拍攝完成後立刻點入右下角的相簿,會在右上角顯示照片正在合成,這代表APP有成功調用Google Camera演算法進行合成。
A:越新版的Google Camera的確是功能越多,例如最近加入的夜視、AI白平衡、AI追焦、慢動作高速(240fps)攝影;還有之前的更改曝光時間、更改採樣幀數、人像模式。但是新加入的功能不一定能夠完全相容你目前手上手機的系統。
由於GCAM移植版一大主要開發者:@BSG滿手小米家的手機,所以一般來說小米家的手機在舊版(Redmi Note7前發表的手機)只要使用Magisk或是Root開啟Camera2 API,則對移植的Google Camera相容度實測接近95%以上,甚至連老邁的紅米Note 3也能順利使用5.1版的移植版GCam提升拍攝性能。而在Redmi Note7之後發布的手機則全部都已經預設開啟C2API支援,直接安裝這些移植版Google Camera APK就可以使用Google演算法魔法了。
但對於其他手機品牌來說,那可能就要碰運氣了,不一定最新的移植版GCam能夠和你的手機完全相容,所以可能還是要自行多加嘗試,在網路上詢問他牌手機使用者的心得就跟期待對方能夠隔空抓藥一樣啊!
A:這通常要看移植版的開發者手上拿的是哪牌的手機,這裡有一個列表,可以參考各移植版開發者他們手上手機的對應品牌:
https://www.xda-developers.com/google-camera-port-hub/
由於上面這個列表更新速度較慢,因此建議參考開發者擁有的手機「品牌資訊」即可,如果要最新的版本請找這裡:
https://www.celsoazevedo.com/files/android/google-camera/
一樣,不同的機種的相容程度並不同,請自行測試囉!
A:簡單的說,只有功能性引進的時候不同版本的GCAM會有比較明顯的差異。主要影響有這幾類:
大版本之間功能性區別:
例如3.X版疊圖後算出來的照片就會不如5.1版的疊圖後的成品噪點少,5.1版的HDR+功能性又不如6.X版引入夜視後在AI白平衡和AI降噪上的強大,這些是不同大版本間主要差異。
不同機型的相機模式區別:
另外還有使用不同相機模式的採樣幀的合成算法、以及APP內部由RAW矩陣轉換成JPG的調整參數:
也會在陰影和亮部校正還有色調曲線方面產生一些差異。如果前者選錯機型模式可能會直接在合成過程中APP直接閃退,後者選錯機型模式則會在成像的結果發現陰影偏綠、偏紫,或是細節對比過高的現象。
當然有些開發者偷懶或是不想一直被使用者問這些機型模式是差在哪裡,後續版本就乾脆拿掉了機型模式的選單,這可能就沒法度囉~
AI白平衡:
這應該是除了夜視之外另外一個能夠讓照片具有顯著不同的地方,手機羸弱的CMOS在夜晚中常常難以獲取足夠多的光線資訊,讓手機系統能夠正確的校正白平衡。
於是Google乾脆另闢蹊徑,直接用深度學習學習每個場景的「哪些物體」應該是白色,並用以校正白平衡。
AI白平衡在昏暗的黃光環境之中特別有用,拍攝的成果再也不會出現照片全部變成黃色而無法、或是難以後製校正的狀況(因為後期很多GCAM留下來的RAW檔都是壓縮DNG,經過壓縮而喪失的色彩資訊讓在極端環境下的白平衡校正變得困難)
可自訂的曝光時間:
GCAM使用多幀短曝光試圖以DSP算力暴力解決雜訊的問題,但是使用短曝光的嚴重缺陷在於:
如果快門短到讓收到的光線資訊低於CMOS可產生「有意義的資訊」閾值,那麼這些多張「垃圾雜訊」再怎麼疊圖平均也不會疊出任何圖像,或是造成明顯的「紫光」(這個我在早期使用Canon入門DSLR機身上拍星空時很有經驗.....)
而某些版本的移植版GCAM能夠強制將曝光時間訂在1秒、2秒、4秒甚至更長的秒數。
如果手機的韌體端API有支援較長秒數的快門,配上腳架之後,就可以在超低光源環境(如星空)下讓手機的CMOS接受到的光線資訊量超越「能產生有意義的資訊」閾值,不再疊圖疊出大量無意義的熱雜訊紅紫斑。讓手機拍攝清晰、無光軌的銀河這個過往不太可能達成的任務成為可能!
A:當然會不一樣,雖然演算法能夠拉抬相機表現到很高一個臺階,不過各廠各型號的手機所使用的感光元件(CMOS)和鏡頭並不一樣,造成以下幾點的不同:
畫質表現不同
具體來說,一個CMOS能夠提供的畫質好壞決定於他的單位像素大小,而不是所謂的畫素。
單位像素越大,在光線不足的時候有效畫素(畫質)越高,像素越高的手機相機,夜拍越爛,詳情可以看這篇:
手機的像素越高越好嗎?前後兩千萬到底是不是一個噱頭?
後製上的色彩豐富度不同
色深表現基本上只有做RAW檔調整的時候會感受的到,一般人僅使用色域極窄的JPG直出不會感受到任何差異。而單位像素大小除了會關係到ISO表現之外,同樣的也會影響到當使用RAW檔做極限拉暗部和亮部時的色深表現。
個人使用不同機型、相同版本的GCAM Mod的感受,單位像素大的機型色深比較寬,顏色細節(非像素細節)較豐富,做後製校正的時候比較輕鬆;而單位像素小的機型色深較淺,在亮部與暗部的區域顏色細節丟失嚴重,樹葉的顏色常化為一片螢光綠,夕陽變成大片單色的橘光。這是除了雜訊之外,不同機型在極限環境下體現到的色深上的區別。
鏡頭解析力、變形、紫邊表現不同
一般來說這一項也是必須使用RAW檔後製重新提取更多的細節才能感受到的區別。
手機的效能不比電腦,無法做與電腦運算規模相同的影像運算處理,只能透過取巧的方式例如:
銳利化(例如三星和華為)和抹成油畫(例如Sony和小米)以降低手機的影像運算量來得到常人可以接受的運算時間,然而這樣的做法其實就會喪失許多影像細節。所以如果在手機端拍攝RAW檔,再後續使用電腦端軟體解RAW就可以得到更多豐富多解析度細節和色彩細節,當然影像缺陷也會同時被一起凸顯。
紫邊是一個在解完RAW之後最常被發現到的缺陷,當手機鏡頭模組用的太爛的時候,即使在拍攝遠方點光源而不是亮暗差異明顯的區域,也會發現點光源周圍多出了一圈色環,這就是紫邊。
而紫邊問題雖然可以透過Lightroom手動調整盡量的消除,但想要希望Google後續的自動化調整就是不可能了,因為每顆鏡頭的光學特性不同,Google是不可能對這些「第三方」鏡頭有任何調整的。
除紫邊之外,鏡頭解析力也是一個必須要靠解RAW檔才能體會區別的項目,因為在JPG直出的情況下大家的解析力都一樣爛,感受不到區別。而且比較有趣的是CMOS像素較高的機種(Zenfone Max Pro M1)配上爛鏡頭的話,解RAW之後的實際解析力會比CMOS像素較低的機種(紅米Note 5)還要低。
這側面體現像素量在手機這種超小的CMOS上其實不是畫質的決定因素,使用到的演算法、CMOS單位像素面積和鏡頭模組的優劣才是真正會對手機畫質產生影響因素。(只是這十幾年來,宣傳畫素=畫質一直是一個很有效的行銷手段)。
移植版Google Camera Library對手機CMOS支援度不同
其實這是最常遇到的問題,不過我最後才想到所以寫在下面。如果移植版GCAM Library對你手機的CMOS支援度不佳,造成紅綠藍原色偏移,最常看到的就是拍攝出來的畫面陰影會偏綠、偏紅、偏藍,或是前鏡頭乾脆無法開啟。這點可能就要去尋找有沒有其他的移植版本有針對你的手機CMOS修正Library,或是你只能透過拍RAW檔回去自行修正三原色偏移了。
以上是大家使用第三方Google Camera時最常遇到的幾個問題,在這裡統一對一些常見的以訛傳訛的錯誤觀念做澄清和解答,如果之後遇到還有其他問題還會補充在這裡供大家參考,希望大家能夠在使用這個強大的移植版Google 相機少走一點歪路。
]]>Google Camera是目前演算法最先進的Android相機App,遠遠超過其他手機廠使用的演算法
能夠讓任何使用了Google Camera (Port)的手機在夜拍上擁有極其出色的表現
支撐著Google Camera強大的夜拍效果的則是其被命名為「HDR+」的功能
這功能其實有點名稱誤用,在Google Camera早期3.X版本(Nexus 5時期)此功能確實是 只有HDR的效果
透過合成多張短曝光、曝光度不足的照片,除了能為照片帶來高動態範圍的好處、同時也能透過多幀照片中的色彩資訊「平均」,將畫面中的雜訊濾除。
而後隨著手機感光元件尺寸越來越大,手機廠是能夠購買的演算法(例如說ArcSoft)對動態範圍參數的改進,高動態範圍的照片反而越來越不是HDR+主要的特點,Google在多幀降噪算法上的各種改進,逐漸成為HDR+此功能的演算法主角。
Google的相機算法工程師在多幀拍攝的改良上玩的出神入化,後期又在使用單鏡頭達成兩倍放大的效果,這是怎麼辦到的呢?
具體原理是這樣的,這是我們一般相機感光元件所使用的RGB拜耳陣列:
你可以觀察到每一個感光像素並不是同時偵測紅綠藍三種顏色,相反的拜耳陣列則是將感光像素分成紅綠藍三組,在每一組感光像素前面加上了濾光片,讓他們只能感知特定顏色的光。聰明的你可能發現兩個問題:
第一個問題的答案是:沒錯,我們一般用的拜耳陣列CMOS像素是真的被稀釋成1/3的,所以實際解像力會不如像素量相同的Foveon結構感光元件。
第二個問題的答案則是:中間缺失的像素資訊,是用猜的!
目前對於拜耳陣列的CMOS結構已經有成熟的猜色算法,基本上顏色不會失真太多,但是缺點就是當鏡頭光學校正能力不足時,會造成底片時代沒有的「摩爾紋」、「偽色」、和「紫邊」。
講了半天CMOS,那這個SuperZoom是怎麼做到的呢?
還記得我們一般使用的拜耳陣列CMOS像素量是灌水的嗎?一般相機常說的2400萬像素實際並不是2400萬像素,而是僅有800萬像素。而這個時候如果我們讓CMOS的連拍三幢讓像素位移,讓每個像素都分別對紅、綠、藍三個顏色進行感光,不就擁有完整的2400萬像素了嗎?
而現在透過像素位移取得完整的2400萬像素的照片,其實就等同一般狀態下的4800萬畫素,也就是我們可以直接得到理論上清晰度相較傳統方法高兩倍的照片,足夠我們將他放大兩倍使用了。
然而,要能夠做到像素位移的話感光元件也必須進行定制,所以基本上只有Pixel 3所使用的感光元件能夠達成此功能,其他使用移植版GCam的手機則無法使用。
Night Sight是目前最新版的Google Camera (v6)所擁有的功能,此版Google Camera需要Android 9.0 Pie版本以上的手機才能使用。
Night Sight功能非常強大,一般人可能無法理解這個演算法到底有多強。為了讓一般人能夠理解它到底有多強,我這裡先放一個錄影動畫讓大家看看Night Sight實際拍攝的情況。
成品:
好的,所以基本上可以說有了Night Sight,其他廠的相機基本上可以都不用打了,縱使強如華為的超級夜景也得乖乖被按在地上。
那Night Sight到底做了什麼事呢?
其實先前版本(v5)的Google Camera也有用到RAW堆幀的功能,不過個人觀察這個版本的Google Camera應該是使用第一張照片的RAW檔經過恢復亮部和暗部細節後做為主幀,其餘其他幀在抽去模糊的幀之後,可能是使用JPG進行後續多幀降噪的程序。(其實這我不太確定,請知情者指證)
而新版的Google Camera(v6)釋出之前Google AI Blog發了一篇他們現在全程使用RAW檔進行Burst取樣,可以取得更寬的動態範圍和更深的色彩深度,有助於在極端環境之下透過深度學習將照片還原回更正確的白平衡和動態範圍。
但該篇文章中也提到由於處理連拍RAW檔的數據壓力非常大,單純使用一般的手機CPU (SoC)無法勝任此工作,所以為了減少拍攝的遲滯感,Google Camera使用了Qualcomm Hexagon DSP 和Pixel 3中的Visual Core專用晶片加速數據的處理。
所以基本上可以說,如果你想使用移植版Google Camera,那麼最好必須有一支具有Hexagon DSP,使用高通處理器的手機。手機使用的高通處理器未必要使用到最高階的8XX系列處理器,個人使用經驗上在優化良好的系統上,即使使用低階的S430 SoC也可以以單張照片取樣3幀的條件下以正常速度拍攝。
然而,如果使用非高通系CPU,如:聯發科MTK、三星 Exynos的手機(例如三星旗艦),往往無法正常的使用移植版Google Camera,往往有bug或是HDR+功能性缺失。當然,即使是使用高通CPU手機裝上移植版Google Camera,速度也不能比使用專用Visual Core晶片的Pixel 3鬼神加速還要快的。
GCam NS除了同時結合了以上寬動態範圍、使用RAW檔多幀降噪的技術做為基礎之外,個人猜測還額外加入了
以上兩個功能一開始原為搭載於Pixel 3的Google Camera 6.0時獨有,並使用Visual Core加速運算。
而隨著沒有Visual Core的Pixel 3A上市,以上功能不再局限Visual Core,Google也將這Night Sight降噪所需的運算轉移至高通平台的Hexagon DSP上執行。而這兩個功能也在第三方的Google Camera 6.2.030版之後成功完成移植,間接使所有使用高通平台的手機受惠,讓感光元件性能羸弱的手機也能在黑夜發揮功用。
這應該是最近版本才新增的功能,個人覺得這個追焦「咬住」對焦物的能力甚至更勝過手上Sony A7M3在3.00版韌體更新過後的自動追焦(雖然手機這麼小的片幅景深深到爆,也沒什麼好「對焦」的)。
至於效果呢?我改天放一個示意圖展示一下好了。
Google成功的將過去一些影像理論以自身的演算法功底優化,在極大的降低時間與計算複雜度的情況下,成功在手機這種效能貧弱的終端設備上以程式碼實作,達成一般人以過去仰賴硬體效能的線性思維上難以想像的成就————讓手機指甲大的CMOS也能在一片漆黑中拍出稍微能看的夜景。
Google Camera的出現讓我們理解不只是硬體,軟體後面的演算法也至關重要。在優秀的演算法下,我們甚至可以用貧弱的CMOS硬體(1/2.6吋)越級打怪,「堆出」超越更高一級規格CMOS(1吋)所能拍出的照片。
當然,身為手上拿著正規微單的使用者來說,當然也期待這些能夠提升畫質的功能功能能夠被相機廠採用,進一步提升手上相機的畫質。
至於Google相機未來還會再引入什麼功能呢?我想可能是自動以RAW檔資訊完成AI調色修圖吧?
畢竟現在Google相機白天直出的照片其實都挺爛的,色彩曲線整個不太對,還有很大的改進空間。
另外還有可能改善的點大概是開放用第二顆長鏡頭或是景深鏡頭,搭配AI更有效率的辨識照片中物體深度,從而產生更自然的景深,這點從Pixel 4流出圖中已經可以看出端倪:
至於下一版的Google Camera到底會不會實現這兩個功能呢?就讓我們期待一下吧~
]]>