NVIDIA Metropolis通過簡化攝像頭校準 增強AI驅(qū)動的多攝像頭追蹤
本文是構(gòu)建多攝像頭追蹤視覺AI應(yīng)用系列文章的第三篇。在第一和第二篇文章中,我們介紹了提高系統(tǒng)準確性的整個端到端工作流和微調(diào)過程。
NVIDIA Metropolis 是一個利用AI實現(xiàn)各個行業(yè)視覺數(shù)據(jù)分析的應(yīng)用框架和開發(fā)者工具套件。它所提供的多攝像頭追蹤參考 AI 工作流由云原生 NVIDIA Metropolis 微服務(wù)驅(qū)動,可實現(xiàn)跨多個攝像頭的高級物體追蹤和定位功能。本文將討論攝像頭校準、如何使用 Metropolis 攝像頭校準套件來校準真實攝像頭,以及如何使用 NVIDIA Omniverse 擴展校準合成攝像頭。
攝像頭校準
攝像頭校準是確定特定攝像頭參數(shù)或估計攝像頭特性的過程。攝像頭校準可將攝像頭在 2D 世界中看到的景象轉(zhuǎn)換成現(xiàn)實世界坐標系,是許多基于視覺的應(yīng)用的基礎(chǔ)。例如在創(chuàng)建多攝像頭追蹤應(yīng)用時,需要先進行攝像頭校準,才能完成主要涉及坐標轉(zhuǎn)換的特定操作。
攝像頭參數(shù)由外在參數(shù)和內(nèi)在參數(shù)兩部分組成。外在參數(shù)定義了攝像頭相對于指定世界坐標系的平移和旋轉(zhuǎn),從而實現(xiàn)攝像頭坐標和世界坐標之間的映射。內(nèi)在參數(shù)則實現(xiàn)了攝像頭坐標與像素坐標之間的映射。
多攝像頭追蹤中的攝像頭校準
NVIDIA Metropolis 多攝像頭 AI 參考工作流主要使用攝像頭作為傳感器,并對檢測到的移動物體進行大量時空方面的處理。由于物體最初在攝像頭視圖內(nèi)的像素域中檢測到,因此為了在下游進行大量時空分析,一個必不可少的步驟就是將像素域與所需坐標系相關(guān)聯(lián)。
在 Metropolis AI 工作流中,攝像頭定位對下游任務(wù)的整體準確性有重大影響。詳細信息可參見攝像頭定位指南:
https://docs.nvidia.com/mms/text/MDX_Camera_Positioning_Guide.html
通過正確的攝像頭校準,就能在所需坐標系中定位檢測到的物體。這在許多核心能力中都起著至關(guān)重要的作用,包括但不限于:
將攝像頭用作傳感器的位置服務(wù):檢測攝像頭內(nèi)的物體,并通過校準后的攝像頭參數(shù),計算出其在具有現(xiàn)實意義的坐標系上的位置。例如,零售店可以在平面圖上定位攝像頭看到的店內(nèi)顧客。
多個攝像頭之間的活動關(guān)聯(lián):當(dāng)根據(jù)同一坐標系校準多個攝像頭后,就可以關(guān)聯(lián)各個攝像頭并進行推理,從而提供綜合洞察。例如,共享坐標系中的移動歷史記錄可以幫助確定攝像頭_1 檢測到的人_A 和攝像頭_2 檢測到的人_B 是否是同一個人;可以通過覆蓋不同區(qū)域的多個攝像頭,無縫追蹤一個人在倉庫中的行走軌跡等。
基于距離的度量計算:鑒于攝像頭的特性,直接在像素域進行距離計算并不可靠。例如 X 個像素覆蓋的實際距離(以米為單位)會因幀內(nèi)位置的不同而產(chǎn)生很大差異。根據(jù)直角坐標系來校準攝像頭可以使距離計算更加方便。
圖 1 是一個實時位置系統(tǒng)示例。在一個 100 個攝像頭覆蓋的 10 萬平方英尺倉庫空間內(nèi),每個人的位置都可以在倉庫平面圖上進行追蹤。這樣的系統(tǒng)建立在上述通過正確攝像頭校準來實現(xiàn)的核心能力基礎(chǔ)上。
圖 1. 通過多個攝像頭追蹤多個物體的實時位置系統(tǒng)
當(dāng)前的 Metropolis 參考AI工作流假定攝像頭沒有失真或失真很小,這樣就能確保像素坐標系與指定的世界坐標系之間的映射是線性的。這需要從兩個坐標系中選擇參考點進行計算。
特別是需要一系列地標,其中每個地標的像素值(x, y)和世界坐標(X, Y, Z)都是已知的。在我們的許多用例中,指定的世界坐標系是一個 2D 笛卡爾平面,或者更具體地說,是一個平面圖的圖像。以平面圖的一角為原點,可以將該笛卡爾平面轉(zhuǎn)換為平面圖圖像的像素值。
在這個意義上,世界坐標(X, Y, Z)變成了(X, Y),2D 轉(zhuǎn) 3D 的映射問題實際上變成了 2D 轉(zhuǎn) 3D 的透視變換問題。而作為該校準過程的輸出結(jié)果,根據(jù)地標計算出的 3 x 3 同構(gòu)矩陣可用于以后的位置變換。
圖 2 提供了兩個演示該過程的示例,考慮到任務(wù)是找到左側(cè)攝像頭像素與右側(cè)平面圖之間的映射關(guān)系,唯一需要的是一系列可同時位于左右兩側(cè)的地標 {1, 2, 3, 4, ...}。選定一系列地標后,攝像頭位置(x, y)和世界位置(X, Y)會以相應(yīng)的像素坐標形式給出,然后就可以通過現(xiàn)有的庫,輕松計算出同構(gòu)矩陣(例如 OpenCV)。
圖 2. 來自攝像頭視圖和平面圖的參考點
現(xiàn)在,解決像素轉(zhuǎn)世界的映射問題,可以歸結(jié)為選擇參考點并獲取其在攝像頭畫面和平面圖中的像素值。這項工作看似簡單,實則不易。設(shè)計得當(dāng)?shù)墓ぞ呖梢源蟠鬁p少工作量,簡化任務(wù)。
使用 Metropolis攝像頭校準套件
簡化現(xiàn)實世界的校準工作
您可以使用 Metropolis 攝像頭校準套件來執(zhí)行攝像頭校準任務(wù),并以適當(dāng)?shù)母袷捷敵鑫募员闩c其他 Metropolis 服務(wù)無縫對接。
視頻 1. 通過簡化攝像頭校準,增強AI驅(qū)動的多攝像頭追蹤
Metropolis 攝像頭校準套件提供以下功能:
項目組織、導(dǎo)入和導(dǎo)出
通過 Metropolis 媒體服務(wù)輕松導(dǎo)入攝像頭
用于選定參考點的 GUI
用于自檢的即時重投影錯誤
支持更多 Metropolis 功能的附加組件,包括感興趣區(qū)域(ROI)和絆線
使用 API 插入文件
有三種校準模式可供使用:
笛卡爾校準:一種在沒有參考建筑地圖的情況下創(chuàng)建外部校準的方法。用戶可以創(chuàng)建自己的全局坐標系。
多攝像頭追蹤:該模式是使用校準套件的最常見方式,也是本文的重點。采用該模式的用戶只需提供一個建筑地圖,每個攝像頭就能根據(jù)該地圖進行校準。
圖像:在圖像上繪制絆線和 ROI 并獲取像素坐標。對于某些下游任務(wù),需要在攝像頭視圖中添加某些人為假象,以計算特定指標,例如基于絆線穿越次數(shù)的物體計數(shù)等。
最簡單的方法是使用示例應(yīng)用中提供的資產(chǎn)來導(dǎo)入一個項目。通過 calibration.json、imageMetadata.json 和 Images.zip,用戶可以導(dǎo)入一個已經(jīng)設(shè)置好的項目。
如要從頭開始創(chuàng)建一個多攝像頭追蹤項目,需要一個平面圖以及一項媒體服務(wù),或者多張來自攝像頭的圖像,還需要來自攝像頭的信息,來幫助 Metropolis UI 設(shè)置攝像頭。
在導(dǎo)入項目或創(chuàng)建新項目后,“項目”頁面將引導(dǎo)您完成創(chuàng)建必要人工假象的步驟。首先,上傳平面圖。平面圖可以是代表攝像頭所見空間的建筑地圖。
接下來,如果您使用的是媒體服務(wù),可以使用與部署案例最相關(guān)的 URL 導(dǎo)入傳感器。這是將傳感器導(dǎo)入套件的最簡單方法,但并非唯一的方法。如果不使用媒體服務(wù),則需要設(shè)置傳感器。
首先為每個傳感器創(chuàng)建一個新傳感器,并添加攝像頭詳細信息。這些詳細信息對于將攝像頭導(dǎo)入 Metropolis 工作流非常必要。關(guān)閉該模態(tài)后,您會看到網(wǎng)格中顯示了一個傳感器,您可以單擊攝像頭圖標上傳圖像。如果您在上一步中發(fā)現(xiàn)了傳感器,則表示圖像應(yīng)該已經(jīng)從媒體服務(wù)中提取。對每個傳感器重復(fù)此步驟。
校準時,在攝像頭圖像上為每個傳感器創(chuàng)建一個多邊形,并在平面圖上創(chuàng)建相應(yīng)的多邊形。然后,在平面圖空間中選擇在攝像頭圖像中可見的點或地標。通過這些相應(yīng)的對,可以創(chuàng)建一個轉(zhuǎn)換矩陣,將攝像頭空間中的軌跡映射到平面圖上。
根據(jù)空間大小,最好選擇 8 到 15 個點。開始時至少需要 8 個點。圖 2 顯示了平面圖上已確認的在攝像頭圖像中可見的地標。如果在某一區(qū)域出現(xiàn)校準偏差,可通過添加更多的點幫助改善軌跡。
創(chuàng)建兩個多邊形后,添加一個 ROI 多邊形以及絆線和方向線。校準階段的示例見圖 3。
圖 3. 經(jīng)過 Metropolis 攝像頭校準套件 的校準階段后完全校準的攝像頭示例
校準設(shè)置完成后,單擊“校準”查看重投影誤差并單擊“接受”(如果可以接受)。然后單擊“驗證”測試校準,繪制軌跡或多邊形,查看攝像頭域中的點如何落在平面圖上。如果平面圖上的投影點可以接受,就能夠驗證校準。如果不行,則在校準階段調(diào)整多邊形,直到校準合格為止。
接下來,設(shè)置平面圖并將攝像頭放置在平面圖上。這是在 Metropolis 工作流的用戶界面中顯示攝像頭所必不可少的一個步驟。有關(guān)如何放置傳感器的示例,請參見圖 4。
圖 4. 放置在 Metropolis攝像頭校準套件中 的平面圖上的傳感器
最后,導(dǎo)出可用于 Metropolis 工作流的人為假象文件 calibration.json、imageMetadata.json 和 images.zip。
借助 Metropolis 攝像頭校準套件,您可以輕松簡化真實攝像頭上的手動攝像頭校準流程。它所提供的格式化文件可供下游 Metropolis 服務(wù)無縫使用。
NVIDIA Omniverse 中的
合成攝像頭自動校準
Metropolis 參考應(yīng)用也可以使用合成數(shù)據(jù)。這些參考應(yīng)用提供在 NVIDIA Omniverse 平臺上創(chuàng)建的合成視頻數(shù)據(jù)。與現(xiàn)實世界中的攝像頭一樣,合成攝像頭也必須經(jīng)過校準后,才能實現(xiàn)像素坐標與平面圖之間的映射。
視頻 2. 通過簡化攝像頭校準,增強 AI 驅(qū)動的多攝像頭追蹤
由于能夠完全控制 Omniverse 中的合成攝像頭,因此不需要手動選擇參考點。只需點擊一下按鈕,Omniverse 中的 omni.replicator.agent.camera_calibration 自動校準擴展就能輸出所需的虛擬攝像頭映射。該自動校準工具包含在 omni.replicator.agent 擴展中。
如要了解更多信息,請參見 Omniverse 攝像頭校準文檔:https://docs.omniverse.nvidia.com/isaacsim/latest/replicator_tutorials/ext_replicator-agent/camera_calibration.html
如要使用 omni.replicator.agent.camera_calibration,首先創(chuàng)建一個俯視攝像頭以及待校準的攝像頭。俯視攝像頭的精確攝像頭視圖將被用作平面圖。擴展將自動從攝像頭視圖中為每個待校準的攝像頭選擇平面圖上的點,并計算它們在俯視攝像頭中的對應(yīng)點。
使用 omni.replicator.agent.camera_calibration 擴展的詳細情況如下:
通過從攝像頭視圖中隨機投射光線,來自動選擇參考點,記錄光線與平面圖相交的位置。
攝像頭的外在矩陣由攝像頭原型的變換矩陣導(dǎo)出,內(nèi)在矩陣則根據(jù)攝像頭原型的屬性計算得出。
將參考點的 3D 位置轉(zhuǎn)換為攝像頭圖像平面上的 2D 位置,并使用這些數(shù)據(jù)計算出攝像頭的投影矩陣。
計算參考點 3D 位置與俯視攝像頭圖像平面之間的平移參數(shù)和縮放因子,這能夠提供攝像頭視圖與平面圖之間的對應(yīng)關(guān)系。
通過向平面圖均勻投射光線來確定攝像頭的視野(FOV),收集命中點的數(shù)據(jù),然后根據(jù)這些命中點的坐標生成視場多邊形。
最后,將攝像頭的內(nèi)在矩陣和外在矩陣以及投影矩陣和攝像頭視圖與平面圖之間的對應(yīng)關(guān)系導(dǎo)出到 JSON 文件,并在場景的俯視圖像上渲染 FOV 多邊形。
在 Omniverse 中創(chuàng)建合成攝像頭相對簡單,是一個生成合成視頻數(shù)據(jù)的好方法,所生成的數(shù)據(jù)可用于模型訓(xùn)練和仿真等各種下游任務(wù)。omni.replicator.agent.camera_calibration 為用戶提供了一個方便創(chuàng)建格式化攝像頭校準文件的工具,這樣,Omniverse 中的合成攝像頭就能輕松用于各種 Metropolis 參考工作流或應(yīng)用。
結(jié)論
通過攝像頭校準,NVIDIA Metropolis 參考應(yīng)用可以在提供的平面圖上定位檢測到的物體,并建立多個攝像頭之間的物體位置空間關(guān)聯(lián)。這是在智能視頻分析領(lǐng)域,構(gòu)建大規(guī)模實時位置服務(wù)和其他有意義的服務(wù),所必不可少的一個步驟。