Ứ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 mục tiêu tạo ứng dụng Vertex AI Vision một cách toàn diện để theo dõi cảnh quay video lưu lượng truy cập theo thời gian thực. Chúng tôi sẽ sử dụng các tính năng tích hợp sẵn của mô hình Chuyên biệt Phân tích tỷ lệ kín phòng để thu thập những thông tin sau:

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

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

  • Cách thiết lập máy ảo để nhập 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 công cụ Phân tích tình trạng lấp đầy 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 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ừ dữ liệu đầ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 bộ chọn dự án, hãy chọn hoặc tạo dự án Google Cloud. Lưu ý: Nếu bạn không đị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, xoá tất cả tài nguyên liên kết với dự án. Chuyển đến bộ chọn dự án
  2. Đảm bảo bạn đã bật tính năng thanh toán cho dự án trên Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên dự án hay không.
  3. Bật Compute Engine và API AI thị giác. Bật API

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

  1. Trong Google Cloud Console, 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 tên. Bảng điều khiển Google Cloud sẽ điền vào trường Mã tài khoản dịch vụ dựa trên tên này. Trong trường 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ụ để 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 phát hành chính thức, đừ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 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 việc tạo tài khoản dịch vụ. Đừng đóng cửa sổ trình duyệt. Bạn 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 Google 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 Keys (Phím).
  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. 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 chạy Google Cloud CLI.

† Chỉ cần có vai trò nếu bạn sao chép tệp video mẫu từ một bộ chứa Cloud Storage.

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

Trước khi tạo một Ứng dụng trong tính năng Phân tích tình trạng sử dụng, 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 đối tượng máy ảo Compute Engine lưu trữ video, rồi gửi dữ liệu video phát trực tuyến đó từ máy ảo.

Tạo máy ảo Linux

Bước đầu tiên để gửi video từ một thực thể máy ảo Compute Engine là tạo thực thể 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 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 thực thể.
  4. Chỉ định Name (Tên) cho máy ảo. Để 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 Khu vực cho máy ảo này. Compute Engine sẽ sắp xếp ngẫu nhiên danh sách các vùng trong từng khu vực để khuyến khích 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 cách này, hãy xem bài viết Tạo và khởi động một máy ảo.
  7. Để tạo và khởi động máy ảo, 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 dẫ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 phiên bản máy ảo
  2. Trong phần Kết nối của dòng thực thể 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. Tuỳ 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 (Trình duyệt SSH), 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ử quá trình cài đặt bằng cách chạy lệnh sau:
vaictl --help

4. Truyền dẫn tệp video để phát trực tuyến

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

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

Đăng ký một sự kiện phát trực tiếp mới

  1. Thẻ Lượt nhấp vào 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 vùng, hãy nhập "us-central1"
  5. Nhấp vào đăng ký

Quá trình đăng ký sẽ mất vài phút.

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

  1. Trong cửa sổ SSH-in-browser (SSH trong trình duyệt) cho máy ảo, hãy sao chép một video mẫu bằng lệnh gsutil cp sau đây. Thay thế biến sau:
  • NGUỒN: Vị trí của tệp video cần sử dụng. Bạn có thể sử dụng nguồn tệp video 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 cộ, nguồn)
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

Phát trực tuyến video từ máy ảo và nhập dữ liệu vào luồng

  1. Để gửi tệp video trên máy 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 thực hiện các thay thế biến sau:
  • PROJECT_ID: Mã dự án của bạn trên Google Cloud.
  • LOCATION_ID: Mã nhận dạng vị trí của bạn. Ví dụ: us-central1. Để biết thêm thông tin, hãy xem phần Vị trí trên đám mây.
  • LOCAL_FILE: Tên tệp của tệp video cục bộ. Ví dụ: street_vehicles_people.mp4.
  • –cờ vòng lặp: 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 tệp video đến một luồng. Nếu bạn sử 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 công việc trong nền để 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 ở đầu và "&' ở cuối để biến thành công việc ở chế độ nền)
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ắt đầu thao tác nhập vaictl đến khi video xuất hiện trong trang tổng quan.

Sau khi quá trình truyền trực tuyến bắt đầu, bạn có thể thấy 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 lưu lượng truy cập.

