影片分析器常見問題集

本文提供 Azure 影片分析器解決方案的常見問題解答。

一般

我可以在管線拓撲定義中使用哪些系統變數?

變數 描述
System.Runtime.DateTime 代表 UTC 時間的瞬間,通常以一天的日期和時間表示,其格式如下:
yyyyMMddTHHmmssZ
System.Runtime.PreciseDateTime 代表符合 ISO8601 檔案規範格式且使用毫秒之格式的國際標準時間 (UTC) 日期時間執行個體,其格式如下:
yyyyMMddTHHmmss.fffZ
System.TopologyName 代表管線拓撲的名稱。
System.PipelineName 代表即時管線的名稱。

注意

System.Runtime.DateTime 和 System.Runtime.PreciseDateTime 不能在影片接收節點中當作 Azure 影片分析器影片資源名稱的一部分使用。 這些變數可用於檔案接收節點中來命名檔案。

影片分析器的隱私權原則為何?

影片分析器在 Microsoft 隱私權聲明的涵蓋範圍內。 隱私權聲明會說明 Microsoft 處理的個人資料、Microsoft 處理該資料的方式,以及 Microsoft 處理該資料的目的。 若要深入了解隱私權,請參閱 Microsoft 信任中心

設定和部署

我是否可以將邊緣模組部署至 Windows 10 裝置上?

是。 如需詳細資訊,請參閱 Windows 10 上的 Linux 容器

我目前使用虛擬機器作為模擬邊緣裝置。 我可以在部署後調整 VM 設定大小嗎?

可以,您可以將影片分析器等邊緣模組部署 VM 後,將 VM 擴大或縮小為不同大小。 您可能需要在虛擬機器上重新啟動 IoT Edge 執行階段。 針對 Linux VM,請使用命令 sudo systemctl restart iotedge。 如果即時管線已在執行中,則應該在重新啟動完成後繼續執行。 在重新啟動期間,您會看到管線輸出發生中斷 (例如:推斷事件、影片錄製)。

我如何將範例影片檔案新增至 IoT Edge 裝置上的 RTSP 相機模擬器模組?

如果您已依照快速入門或教學課程來安裝相機模擬器,則您若要新增影片檔案:

  • 檢查檔案是否為支援的格式,並使用 H.264 影片轉碼器
  • 將檔案下載到 IoT Edge 裝置上的 /home/localedgeuser/samples/input/<videofile.mkv>,如本節所示

您可以在媒體資料集中找到可用於測試的範例媒體檔案。

從 IP 相機和 RTSP 設定擷取

我需要在裝置上使用特殊的 SDK 才能傳送影片串流嗎?

否,影片分析器支援使用 RTSP (即時串流通訊協定) 擷取媒體以進行視訊串流,絕大多數的 IP 相機都支援此通訊協定。

我是否可以使用 RTSP 以外的通訊協定,將媒體推送至影片分析器?

否,影片分析器僅支援使用 RTSP 從 IP 相機擷取影片。 任何支援透過 TCP/HTTP 進行 RTSP 串流的相機都應該可以運作。

我是否可以重設或更新即時管線中的 RTSP 來源 URL?

是,前提是該即時管線是處於「非作用中」狀態。

是否可以在測試及開發期間使用 RTSP 模擬器?

是,有 RTSP 模擬器 \(英文\) 邊緣模組可供用於快速入門和教學課程來協助學習過程。 我們會盡力提供此課程模組,但其不一定隨時可供使用。 強烈建議您「不要」使用此模擬器超過數個小時。 在您規劃生產環境部署之前,應該花時間搭配實際的 RTSP 來源進行測試。

設計 AI 模型

我有多個 AI 模型包裝在 Docker 容器中。 我要如何搭配影片分析器加以使用?

解決方案會根據推斷伺服器用來與影片分析器通訊的通訊協定而有所不同。 下列各節說明每個通訊協定的運作方式。

