Ứng dụng giám sát lưu lượng truy cập Vertex AI Vision

1. Mục tiêu

Tổng quan

Lớp học lập trình này sẽ tập trung vào việc tạo một ứng dụng Vertex AI Vision từ đầu đến cuối để giám sát cảnh quay video giao thông theo thời gian thực. Chúng tôi sẽ sử dụng các tính năng tích hợp của mô hình Chuyên biệt được huấn luyện trước Phân tích mức độ sử dụng để ghi lại những điều sau:

  • Đếm số lượng xe và người băng qua đường tại một vạch kẻ nhất định.
  • Đếm số lượng xe/người trong một khu vực cố định bất kỳ trên đường.
  • Phát hiện tình trạng tắc nghẽn ở bất kỳ đoạn đường nào.

Kiến thức bạn sẽ học được

  • Cách thiết lập máy ảo để tiếp nhận video phát trực tuyến
  • Cách tạo ứng dụng trong Vertex AI Vision
  • Các tính năng có trong Occupancy Analytics và cách sử dụng các tính năng đó
  • Cách triển khai ứng dụng
  • Cách tìm kiếm video trong Kho lưu trữ đa phương tiện của Vertex AI Vision.
  • Cách kết nối đầu ra với BigQuery, viết truy vấn SQL để trích xuất thông tin chi tiết từ đầu ra json của mô hình và trực quan hoá kết quả trong Looker Studio theo thời gian thực.

2. Trước khi bắt đầu

  1. Trong Google Cloud Console, trên trang chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud. Lưu ý: Nếu bạn không có ý định giữ lại các tài nguyên mà bạn tạo trong quy trình này, hãy tạo một dự án thay vì chọn một dự án hiện có. Sau khi hoàn tất các bước này, bạn có thể xoá dự án và loại bỏ mọi tài nguyên liên quan đến dự án đó. Chuyển đến bộ chọn dự án
  2. Đảm bảo rằng bạn đã bật tính năng thanh toán cho dự án trên đám mây. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên một dự án hay không.
  3. Bật Compute Engine và Vision AI API. Bật các API

Tạo một tài khoản dịch vụ:

  1. Trong bảng điều khiển Cloud, hãy chuyển đến trang Tạo tài khoản dịch vụ. Chuyển đến phần Tạo tài khoản dịch vụ
  2. Chọn dự án của bạn.
  3. Trong trường Tên tài khoản dịch vụ, hãy nhập một tên. Bảng điều khiển Cloud sẽ điền trường Mã tài khoản dịch vụ dựa trên tên này. Trong trường Nội dung mô tả tài khoản dịch vụ, hãy nhập nội dung mô tả. Ví dụ: Tài khoản dịch vụ cho hướng dẫn bắt đầu nhanh.
  4. Nhấp vào Tạo và tiếp tục.
  5. Để cấp quyền truy cập vào dự án, hãy cấp(các) vai trò sau cho tài khoản dịch vụ của bạn: Vision AI > Vision AI Editor, Compute Engine > Compute Instance Admin (beta), Storage > Storage Object Viewer † . Trong danh sách Chọn vai trò, hãy chọn một vai trò. Đối với các vai trò khác, hãy nhấp vào Thêm vai trò khác rồi thêm từng vai trò khác. Lưu ý: Trường Vai trò ảnh hưởng đến những tài nguyên mà tài khoản dịch vụ của bạn có thể truy cập trong dự án. Bạn có thể thu hồi các vai trò này hoặc cấp thêm vai trò sau. Trong môi trường sản xuất, đừng cấp vai trò Chủ sở hữu, Người chỉnh sửa hoặc Người xem. Thay vào đó, hãy cấp một vai trò được xác định trước hoặc vai trò tuỳ chỉnh đáp ứng nhu cầu của bạn.
  6. Nhấp vào Tiếp tục.
  7. Nhấp vào Xong để hoàn tất quá trình tạo tài khoản dịch vụ. Đừng đóng cửa sổ trình duyệt. Bạn sẽ sử dụng chỉ mục này trong bước tiếp theo.

