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