使用 HTTP 通訊協定

  • 單一容器 (名為 avaextension 的模組):

    在您的推斷伺服器中,您可以使用單一連接埠,但針對不同的 AI 模型使用不同的端點。 例如,針對 Python 範例,您可以針對每個模型使用不同的 routes,如下所示:

    @app.route('/score/face_detection', methods=['POST']) 
    … 
    Your code specific to face detection model
    
    @app.route('/score/vehicle_detection', methods=['POST']) 
    … 
    Your code specific to vehicle detection model 
    … 
    

    然後,在您的影片分析器部署中,當您啟用即時管線時,請為每個模型設定推斷伺服器 URL,如下所示:

    第 1 個即時管線:推斷伺服器 URL = http://avaextension:44000/score/face_detection
    第 2 個即時管線:推斷伺服器 URL = http://avaextension:44000/score/vehicle_detection

    注意

    或者,您可以在不同的連接埠上公開 AI 模型,並在啟用即時管線時加以呼叫。

  • 多個容器:

    每個容器都會以不同的名稱部署。 在快速入門和教學課程中,我們示範過如何部署名為 avaextension 的延伸模組。 現在您可以開發兩個不同的容器,每個容器都有相同的 HTTP 介面,這表示其具有相同的 /score 端點。 使用不同的名稱部署這兩個容器,並確定兩者接聽的是「不同的連接埠」

    例如,其中一個名為 avaextension1 的容器會接聽連接埠 44000,而名為 avaextension2 的第二個容器會接聽連接埠 44001

    在您的影片分析器拓撲中,您會用不同的推斷 URL 來將兩個即時管線具現化,如下所示:

    第 1 個即時管線:推斷伺服器 URL =http://avaextension1:44000/score
    第 2 個即時管線:推斷伺服器 URL = http://avaextension2:44001/score

使用 gRPC 通訊協定

  • gRPC 延伸模組節點具有屬性 extensionConfiguration,其為 gRPC 合約中可選擇使用的字串。 當您將多個 AI 模型封裝在單一推斷伺服器中時,您不需要為每個 AI 模型公開一個節點。 相反地,針對即時管線,身為延伸模組提供者的您可以使用 extensionConfiguration 屬性來定義選取不同 AI 模型的方式。 在執行期間,影片分析器會將此字串傳遞至您的推斷伺服器,讓伺服器使用該字串叫用所需的 AI 模型。

我正在根據一個 AI 模型組建 gRPC 伺服器,且想要透過多個相機或即時管線來支援其用途。 我應該如何建置伺服器?

首先,請確定您的伺服器可以一次處理多個要求,或是能以平行執行緒運作。

例如,下列 Azure 影片分析器 gRPC 範例中已設定預設的平行通道數目:

server = grpc.server(futures.ThreadPoolExecutor(max_workers=3)) 

在先前的 gRPC 伺服器具現化中,針對每個相機或是每個即時管線,伺服器一次只能開啟三個通道。 請勿嘗試將三個以上的執行個體連線到該伺服器。 如果您嘗試開啟三個以上的通道,要求將會維持為暫止,直到卸除現有通道為止。

上述的 gRPC 伺服器實作會用於我們的 Python 範例中。 身為開發人員,您可以實作自己的伺服器或使用上述預設實作來增加背景工作角色數量,並將其設定為用於視訊摘要的相機數目。

若要設定並使用多個相機,您可以將多個即時管線具現化,每個管線都指向相同或不同的推斷伺服器 (例如上一段所述的伺服器)。

我想要先接收多個畫面,然後再做出推斷決策。 要如何達成此目的?

我們目前的預設範例 \(英文\) 是以「無狀態」模式運作。 這不會保留先前呼叫的狀態,也不會保留呼叫者的識別碼。 這表示可能會有多個即時管線呼叫相同的推斷伺服器,但是伺服器無法區分呼叫者或每個呼叫者的狀態。

使用 HTTP 通訊協定

若要保留狀態,每個呼叫者或即時管線必須使用對呼叫者而言唯一的 HTTP 查詢參數來呼叫推斷伺服器。 例如,以下顯示每個即時管線的推斷伺服器 URL 位址:

第 1 個即時管線:http://avaextension:44000/score?id=1
第 2 個即時管線:http://avaextension:44000/score?id=2

 

在伺服器端,id 有助於識別呼叫者。 如果 id=1,則伺服器可以針對即時管線個別保留狀態。 接著就可以將接收的影片畫面保留在緩衝區中。 例如使用陣列,或是具有 DateTime 索引鍵的字典,而值則為畫面。 您接著可以定義伺服器,以在接收到 x 個畫面後才開始處理 (推斷)。

使用 gRPC 通訊協定

使用 gRPC 延伸模組時,每個工作階段都適用於單一相機摘要,因此不需要提供識別碼。 透過 extensionConfiguration 屬性,您可以將影片畫面儲存在緩衝區中,並定義伺服器在接收到 x 個畫面後才開始處理 (推斷)。