Tạo khoá tài khoản dịch vụ:

  1. Trong bảng điều khiển Cloud, hãy nhấp vào địa chỉ email của tài khoản dịch vụ mà bạn đã tạo.
  2. Nhấp vào Khoá.
  3. Nhấp vào Thêm khoá, rồi nhấp vào Tạo khoá mới.
  4. Nhấp vào Tạo. Một tệp khoá JSON sẽ được tải xuống máy tính của bạn.
  5. Nhấp vào Close (Đóng).
  6. Cài đặtkhởi động Google Cloud CLI.

† Bạn chỉ cần có vai trò này nếu sao chép một tệp video mẫu từ một nhóm Cloud Storage.

3. Thiết lập một máy ảo để phát trực tuyến video

Trước khi tạo một Ứng dụng trong Occupancy Analytics, bạn phải đăng ký một luồng mà Ứng dụng có thể sử dụng sau này.

Trong hướng dẫn này, bạn sẽ tạo một phiên bản VM Compute Engine lưu trữ video và gửi dữ liệu video phát trực tuyến đó từ VM.

Tạo một máy ảo Linux

Bước đầu tiên để gửi video từ một phiên bản VM Compute Engine là tạo phiên bản VM.

  1. Trong bảng điều khiển, hãy chuyển đến trang Phiên bản máy ảo. Chuyển đến phần phiên bản máy ảo
  2. Chọn dự án của bạn rồi nhấp vào Tiếp tục.
  3. Nhấp vào Tạo phiên bản.
  4. Chỉ định Name (Tên) cho VM. Để biết thêm thông tin, hãy xem Quy ước đặt tên tài nguyên.
  5. Không bắt buộc: Thay đổi Vùng cho VM này. Compute Engine sắp xếp ngẫu nhiên danh sách các vùng trong mỗi khu vực để khuyến khích việc sử dụng trên nhiều vùng.
  6. Chấp nhận các lựa chọn mặc định còn lại. Để biết thêm thông tin về các lựa chọn này, hãy xem phần Tạo và khởi động một máy ảo.
  7. Để tạo và khởi động VM, hãy nhấp vào Tạo.

Thiết lập môi trường máy ảo

Sau khi máy ảo khởi động, bạn có thể sử dụng bảng điều khiển để SSH vào máy ảo từ trình duyệt. Sau đó, bạn có thể tải công cụ dòng lệnh vaictl xuống để truyền video vào luồng của mình.

Thiết lập kết nối SSH với máy ảo

  1. Trong bảng điều khiển, hãy chuyển đến trang Phiên bản máy ảo. Chuyển đến phần phiên bản máy ảo
  2. Trong phần Connect (Kết nối) của dòng phiên bản mà bạn đã tạo, hãy nhấp vào SSH. Thao tác này sẽ mở một kết nối SSH trong một cửa sổ trình duyệt mới. Lựa chọn SSH trong giao diện người dùng

Tải công cụ dòng lệnh vaictl xuống

  1. Trong cửa sổ SSH-in-browser, hãy tải công cụ dòng lệnh Vertex AI Vision (vaictl) xuống bằng lệnh sau:
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
  1. Cài đặt công cụ dòng lệnh bằng cách chạy lệnh sau:
sudo apt install ./visionai_0.0-4_amd64.deb
  1. Bạn có thể kiểm thử quy trình cài đặt bằng cách chạy lệnh sau:
vaictl --help

4. Truyền trực tuyến một tệp video

Sau khi thiết lập môi trường máy ảo, bạn có thể sao chép một tệp video mẫu rồi dùng vaictl để truyền trực tuyến dữ liệu video đến ứng dụng phân tích mức độ sử dụng.

Bắt đầu bằng cách kích hoạt Vision AI API trong Cloud Console

