執行圖
Graph 是計畫。Run 是即時執行處理程序。
在您建立圖之後,使用此頁面。如果您仍然需要決定哪些節點或片段屬於該圖,請從 圖 開始。如果該圖已經看起來正確,則在此頁面上,您可以讓它執行、處理、測量和處理實際輸入。
選擇一次性或可重複使用的執行
使用最適合任務的最小執行階段路徑:
| 需求 | 使用 | 原因 |
|---|---|---|
| 執行一個輸入並獲取一個輸出 | Graph.run(...) | 最短的一次性路徑。 |
| 隨著時間推入多個輸入 | Graph.build(...) 和 Run | 重用執行階段並公開推入/拉出控制。 |
| 使用具名輸入或輸出 | Graph.build(...) 和具名的 run.push(...) / run.pull(...) | 使多輸入和多輸出應用程式更加明確。 |
| 讓來源節點驅動圖 | Graph.build() 或 Graph.run(),不帶應用程式輸入 | 當圖擁有相機、檔案、RTSP 或其他來源節點時使用。 |
| 測量、匯出、處理或故意停 止 | Run | 讓您擁有生命週期和診斷控制。 |
沒有魔法。建立圖,執行它,檢查結果。
選擇輸入進入圖的方式
在您調整佇列之前,決定誰擁有輸入。
| 圖樣式 | 輸入進入方式 | 您如何執行它 |
|---|---|---|
| 應用程式推入圖 | 您的應用程式呼叫 Graph.run(input, ...)、run.run(input, ...)、run.push(...) 或 run.try_push(...) | 帶輸入建立或執行。在推入多輸入圖之前,檢查端點名稱。 |
| 來源擁有圖 | 圖包含一個來源節點或片段,例如檔案、相機、RTSP 或串流輸入 | 不帶應用程式輸入建立或執行:graph.build() 或 graph.run()。拉出輸出,使用輸出節點,或根據圖使用回呼。 |
如果圖擁有來源,請不要推入它。相反,請檢查它發出的內容。
執行來源擁有圖
如果圖包含自己的來源節點,則不帶應用程式輸入建立或執行它。不要推入已經擁有來源的圖。當圖公開輸出時,拉出具名輸出;當圖以接收節點結束時,讓接收節點處理輸出。
對於圖同時擁有輸入和輸出的來源到接收作業,請使用 graph.run()。當您的應用程式需要拉出結果、測量執行或故意停止時,請使用 graph.build()。
auto run = graph.build();
while (running && run.can_pull()) {
auto sample = run.pull("detections", /*timeout_ms=*/1000);
if (!sample) {
continue;
}
handle(*sample);
}
run.close();
對於長時間執行的資料來源,讓您的應用程式決定何時結束迴圈,並呼叫 close()。 超時表示在該時間範圍內沒有收到任何輸出;這並不總是表示 資料來源已完成。
執行一次
當您想要執行一次同步的推送/拉取操作時,請使用 Graph.run(...)。
simaai::neat::Graph graph("classifier");
graph.add(simaai::neat::nodes::Input("image"));
graph.add(model);
graph.add(simaai::neat::nodes::Output("classes"));
simaai::neat::TensorList outputs = graph.run(std::vector<cv::Mat>{frame});
在 Python 中,傳遞一個列表或元組。graph.run([tensor]) 的意思是「一個圖的輸入」,而不是「新增一個批次維度」。
建立一個可重複使用的執行流程
當您的應用程式擁有迴圈時,請使用 Graph.build(...)。
auto run = graph.build();
run.push("image", std::vector<cv::Mat>{frame});
simaai::neat::TensorList outputs = run.pull_tensors("classes", /*timeout_ms=*/2000);
run.close_input();
while (auto sample = run.pull(/*timeout_ms=*/100)) {
// Drain remaining output after end-of-input.
}
run.close();
當您完成推送操作,且希望讓正在執行的工作完成時,請使用 close_input()。當您想要終止執行時,請使用 close();C++ 也提供 stop(),作為立即停止的指令。