Camera Futura 使用 ML.NET 來自動化相片的揀選與整理
Camera Futura 是一家總部位於瑞士日內瓦的公司。該公司的目標是為攝影愛好者和專業攝影師開發突破性的軟體並進行商業化。
目前生產中的主要產品是 Futura Photo,這是一種傳統型應用程式,可將相片揀選作業 (從拍攝的照片中選取品質最佳的影像) 自動化,而且可以在開始後續處理之前整理相片。Futura Photo 可充當「智慧型個人化小幫手」。
商務問題
攝影師花費很多時間拍攝影像,而許多人喜歡透過後續處理來美化相片。不過,拍攝後和後續處理前需要進行幾個步驟。這些步驟包括揀選相片並整理相片以供後續處理,就沒有像攝影流程的其他部分那樣刺激有趣,而且可能非常耗時。
刪除影像只是表示捨棄低品質影像。「低品質」表示由於技術而非藝術因素,相片未如預期方式拍攝。
整理影像牽涉到將影像移動到正確的資料夾。這可能表示一些不同的事情,例如選擇 RAW 或 JPG 影像進行後續處理、將影像拼接在一起以建立全景,以及堆疊巨集或太空攝影的影像。當談論縮時攝影時,整理表示尋找正確的相片(每次縮時攝影可能會有數百張影像),並將其上傳到可建立縮時攝影影片的軟體。
還有一項重要的工作結合了揀選與整理: 收集一系列類似的影像,以及從群組選擇最佳影像。攝影師通常會拍攝許多相同主題的影像 (從動作運動到活動,到只拍攝其子女遊戲的影像)。選擇最好的幾張照片雖然非常重要,但當攝影師每次拍攝都必須經過幾十組這樣的照片時,這也會讓人非常沮喪。
Futura Photo 主要著重於協助每年拍攝約 10,000 到 25,000 張影像的攝影愛好者,提供獨特的體驗,協助解決影像揀選與整理的挫折感。雖然相片揀選及整理的自動化不是新概念,但當涉及進階應用時,問題會變得特別複雜,例如嘗試尋找完全模糊的影像,或將非常類似的影像分組。
此自動化不直接有幾個原因; 攝影師在開始相片後續處理之前必須回答許多問題,例如:
- 銳利影像實際上表示什麼意思?
- 攝影師拍攝許多類似影像的原因 (好或壞) 為何?
- 當攝影師拍攝 RAW + JPG 時,何時需要 RAW 檔案而不是 JPG 檔案?
- 為何要捨棄閉眼的人類臉部影像,或是應該做為有意為之的事情進行後續處理?
- 當攝影師拍攝類似的影像時,他們會將成員堆疊成焦點堆疊 (巨集)、HDR (橫向)、多重曝光用途 (創意),或只是一堆影像 (運動)?
這類問題的清單相當冗長,但回答這些問題是 Camera Futura 想要與機器學習一起做的事。許多附加價值來自針對攝影師需求自訂的「智慧助理」,可以取代攝影師手動完成工作流程的一些步驟,但如果沒有機器學習的協助,這是不可能的。因此,Futura Photo 決定使用影像分類來協助攝影師進行影像揀選和整理流程, 包括從群組中選取最佳影像。
為什麼要使用 ML.NET?
Camera Futura 選擇 ML.NET 以在其 Futura Photo 軟體中提供機器學習功能的原因有幾個。
首先,Camera Futura 會使用 .NET 建置其應用程式,使用 ML.NET 即讓公司能夠留在 .NET 生態系統中,而不需要使用其他語言編碼或和非 .NET Framework 整合。就學習新語言以及將非 .NET 技術整合至 .NET 應用程式所產生的複雜性與潛在效能衝擊而言,這點已消除了額外負荷。
此外,Visual Studio 中的 ML.NET Model Builder 讓您可以極為輕鬆地執行影像分類案例,包括原型化初始模型以及訓練目前正在生產環境中使用的最終模型。ML.NET 本身也會提供公司在模型可用性、自訂及整體效能方面所需的一切。
ML.NET 的影響
雖然 ML.NET 讓 Camera Futura 能夠快速建置、定型及部署生產層級機器學習模型,但該架構也為公司開啟了新的商機。對於一家新創公司,能夠在 .NET 中完成所有工作都是很大的優勢,而且可讓公司開發一些如果公司需要使用數種不同的技術才能開發的功能。對於 Camera Futura,ML.NET 不但是啟用者,也是生產力工具。
若沒有 ML.NET,第一個生產環境就緒模型可能還需要好幾個月的時間才能交付。」
解決方案架構
Futura Photo 目前是 .NET Framework 4.6.1 (計畫於 2021 年底移轉至 .NET Core) 上的 WPF 傳統型應用程式。
運作方式
使用 Futura Photo 非常簡單: 攝影師會設定規則、上傳影像、檢查結果,並套用它們,將相片移至正確的資料夾。
使用者會瀏覽三個主要視窗。第一個視窗會管理及設定要套用的規則、顯示影像的主要圖庫、顯示分析期間的進度,以及顯示每張相片的結果,如下列圖表所示:
分析完成時,可以開啟第二個視窗,依規則檢查結果:
您可以視需要開啟第三個視窗,讓全螢幕相片檢視器深入了解每張相片的結果:
資料與定型
目前,Futura Photo 使用來自 Camera Futura 的公司影像和資料進行訓練。資料集的大小因模型而異,但公司通常會使用每個模型 10,000-50,000 個影像,在訓練和評估其模型之後,將模型與 WPF 應用程式一起部署。
目前在生產環境中有四個模型,其中三個是在 Visual Studio 中使用 ML.NET Model Builder 的影像分類案例建置。最後一個模型,也就是叢集模型,是使用 ML.NET API 建置。
影像分類案例可用來判斷影像是否有特定特徵。此特徵可以是無法透過數學模型正式描述的一切。
例如,其中一個模型可以查看白平衡功能,協助判斷影像的白平衡是否正確,以及原因 (太綠、太黃等)。
在下列範例中,相機已明確定義白平衡:
Futura Photo 會使用 ML.NET 模型,藉由使用與下列程式碼片段類似的程式碼,來計算白平衡 (如上圖所示):
// Method using ML to define whether the camera's AWB
// (Automatic White Balance) estimation is accurate
private Photo CalculationAWB(Photo photo)
{
Photo _photo = photo;
try
{
// Create single instance of sample data from first line of
// dataset for model input
ModelInput inputData = new ModelInput()
{
// FileNameImageLight: path for ad-hoc thumbnail of the
// Photo source object (JPG or RAW file)
ImageSource = _photo.FileNameImageLight
};
// WB_ML_PC: % of likelihood of AWB being either 'OK'
// (well calculated), cold, tint green, tint purple, or warm
// AWB's Accuracy Result ("OK"): predictionResult.Score[1]
// Bias: predictionResult.Score[0] for Cold, [2] for Tint Green,
// [3] for Tint Purple, and [4] for warm
for (int i = 0; i < 5; i++){
_photo.WB_ML_PC[i] = predictionResult.Score[i]) * 100;
}
catch (Exception ex)
{
log.Error(ex, "Throughout ML_IsAWB_OK");
}
return _photo;
}
}
另一個模型可以查看影像的清晰度。在理論中,有許多數學方法可以定義影像是否清晰,但大多數 (如果不是所有方法) 都無法偵測動態模糊和專注模糊的混合。更重要的是,這些方法需要依賴臨界值,當您比較相似的影像但不夠精確,以決定單個影像是否足夠清晰時,這很好。這些方法無法偵測指定的清晰程度,因為許多角落案例會影響要與臨界值比較的值。使用以 ML.NET 訓練的影像分類模型,若影像夠清晰,Futura Photo 可使用極低的誤判為真或誤判為否率來決定。
最後一個模型是一個使用未監督機器學習的叢集模型,將影像分組到 '通過' 群組 (具有要求特徵的影像) 或 '失敗' 群組 (表示影像沒有要求的特徵)。
Camera Futura 的前景
Camera Futura 的願景是擁有雲端型解決方案,包括透過行動裝置應用程式載入影像、在 Azure 上執行軟體,以及在傳統型應用程式中完成相片揀選。這表示在攝影師拍照後回去使用桌上型電腦時,所有相片已準備好可立即進行後續處理了。
公司目前正在開發數個其他模型,包括影像分類、物件偵測及迴歸案例。
雖然 Futura Photo 的使用者目前只會使用模型進行相片揀選,或在後續處理之後整理其相片拍攝,但 Camera Futura 也想實驗讓客戶使用自己的資料在本機定型模型,以提供更好的模型。
準備開始了嗎?
我們的逐步教學課程可協助您讓 ML.NET 在電腦上執行。