Đăng ký một luồng mới

  1. Nhấp vào thẻ luồng trên bảng điều khiển bên trái của Vertex AI Vision.
  2. Nhấp vào Đăng ký
  3. Trong phần Tên luồng, hãy nhập "traffic-stream"
  4. Trong phần khu vực, hãy nhập "us-central1"
  5. Nhấp vào đăng ký

Sẽ mất vài phút để luồng được đăng ký.

Sao chép một video mẫu vào máy ảo

  1. Trong cửa sổ SSH-in-browser (SSH trong trình duyệt) cho VM, hãy sao chép một video mẫu bằng lệnh gsutil cp sau đây. Thay thế biến sau:
  • SOURCE: Vị trí của tệp video cần dùng. Bạn có thể sử dụng tệp video nguồn của riêng mình (ví dụ: gs://BUCKET_NAME/FILENAME.mp4) hoặc sử dụng video mẫu (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4)(video có người và xe, nguồn)
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Phát trực tiếp video từ máy ảo và truyền dữ liệu vào luồng phát trực tiếp

  1. Để gửi tệp video cục bộ này đến luồng đầu vào của ứng dụng, hãy sử dụng lệnh sau. Bạn phải thay thế các biến sau:
  • PROJECT_ID: Mã dự án trên Google Cloud.
  • LOCATION_ID: Mã vị trí của bạn. Ví dụ: us-central1. Để biết thêm thông tin, hãy xem bài viết Vị trí trên đám mây.
  • LOCAL_FILE: Tên tệp của một tệp video cục bộ. Ví dụ: street_vehicles_people.mp4.
  • –loop flag: Không bắt buộc. Lặp lại dữ liệu tệp để mô phỏng hoạt động truyền trực tuyến.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4
  1. Lệnh này truyền trực tuyến một tệp video đến một luồng. Nếu bạn dùng cờ –loop, video sẽ được lặp lại trong luồng cho đến khi bạn dừng lệnh. Chúng ta sẽ chạy lệnh này dưới dạng một công việc trong nền để lệnh này tiếp tục truyền trực tuyến ngay cả sau khi máy ảo bị ngắt kết nối.
  • ( thêm nohup vào đầu và "&" vào cuối để biến lệnh này thành một tác vụ chạy ngầm)
nohup vaictl -p $PROJECT_ID \
    -l $LOCATION_ID \
    -c application-cluster-0 \
    --service-endpoint visionai.googleapis.com \
send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --loop &

Có thể mất khoảng 100 giây từ khi bạn bắt đầu thao tác truyền vaictl cho đến khi video xuất hiện trong trang tổng quan.

Sau khi có thể truyền trực tiếp, bạn có thể xem nguồn cấp dữ liệu video trong thẻ Luồng của trang tổng quan Vertex AI Vision bằng cách chọn luồng dữ liệu giao thông.

Chuyển đến thẻ Sự kiện phát trực tiếp

Hình ảnh video trực tiếp đang được phát trực tuyến trong giao diện người dùngChế độ xem trực tiếp video đang được truyền vào luồng trong bảng điều khiển Cloud của Google. Nguồn video: Elizabeth Mavor trên Pixabay (đã thêm hiệu ứng pixel hoá).

5. Tạo ứng dụng

Bước đầu tiên là tạo một ứng dụng xử lý dữ liệu của bạn. Bạn có thể coi ứng dụng là một quy trình tự động kết nối các thành phần sau:

  • Nhập dữ liệu: Nguồn cấp dữ liệu video được nhập vào một luồng.
  • Phân tích dữ liệu: Bạn có thể thêm một mô hình AI(Thị giác máy tính) sau khi nhập.
  • Lưu trữ dữ liệu: Hai phiên bản của nguồn cấp dữ liệu video (luồng ban đầu và luồng do mô hình AI xử lý) có thể được lưu trữ trong một kho nội dung nghe nhìn.

Trong bảng điều khiển Cloud, một ứng dụng được biểu thị dưới dạng một biểu đồ.

Tạo một ứng dụng trống

Trước khi điền vào biểu đồ ứng dụng, trước tiên bạn phải tạo một ứng dụng trống.

Tạo một ứng dụng trong Google Cloud Console.

  1. Chuyển đến bảng điều khiển Google Cloud.
  2. Mở thẻ Ứng dụng trên trang tổng quan Vertex AI Vision.

Chuyển đến thẻ Ứng dụng

  1. Nhấp vào nút Tạo.
  2. Nhập traffic-app làm tên ứng dụng và chọn khu vực của bạn.
  3. Nhấp vào Tạo.

Thêm các nút thành phần ứng dụng

Sau khi tạo ứng dụng trống, bạn có thể thêm 3 nút vào biểu đồ ứng dụng:

  1. Nút tiếp nhận: Tài nguyên luồng dữ liệu tiếp nhận dữ liệu được gửi từ một thực thể VM Compute Engine mà bạn tạo.
  2. Nút xử lý: Mô hình phân tích mức độ sử dụng hoạt động dựa trên dữ liệu đã được nhập.
  3. Nút lưu trữ: Kho lưu trữ nội dung nghe nhìn lưu trữ các video đã xử lý và đóng vai trò là kho lưu trữ siêu dữ liệu. Các kho siêu dữ liệu bao gồm thông tin phân tích về dữ liệu video đã nhập và thông tin do các mô hình AI suy luận.

Thêm các nút thành phần vào ứng dụng của bạn trong bảng điều khiển.

  1. Mở thẻ Ứng dụng trên trang tổng quan Vertex AI Vision. Chuyển đến thẻ Ứng dụng
  2. Trong dòng lưu lượng truy cập – ứng dụng, hãy chọn Xem biểu đồ. Thao tác này sẽ đưa bạn đến hình ảnh trực quan dạng biểu đồ của quy trình xử lý.

Thêm một nút nhập dữ liệu

  1. Để thêm một nút luồng đầu vào, hãy chọn mục Luồng trong phần Trình kết nối của trình đơn bên.
  2. Trong phần Nguồn của trình đơn Phát trực tiếp mở ra, hãy chọn Thêm luồng phát.
  3. Trong trình đơn Thêm luồng dữ liệu, hãy chọn Đăng ký luồng dữ liệu mới rồi thêm traffic-stream làm tên luồng dữ liệu.
  4. Để thêm luồng vào biểu đồ ứng dụng, hãy nhấp vào Thêm luồng.

Thêm nút xử lý dữ liệu

  1. Để thêm nút mô hình đếm số người, hãy chọn mục phân tích số người trong mục Mô hình chuyên biệt của trình đơn bên.
  2. Giữ nguyên lựa chọn mặc định là Mọi ngườiXe.
  3. Thêm đường kẻ vào Đường kẻ giao nhau. Sử dụng công cụ đường nhiều điểm để vẽ các đường mà bạn cần phát hiện ô tô hoặc người rời đi hoặc đi vào.
  4. Vẽ các vùng hoạt động để đếm số người/xe trong vùng đó.
  5. Thêm chế độ cài đặt thời gian dừng để phát hiện tình trạng tắc nghẽn nếu bạn vẽ một vùng hoạt động.
  • (hiện tại, hệ thống không hỗ trợ đồng thời cả vùng đang hoạt động và đường kẻ vượt qua. Mỗi lần, bạn chỉ có thể sử dụng một tính năng.)

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

Thêm một nút lưu trữ dữ liệu

  1. Để thêm nút đích đến đầu ra (bộ nhớ), hãy chọn mục Kho lưu trữ nội dung nghe nhìn của Vertex AI Vision trong phần Trình kết nối của trình đơn bên.
  2. Trong trình đơn Kho lưu trữ nội dung nghe nhìn của Vertex AI Vision, hãy nhấp vào Kết nối kho lưu trữ.
  3. Trong trình đơn Kết nối kho hàng, hãy chọn Tạo kho hàng mới. Đặt tên cho kho lưu lượng truy cập là traffic-warehouse và để thời lượng TTL là 14 ngày.
  4. Nhấp vào nút Tạo để thêm kho hàng.

6. Kết nối đầu ra với bảng BigQuery

Khi bạn thêm một trình kết nối BigQuery vào ứng dụng Vertex AI Vision, tất cả đầu ra của mô hình ứng dụng được kết nối sẽ được chuyển vào bảng đích.

Bạn có thể tạo bảng BigQuery của riêng mình và chỉ định bảng đó khi thêm một trình kết nối BigQuery vào ứng dụng, hoặc để nền tảng ứng dụng Vertex AI Vision tự động tạo bảng.

Tự động tạo bảng

Nếu cho phép nền tảng ứng dụng Vertex AI Vision tự động tạo bảng, bạn có thể chỉ định lựa chọn này khi thêm nút trình kết nối BigQuery.

Các điều kiện sau đây về tập dữ liệu và bảng sẽ áp dụng nếu bạn muốn sử dụng tính năng tự động tạo bảng:

  • Tập dữ liệu: Tên tập dữ liệu được tạo tự động là visionai_dataset.
  • Bảng: Tên bảng được tạo tự động là visionai_dataset.APPLICATION_ID.
  • Xử lý lỗi:
  • Nếu có bảng cùng tên trong cùng một tập dữ liệu, thì sẽ không có quá trình tạo tự động nào diễn ra.
  1. Mở thẻ Ứng dụng trên trang tổng quan Vertex AI Vision. Chuyển đến thẻ Ứng dụng
  2. Chọn Xem ứng dụng bên cạnh tên ứng dụng của bạn trong danh sách.
  3. Trên trang trình tạo ứng dụng, hãy chọn BigQuery trong mục Trình kết nối.
  4. Để trống trường Đường dẫn BigQuery. ee0b67d4ab2263d.png
  5. Trong phần store metadata from:, chỉ chọn "phân tích mức độ sử dụng" và bỏ chọn luồng.

Biểu đồ ứng dụng cuối cùng sẽ có dạng như sau:

1787242465fd6da7.png

7. Triển khai ứng dụng để sử dụng

Sau khi bạn tạo ứng dụng toàn diện với tất cả các thành phần cần thiết, bước cuối cùng để sử dụng ứng dụng là triển khai ứng dụng đó.

  1. Mở thẻ Ứng dụng của trang tổng quan Vertex AI Vision. Chuyển đến thẻ Ứng dụng
  2. Chọn Xem biểu đồ bên cạnh ứng dụng lưu lượng truy cập trong danh sách.
  3. Trên trang trình tạo biểu đồ ứng dụng, hãy nhấp vào nút Triển khai.
  4. Trong hộp thoại xác nhận sau đây, hãy chọn Triển khai. Thao tác triển khai có thể mất vài phút để hoàn tất. Sau khi quá trình triển khai hoàn tất, dấu kiểm màu xanh lục sẽ xuất hiện bên cạnh các nút. ee78bbf00e5db898.png

8. Tìm nội dung video trong kho lưu trữ

Sau khi nhập dữ liệu video vào ứng dụng xử lý, bạn có thể xem dữ liệu video đã phân tích và tìm kiếm dữ liệu dựa trên thông tin phân tích về số người.

  1. Mở thẻ Kho hàng trên trang tổng quan Vertex AI Vision. Chuyển đến thẻ Kho hàng
  2. Tìm kho hàng traffic-warehouse trong danh sách, rồi nhấp vào Xem tài sản.
  3. Trong phần Số người hoặc Số lượng xe, hãy đặt giá trị Tối thiểu thành 1 và giá trị Tối đa thành 5.
  4. Để lọc dữ liệu video đã xử lý được lưu trữ trong Kho lưu trữ nội dung nghe nhìn của Vertex AI Vision, hãy nhấp vào Tìm kiếm.

e636361b19738c8d.png

Chế độ xem dữ liệu video được lưu trữ phù hợp với tiêu chí tìm kiếm trong bảng điều khiển Cloud. Nguồn video: Elizabeth Mavor trên Pixabay (áp dụng tiêu chí tìm kiếm).

9. Phân tích đầu ra trong bảng BigQuery

Chuyển đến BigQuery

Chọn tập dữ liệu: visionai_dataset

Chọn bảng: APPLICATION_ID của bạn (trong trường hợp này là traffic-app)

Nhấp vào biểu tượng ba dấu chấm ở bên phải tên bảng rồi nhấp vào Truy vấn

Viết truy vấn sau

Query1: Truy vấn để kiểm tra Số lượng xe vượt qua mỗi đường kẻ mỗi phút

abc.sql

- Get list of active marked lines for each timeframe
WITH line_array AS (
  SELECT
  t.ingestion_time AS ingestion_time,
  JSON_QUERY_ARRAY(t.annotation.stats["crossingLineCounts"]) AS lines
  FROM
  `PROJ_ID.visionai_dataset.APP_ID` AS t
),
- Flatten active lines to get individual entities details
flattened AS (
  SELECT
  line_array.ingestion_time,
  JSON_VALUE(line.annotation.id) as line_id,
  JSON_QUERY_ARRAY(line["positiveDirectionCounts"]) AS entities
  FROM line_array, unnest(line_array.lines) as line
 )
- Generate aggregate vehicle count per zone w.r.t time 
SELECT
  STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, line_id,
  SUM(INT64(entity["count"])) as vehicle_count
FROM
  flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, line_id

Query2: Truy vấn để kiểm tra Số lượng xe mỗi phút ở mỗi Khu vực

- Get list of active zones for each timeframe
WITH zone_array AS (
     SELECT
     t.ingestion_time AS ingestion_time,
     JSON_QUERY_ARRAY(t.annotation.stats["activeZoneCounts"]) AS zones
     FROM
     `PROJ_ID.visionai_dataset.APP_ID` AS t
),
- Flatten active zones to get individual entities details
flattened AS (
   SELECT zone_array.ingestion_time, JSON_VALUE(zone.annotation.id) as zone_id,
         JSON_QUERY_ARRAY(zone["counts"]) AS entities
   FROM zone_array, unnest(zone_array.zones) as zone
 )
- Generate aggregate vehicle count per zone w.r.t time 
SELECT 
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, 
zone_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, zone_id

Trong các truy vấn trên, bạn có thể thay đổi "Vehicle" thành "Person" để đếm số người.

Lớp học lập trình này sẽ chỉ cho thấy dữ liệu mẫu và hình ảnh trực quan cho Query1. Bạn có thể làm theo quy trình tương tự cho Query2.

e6fd891f3a46246.png

Nhấp vào Khám phá dữ liệu trong trình đơn bên phải rồi chọn khám phá bằng Looker Studio

9e737ddb4d0d25b6.png

Trong ngăn "dimension", hãy thêm thời gian và thay đổi cấu hình thời gian thành ngày giờ. Trong "phương diện phân tích", hãy thêm line_id. b5da9704ccd8db.png

Biểu đồ trên cho thấy số lượng phương tiện/người vượt qua mỗi đường kẻ mỗi phút.

Các thanh màu xanh dương đậm và xanh dương nhạt cho biết hai mã nhận dạng đường truyền khác nhau.

10. Xin chúc mừng

Xin chúc mừng, bạn đã hoàn thành bài thực hành!

Dọn dẹp

Để tránh bị tính phí vào tài khoản Google Cloud của bạn cho các tài nguyên được dùng trong hướng dẫn này, hãy xoá dự án chứa các tài nguyên đó hoặc giữ lại dự án rồi xoá từng tài nguyên.

Xoá dự án

Xoá từng tài nguyên

Tài nguyên

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial

Phản hồi

Nhấp vào đây để gửi ý kiến phản hồi

Bản khảo sát

Bạn sẽ sử dụng hướng dẫn này như thế nào?

Chỉ đọc Đọc và hoàn thành bài tập

Lớp học lập trình này có hữu ích không?

Rất hữu ích Khá hữu ích