使用 BigQuery 預測功能建立入住率分析應用程式

Vertex AI Vision 是一項 AI 輔助平台,可供您擷取、分析及儲存影片 資料。Vertex AI Vision 可讓您建構及部署 AI 應用程式。您可以運用 Vertex AI Vision 與其他產品元件的整合功能,建構端對端 Vertex AI Vision 解決方案。

如要開始使用 Vertex AI Vision 平台導入解決方案,請先瞭解下列 Vertex AI Vision 概念和元件:

  • 串流:代表解決方案中的影片串流層。串流來源可以是即時影像 (例如 IP 攝影機) 或影片檔案 (例如 MP4 檔案)。

  • 應用程式:啟用串流與 AI 處理器之間的連線,對影片執行機器學習作業。舉例來說,您可以將攝影機串流連結至 AI 模型,計算攝影機前方經過的人數。

  • 應用程式輸出目的地:將分析資料傳送至儲存目的地 (Vertex AI Vision 的媒體倉儲或 BigQuery),或接收即時資料。儲存至 Vertex AI Vision 的媒體倉儲後,您就能搜尋從擷取串流資料的 AI 處理器取得的分析輸出內容和中繼資料。儲存至 BigQuery 後,您就能使用產品的離線分析功能。如果直接收到應用程式輸出內容,就能立即運用洞察資料制定業務決策。詳情請參閱「總覽:將應用程式輸出結果連結至資料目的地」。

設定 BigQuery 接收資料

如要接收資料並根據 Analytics 應用程式資料進行預測,您必須建立與處理後資訊相符的 BigQuery 資料集和資料表。

建立資料集

建立 BigQuery 資料表前,您必須先建立資料集,接收應用程式的分析資訊。

主控台

  1. 在 Google Cloud 控制台中開啟 BigQuery 頁面。

    前往 BigQuery 頁面

  2. 在「Explorer」面板中,選取要建立資料集的專案。

  3. 展開「動作」選項,然後按一下「建立資料集」

  4. 在「Create dataset」(建立資料集) 頁面:

    • 在「Dataset ID」(資料集 ID) 中輸入 occupancy_dataset
    • 針對「Data location」(資料位置),選擇資料集的地理位置。資料集在建立之後,該位置就無法改變。

    • 針對「Default table expiration」(預設資料表到期時間),選擇下列其中一個選項:

      • [Never] (永不):(預設) 在資料集中建立的資料表永遠不會自動刪除,只能手動刪除。
      • [Number of days after table creation] (資料表建立後的天數):這個值會決定新建立的資料集什麼時候會遭到刪除。如果您在建立資料表時未設定資料表到期時間,系統就會套用這個值。

    • 點選「建立資料集」

建立 BigQuery 資料表

控制台

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在「Explorer」窗格中展開專案,然後選取 occupancy_dataset 資料集。
  3. 在「資料集資訊」部分,按一下 「建立資料表」
  4. 在「建立資料表」面板中,指定下列詳細資料:
    1. 在「來源」部分,從「使用下列資料建立資料表」清單中選取「空白資料表」
    2. 在「目的地」部分,指定下列詳細資料:
      1. 確認「資料集」欄位中已指定 occupancy_dataset
      2. 在「Table」(資料表) 欄位中輸入 occupancy_dataset_table
      3. 確認「Table type」(資料表類型) 欄位已設為「Native table」(原生資料表)。
    3. 在「Schema」(結構定義) 區段中,輸入結構定義。您可以透過下列方式,手動輸入結構定義資訊:
      • 按一下「以文字形式編輯」,然後貼上下列 JSON 陣列結構定義。如果您使用 JSON 陣列,可透過與建立 JSON 結構定義檔一樣的程序產生結構定義。
        [
            {
              "name": "ingestion_time",
              "type": "TIMESTAMP",
              "mode": "REQUIRED"
            },
            {
              "name": "application",
              "type": "STRING",
              "mode": "REQUIRED"
            },
            {
              "name": "instance",
              "type": "STRING",
              "mode": "REQUIRED"
            },
            {
              "name": "node",
              "type": "STRING",
              "mode": "REQUIRED"
            },
            {
              "name": "annotation",
              "type": "STRING"
            }
        ]
    4. 點選「建立資料表」。