特定容器上的所有 ProcessMediaStreams 是否都會執行相同的 AI 模型?

否。 在即時管線中啟動或停止來自終端使用者的呼叫,或是相機中斷連線或重新連線,都會構成工作階段。 目標是要在相機串流影片時保存單一工作階段。

  • 兩個相機傳送影片進行處理 (至兩個獨立的即時管線) 時會建立兩個工作階段。
  • 一個相機傳送影片至具有兩個 gRPC 延伸模組的節點即時管線時,會建立兩個工作階段。

每個工作階段都是影片分析器和 gRPC 伺服器之間的全雙工連線,而且每個工作階段都可以有不同的模型。

注意

在相機中斷連線或重新連線的情況下,當相機離線時間超過容忍限制之後,影片分析器就會開啟與 gRPC 伺服器的新工作階段。 伺服器不需要追蹤這些工作階段之間的狀態。

影片分析器也新增了針對即時管線中單一相機使用多個 gRPC 延伸模組的支援。 您可以使用這些 gRPC 延伸模組來以循序、同步,或是結合這兩者的方式執行 AI 處理。

注意

同步執行多個延伸模組將會影響您的硬體資源。 當您在選擇適合自己計算需求的硬體時,請記住這一點。

同時進行 ProcessMediaStreams 的數目上限為何?

影片分析器對此數目沒有限制。

我要如何判斷自己的推斷伺服器應該要使用 CPU 還是 GPU,還是任何其他硬體加速器?

您的決定應取決於所開發 AI 模型的複雜度,以及您想要如何使用 CPU 和硬體加速器。 當您開發 AI 模型時,您可以指定模型應該使用哪些資源,以及應執行的動作。

如何檢視推斷伺服器所產生的週框方塊?

您可以將推斷結果和媒體一起錄製在影片資源中。 您可以使用小工具來播放影片與重疊推斷資料。

gRPC 相容性

我要如何知道媒體串流描述項的必要欄位為何?

針對您未提供值的所有欄位,系統會提供預設值,其由 gRPC 所指定 \(英文\)。

影片分析器會使用通訊協定緩衝區語言的 proto3 版本。 您可以在通訊協定緩衝區檔案中找到影片分析器合約所使用的所有通訊協定緩衝區資料。

我要如何確保自己使用的是最新的通訊協定緩衝區檔案?

您可以在合約檔案網站 \(英文\) 上取得最新的通訊協定緩衝區檔案。 每當我們更新合約檔案時,便會將其置於此位置。 由於我們並未計畫立即更新通訊協定檔案,因此請查看檔案頂端的套件名稱以了解版本。 必須是:

microsoft.azure.media.live_video_analytics.extensibility.grpc.v1

對這些檔案所進行的任何更新,都會使名稱結尾的「v 值」遞增。

注意

由於影片分析器是使用 proto3 版本的語言,這些欄位會是選擇性的,且該版本可以回溯或向前相容。

我可以搭配影片分析器使用哪些 gRPC 功能? 哪些功能是必要的?哪些是選擇性的?

您可以使用所有伺服器端 gRPC 功能,前提是已滿足通訊協定緩衝區 (Protobuf) 合約。

監視和計量

我是否可以使用 Azure 事件方格來監視邊緣上的管線?

是。 您可以取用 Prometheus 計量,並將其發佈至您的事件方格。

我是否可以使用 Azure 監視器來檢視雲端中或邊緣上管線的健康情況、計量與效能?

是,我們支援此做法。 若要深入了解,請參閱 Azure 監視器計量概觀 \(部分機器翻譯\)。

是否有任何工具可讓我更加輕鬆地監視影片分析器邊緣模組?

Visual Studio Code 支援 Azure IoT Tools 延伸模組,此延伸模組可讓您輕鬆地監視影片分析器的邊緣模組端點。 您可以使用此工具來快速開始監視 IoT 中樞內建端點的「事件」,並檢視從邊緣裝置路由傳送到雲端的推斷訊息。

此外,您可以使用此延伸模組來編輯影片分析器邊緣模組的模組對應項,以修改管線設定。

如需詳細資訊,請參閱監視和記錄 \(部分機器翻譯\) 一文。

計費與可用性

影片分析器如何計費?

如需帳單詳細資料,請參閱影片分析器定價