Chuyển đến thẻ Luồng

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

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. Ứng dụng có thể được coi là một quy trình tự động kết nối những thành phần sau:

  • Quá trình 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ô hình AI (Trí tuệ nhân tạo) (Khoa học 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 kho phương tiện.

Trong Google Cloud Console, ứng dụng được biểu thị dưới dạng biểu đồ.

Tạo ứng dụng trống

Trước khi có thể điền sẵn 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 bảng điều khiển Google Cloud.

  1. Truy cập vào bảng điều khiển của Google Cloud.
  2. Mở thẻ Applications (Ứ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 thêm 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 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. Điểm truyền dẫn: Tài nguyên luồng truyền dẫn dữ liệu được gửi từ một thực thể máy ảo Compute Engine mà bạn tạo.
  2. Processing node (Điểm xử lý): Mô hình phân tích về tình trạng sử dụng hoạt động trên dữ liệu đã nhập.
  3. Nút bộ nhớ: Kho 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. 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 suy luận của các mô hình AI.

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

  1. Mở thẻ Applications (Ứ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 vào ứng dụng, hãy chọn Xem biểu đồ. Thao tác này sẽ đưa bạn đến hình ảnh biểu đồ của quy trình xử lý.

Thêm nút truyền dẫn dữ liệu

  1. Để thêm nút luồng đầu vào, hãy chọn tuỳ chọn Luồng trong phần Đầu nối của trình đơn bên.
  2. Trong phần Nguồn của trình đơn Luồng mở ra, hãy chọn Thêm luồng.
  3. Trong trình đơn Thêm luồng, hãy chọn Đăng ký luồng mới rồi thêm luồng lưu lượng truy cập làm tên luồng.
  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 số lượng người lưu trú, hãy chọn tuỳ chọn số liệu phân tích về số người lưu trú trong mục Mô hình chuyên biệt của trình đơn bên.
  2. Giữ nguyên các lựa chọn mặc định là Mọi ngườiXe cộ.
  3. Thêm Đường trong tính năng Giao nhau của đường. Sử dụng công cụ đường nhiều điểm để vẽ các đường mà bạn cần phát hiện xe hoặc người ra vào.
  4. Vẽ các vùng hoạt động để đếm người/xe trong vùng đó.
  5. Thêm chế độ cài đặt thời gian lưu trú để 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 không hỗ trợ đồng thời cả vùng hoạt động và đường vạch. 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 nút lưu trữ dữ liệu

  1. Để thêm nút đích đầu ra (bộ nhớ), hãy chọn tuỳ chọn Kho phương tiện của Vertex AI Vision trong phần Có thể kết nối của trình đơn bên.
  2. Trong trình đơn Kho phương tiện của Vertex AI Vision, hãy nhấp vào Kết nối kho hàng.
  3. Trong trình đơn Kết nối kho, hãy chọn Tạo kho mới. Đặt tên cho kho giao thông-kho hàng và để thời hạn TTL là 14 ngày.
  4. Nhấp vào nút Tạo để thêm kho.

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

Khi bạn thêm 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 nhập vào bảng mục tiêu.

Bạn có thể tạo bảng BigQuery của riêng mình và chỉ định bảng đó khi thêm 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 tuỳ 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ạo bảng tự độ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 bảng có cùng tên trong cùng một tập dữ liệu đã tồn tại, thì quá trình tạo tự động sẽ không diễn ra.
  1. Mở thẻ Applications (Ứ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 lưu trữ siêu dữ liệu từ:, chỉ chọn "Analytics về tình trạng sử dụng" và bỏ đánh dấu luồng.

Biểu đồ ứng dụng hoàn thiện 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ẻ Applications (Ứng dụng) trên 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 traffic-app 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 Deploy (Triển khai).
  4. Trong hộp thoại xác nhận sau, hãy chọn Triển khai. Quá trình triển khai có thể mất vài phút để hoàn tất. Sau khi triển khai xong, 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ề tình trạng sử dụng.

  1. Mở thẻ Kho của trang tổng quan Vertex AI Vision. Chuyển đến thẻ Kho
  2. Tìm kho lưu lượng truy cập 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ố 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 phương tiệ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 Google Cloud Console. Tên tác giả trong 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

Truy vấn 1: Truy vấn để kiểm tra Số lượng xe vượt qua mỗi làn đường 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

Truy vấn 2: Truy vấn để kiểm tra Số lượng xe mỗi phút trong từng Vùng

—- 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 "Xe" thành "Người" để đếm Người.

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

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 "phương diện", 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 biết số lượng xe/người băng qua mỗi đường mỗi phút.

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

10. Xin chúc mừng

Xin chúc mừng, bạn đã hoàn thành lớp học lập trình!

Dọn dẹp

Để tránh bị tính phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được sử 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 và 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ài khảo sát

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

Chỉ đọc qua Đọ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 Có phần hữu ích