建立入座人數計算應用程式

設定 BigQuery 資料集和資料表後,您就可以建立應用程式,處理傳送至這些 BigQuery 資源的資料。

建立空白的應用程式

您必須先建立空白應用程式,才能填入應用程式圖表。

控制台

在 Google Cloud 控制台中建立應用程式。

  1. 開啟 Vertex AI Vision 資訊主頁的「應用程式」分頁。

    前往「Applications」(應用程式) 分頁

  2. 按一下「建立」按鈕。

  3. 輸入 occupancy-bq-app 做為應用程式名稱,然後選擇您所在的地區。

  4. 點選「建立」

新增應用程式元件節點

建立空白應用程式後,即可將三個節點新增至應用程式圖表:

  1. 擷取節點:串流資源,用於擷取您建立的 Compute Engine VM 執行個體傳送的資料。
  2. 處理節點:對擷取資料採取行動的入住率分析模型。
  3. BigQuery 節點:連接器節點,可讓應用程式將中繼資料儲存至 BigQuery 資料表。

控制台

在管理中心將元件節點新增至應用程式。

  1. 開啟 Vertex AI Vision 資訊主頁的「應用程式」分頁。

    前往「Applications」(應用程式) 分頁

  2. occupancy-bq-app 行中,選取「查看圖表」。系統會將您導向至處理管道的圖表視覺化畫面。

新增資料擷取節點

  1. 如要新增輸入串流節點,請在側邊選單的「Connectors」(連接器) 區段中選取「Streams」(串流) 選項。

  2. 在隨即開啟的「Stream」(串流) 選單中,選取「Source」(來源) 區段的 「Add Stream」(新增串流)

  3. 在「新增串流」選單中,選擇「註冊新串流」,然後新增 occupancy-bq-stream 做為串流名稱。

  4. 如要將串流新增至應用程式圖表,請按一下「新增串流」

新增資料處理節點

  1. 如要新增入住人數計數模型節點,請在側邊選單的「Specialized models」(專業模型) 區段中,選取「occupancy analytics」(入住人數分析) 選項。

  2. 保留預設選取項目「人物」和「車輛」

新增 BigQuery 節點

  1. 如要新增輸出目的地 (儲存空間) 節點,請在側邊選單的「Connectors」(連接器) 區段中選取「BigQuery」選項。

  2. 在「BigQuery」BigQuery選單中搜尋 occupancy_dataset_table,然後選取資料表。

  3. 在「儲存中繼資料來源:」部分中,選取「串流」和「車輛乘載人數分析」

部署應用程式以供使用

使用所有必要元件建構端對端應用程式後,最後一個步驟就是部署應用程式。

控制台

  1. 開啟 Vertex AI Vision 資訊主頁的「應用程式」分頁。

    前往「Applications」(應用程式) 分頁

  2. 在清單中,選取 occupancy-bq-app 應用程式旁邊的「查看圖表」

  3. 在應用程式圖表建構工具頁面中,按一下「部署」按鈕

  4. 在隨即顯示的確認對話方塊中,選取「Deploy」

    部署作業可能需要幾分鐘才能完成。部署作業完成後,節點旁會顯示綠色勾號。

設定遠端電腦來串流影片

您已部署入住人數計數應用程式,準備接收、處理串流資料,並將資料儲存至 BigQuery 資料表,現在必須將影片資料串流至應用程式。

在本教學課程中,您將建立 Compute Engine VM 執行個體來代管影片,並從該 VM 傳送串流影片資料。

建立 Linux VM

從 Compute Engine VM 執行個體傳送影片的第一步,是建立 VM 執行個體。

主控台

  1. 前往控制台的「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體

  2. 選取您的專案並點選 [繼續]

  3. 點選「建立執行個體」

  4. 指定 VM 的「Name」(名稱)。詳情請參閱資源命名慣例

  5. 選用:變更這個 VM 的「Zone」(區域)。Compute Engine 會隨機排列每個地區內的區域清單,以鼓勵跨多個區域使用。

  6. 接受其餘預設選項。如要進一步瞭解這些選項,請參閱「建立及啟動 VM」。

  7. 如要建立並啟動 VM,請按一下 [Create] (建立)

設定 VM 環境

VM 啟動後,您可以使用控制台在瀏覽器中建立 SSH 連線。建立連線後,即可下載 vaictl 指令列工具,將影片匯入應用程式。

主控台

與 VM 建立 SSH 連線

  1. 前往控制台的「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體

  2. 在您建立的執行個體列的「連線」部分,按一下「SSH」。系統會在新的瀏覽器視窗中開啟 SSH 連線。

    UI 中的 SSH 選項

下載 vaictl 指令列工具

  1. 直接透過瀏覽器進行 SSH 連線視窗中,使用下列指令下載 Vertex AI Vision (vaictl) 指令列工具:

    wget https://github.com/google/visionai/releases/download/v0.0.5/visionai_0.0-5_amd64.deb
    
  2. 執行下列指令來安裝指令列工具:

    sudo apt install ./visionai_0.0-5_amd64.deb
    
  3. 您可以執行下列指令來測試安裝作業:

    vaictl --help
    

將影片檔案擷取至應用程式

設定 VM 環境後,您可以複製範例影片檔案,然後使用 vaictl 將影片資料串流至入住人數計數應用程式。

傳送這項指令後,請先讓資料串流傳輸數小時,再進行下一個步驟。

直接透過瀏覽器進行 SSH 連線

將範例影片複製到 VM

  1. 在 VM 的「直接透過瀏覽器進行 SSH 連線」視窗中,使用下列 gcloud storage cp 指令複製範例影片。替換下列變數:
    • SOURCE:要使用的影片檔案位置。你可以使用自己的影片檔案來源 (例如 gs://BUCKET_NAME/FILENAME.mp4),或使用下列其中一個範例影片:
      • gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4 (含人物和車輛的影片, 影片來源)
      • gs://cloud-samples-data/vertex-ai-vision/highway_vehicles.mp4 (僅含車輛的影片,影片來源)
    gcloud storage cp SOURCE .

從 VM 串流影片,並將資料擷取至應用程式

  1. 如要將這個本機影片檔案傳送至應用程式輸入串流,請使用下列指令。您必須進行下列變數替代:
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • LOCATION_ID:您的位置 ID。例如:us-central1更多資訊
    • LOCAL_FILE.EXT:本機影片檔案的檔案名稱。 例如:my-video.mp4
    • --loop 旗標:選用。循環播放檔案資料,模擬串流。

    這項指令會將影片檔案串流至串流。如果使用 --loop 旗標,影片會循環播放到串流中,直到您停止指令為止:

    vaictl -p PROJECT_ID \
        -l LOCATION_ID \
        -c application-cluster-0 \
        --service-endpoint visionai.googleapis.com \
    send video-file to streams 'occupancy-bq-stream' --file-path LOCAL_FILE.EXT --loop

從開始擷取作業到影片顯示在資訊主頁,可能需要約 100 秒。vaictl

串流擷取功能推出後,選取 occupancy-bq-stream 串流,即可在 Vertex AI Vision 資訊主頁的「串流」分頁中查看影片動態饋給。

前往「串流」分頁

使用 BigQuery ML 建構預測模型

您現在有一個可運作的應用程式,可將中繼資料儲存到 BigQuery。將資料串流至應用程式幾小時後,您就可以開始使用 BigQuery ML 建立預測模型。

選用:執行入住率查詢

您可以執行簡單的查詢,查看應用程式產生的資料,這些資料會儲存在資料表中。

主控台

  1. 在 Google Cloud 控制台開啟「BigQuery」頁面。

    前往「BigQuery」

  2. 選取 occupancy_dataset 旁邊的「展開」,然後選取 occupancy_dataset_table

  3. 在表格詳細資料檢視畫面中,按一下「撰寫新查詢」

    撰寫新查詢

  4. 在「Query editor」(查詢編輯器) 文字區域中輸入下列 Google 標準 SQL 查詢:

    SELECT
     *
    FROM (
     SELECT
       TIMESTAMP_TRUNC(PARSE_TIMESTAMP('"%Y-%m-%dT%H:%M:%E*SZ"', JSON_QUERY(annotation,
             "$.currentTime")), MINUTE) currentTime,
       CAST(JSON_QUERY(annotation,
           '$.stats.fullFrameCount[0].count') AS INT64) AS count,
       JSON_QUERY(annotation,
         '$.stats.fullFrameCount[0].entity.labelString') AS type
     FROM
       `PROJECT_ID.occupancy_dataset.occupancy_dataset_table` )
    WHERE
     count IS NOT NULL
  5. 選用:如要變更資料處理位置,請按一下「更多」,然後按一下「查詢設定」。在「Processing location」(處理位置) 下,按一下 [Auto-select] (自動選取),然後選擇您資料的位置。最後,按一下 [Save] (儲存),更新查詢設定。

  6. 按一下 [Run] (執行)

這會建立一個查詢工作,將輸出寫入暫時性資料表。

執行這項查詢會產生表格,其中包含影片中有人物時的時間和人數資訊。

currentTime 數量 類型
2022-08-10 16:17:00 UTC 2 「Person」(人員)
2022-08-10 16:17:00 UTC 2 「Person」(人員)
2022-08-10 16:17:00 UTC 4 「Person」(人員)
2022-08-10 16:17:00 UTC 1 「Person」(人員)
2022-08-10 16:17:00 UTC 5 「Person」(人員)
2022-08-10 16:17:00 UTC 2 「Person」(人員)

建立訓練檢視畫面

查看儲存在資料表中的資料後,您可以建立檢視區塊,然後檢查產生的資料表內容。您可以使用這項觀看資料訓練預測模型。

您可以撰寫用來定義檢視表可存取之資料的 SQL 查詢,藉此建立檢視表。SQL 查詢必須包含 SELECT 陳述式。如要進一步瞭解 BigQuery 檢視表,請參閱「檢視表簡介」。

如要建立訓練資料表檢視畫面:

主控台

  1. 在 Google Cloud 控制台開啟「BigQuery」頁面。

    前往「BigQuery」

  2. 選取 occupancy_dataset 旁邊的「展開」,然後選取 occupancy_dataset_table

  3. 在表格詳細資料檢視畫面中,按一下「撰寫新查詢」

    撰寫新查詢

  4. 在「Query editor」(查詢編輯器) 文字區域中輸入下列 Google 標準 SQL 查詢:

    CREATE VIEW `PROJECT_ID.occupancy_dataset.forecast_training_data` AS (
      WITH
        raw_counts AS (
        SELECT
          *
        FROM (
          SELECT
            TIMESTAMP_TRUNC(
              PARSE_TIMESTAMP('"%Y-%m-%dT%H:%M:%E*SZ"',
                              JSON_QUERY(annotation,
                                          "$.currentTime")),
                            MINUTE) AS currentTime,
            CAST(JSON_QUERY(annotation,
                '$.stats.fullFrameCount[0].count') AS INT64) AS count,
            JSON_QUERY(annotation,
              '$.stats.fullFrameCount[0].entity.labelString') AS type
          FROM
            `PROJECT_ID.occupancy_dataset.occupancy_dataset_table` )
        WHERE
          count IS NOT NULL )
      SELECT
        currentTime,
        SUM(count) AS total_count,
        type
      FROM
        raw_counts
      GROUP BY
        currentTime, type)
  5. 按一下「執行」

選用:查詢檢視畫面

執行下列查詢,即可查看新檢視區塊訓練資料的結果:

主控台

  1. occupancy_dataset_table 資料表詳細資料檢視畫面中,按一下「撰寫新查詢」

  2. 在「Query editor」(查詢編輯器) 文字區域中輸入下列 Google 標準 SQL 查詢:

    SELECT
     *
    FROM
      `PROJECT_ID.occupancy_dataset.forecast_training_data`
    ORDER BY
     currentTime, type
    LIMIT
     100
  3. 按一下「執行」

這會傳回按時間排序的結果,如下所示:

currentTime total_count 類型
2022-08-10 16:17:00 UTC 129 「Person」(人員)
2022-08-10 16:18:00 UTC 150 「Person」(人員)
2022-08-10 16:19:00 UTC 80 「Person」(人員)
2022-08-10 16:20:00 UTC 129 「Person」(人員)
2022-08-10 16:21:00 UTC 142 「Person」(人員)
2022-08-10 16:22:00 UTC 71 「Person」(人員)
2022-08-10 16:22:00 UTC 2 「車輛」

使用 BigQuery ML 訓練預測模型

現在您已在檢視區塊中取得資料,可做為訓練資料,接下來可以使用 BigQuery ML 訓練預測模型。

主控台

  1. occupancy_dataset_table 資料表詳細資料檢視畫面中,按一下「撰寫新查詢」

  2. 在「Query editor」(查詢編輯器) 文字區域中輸入下列 Google 標準 SQL 查詢:

    CREATE OR REPLACE MODEL `PROJECT_ID.occupancy_dataset.occupancy_forecast_model`
      OPTIONS( MODEL_TYPE = "ARIMA_PLUS",
        TIME_SERIES_TIMESTAMP_COL = "currentTime",
        TIME_SERIES_DATA_COL = "total_count",
        TIME_SERIES_ID_COL = "type" ) AS
    SELECT
      *
    FROM
      `PROJECT_ID.occupancy_dataset.forecast_training_data`
  3. 按一下「執行」

查詢需要幾分鐘才會完成。初次的疊代作業完成後,您的模型 (occupancy_forecast_model) 將出現在導覽面板中。由於查詢是使用 CREATE MODEL 陳述式建立模型,因此您看不到查詢結果。

您可以查看「模型統計資料」分頁,觀察模型訓練過程。第一個疊代完成後,分頁就會更新。每次疊代完成後,統計資料就會持續更新。

使用 BigQuery 取得入住率預測結果

模型訓練完成後,您可以從模型取得入住人數的預測結果。

下列 ML.FORECAST 查詢使用 HORIZON 函式輸入內容,預測未來 60 分鐘的狀況。

主控台

  1. occupancy_dataset_table 資料表詳細資料檢視畫面中,按一下「撰寫新查詢」

  2. 在「Query editor」(查詢編輯器) 文字區域中輸入下列 Google 標準 SQL 查詢:

    SELECT
      *
    FROM
      ML.FORECAST(MODEL `PROJECT_ID.occupancy_dataset.occupancy_forecast_model`,
      STRUCT(60 AS HORIZON))
  3. 按一下「執行」

模型會在 forecast_value 下方產生預測結果,適用於類型為 "Person" 的未來時間戳記。舉例來說,在 2022-08-1211:06:00,模型預測總共會有約 15.26 個「人」。

類型 forecast_timestamp forecast_value standard_error confidence_level prediction_interval_lower_bound prediction_interval_upper_bound
「Person」(人員) 2022-08-12 11:06:00 UTC 15.2621986941298 2.56470066 0.95 10.2444693 20.2799280
「Person」(人員) 2022-08-12 11:07:00 UTC 13.235260043001354 3.19379743 0.95 6.98672921 19.4837908
「Person」(人員) 2022-08-12 11:08:00 UTC 16.257331475128712 3.87581375 0.95 8.67446430 23.8401986
「Person」(人員) 2022-08-12 11:09:00 UTC 31.432229611853742 4.24905293 0.95 23.1191356 39.7453236
「Person」(人員) 2022-08-12 11:10:00 UTC 26.199214148193725 4.26157413 0.95 17.8616229 34.5368053
「Person」(人員) 2022-08-12 11:11:00 UTC 26.211573546307324 4.27962512 0.95 17.8386663 34.5844807