Ứ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 Số liệu phân tích về tỷ lệ kín phòng của mô hình chuyên biệt được huấn luyện trước các tính năng sẵn có để ghi lại những điều sau:

  • Đếm số lượng phương tiện và người băng qua đường tại một đường nhất định.
  • Đếm số lượng phương tiện/người trên một khu vực cố định trên đường.
  • Phát hiện ùn tắc ở bất kỳ đoạn nào trên đườ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 tiếp
  • Cách tạo ứng dụng trong Vertex AI Vision
  • Các tính năng có trong Số liệu phân tích về tỷ lệ kín phòng và cách sử dụng
  • Cách triển khai ứng dụng
  • Cách tìm video trong kho lưu trữ 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 bảng điều khiển Google Cloud, trên trang bộ chọn dự án, hãy chọn hoặc tạo một dự án Google Cloud. Lưu ý: Nếu bạn không định giữ lại 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 những bước này, bạn có thể xoá dự án, đồng thời xoá tất cả tài nguyên được liên kết với 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 Google Cloud. 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 API

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

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Tạo tài khoản dịch vụ. Chuyển đến trang 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ụ theo 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 của bạn, hãy cấp(các) vai trò sau cho tài khoản dịch vụ của bạn: Vision AI > Người chỉnh sửa Vision AI, Compute Engine > Quản trị viên của phiên bản điện toán (thử nghiệm), Bộ nhớ > Trình xem đối tượng lưu trữ † . Trong danh sách Chọn vai trò, hãy chọn một vai trò. Để có 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ò. 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 này. Trong môi trường phát hành công khai, không được 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 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 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 được tải xuống máy tính của bạn.
  5. Nhấp vào Đóng.
  6. Cài đặtkhởi động 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 công cụ Phân tích về tỷ lệ kín phòng, bạn phải đăng ký một luồng để Ứ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 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ừ phiên bản máy ảo Compute Engine là tạo phiên bản máy ảo.

  1. Trong bảng điều khiển, hãy truy cập vào trang Phiên bản máy ảo. Chuyển đến các 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 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 Vùng 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 Create (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 để tạo SSH vào máy ảo trên trình duyệt. Sau đó, bạn có thể tải công cụ dòng lệnh vaictl xuống để nhập video vào sự kiện phát trực tiếp của mình.

Thiết lập kết nối SSH với máy ảo của bạn

  1. Trong bảng điều khiển, hãy truy cập vào trang Phiên bản máy ảo. Chuyển đến các phiên bản máy ảo
  2. Trong phần Connect (Kết nối) của dòng thực thể mà bạn đã tạo, hãy nhấp vào SSH (Kết nối). Thao tác này sẽ mở kết nối SSH trong 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 tra việc 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 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 tên luồng, hãy nhập "traffic-stream"
  4. Trong khu vực, hãy nhập "us-central1"
  5. Đăng ký lượt nhấp

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

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

  1. Trong cửa sổ SSH-in-browser cho máy ảo của bạn, hãy sao chép video mẫu bằng lệnh Googlebot cp sau. Thay thế biến sau:
  • NGUỒN: Vị trí của tệp video sẽ 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 sự kiện phát trực tiếp

  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 trên Google Cloud của bạn.
  • LOCATION_ID: ID 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í đám mây.
  • LOCAL_FILE: Tên tệp của tệp video cục bộ. Ví dụ: Street_vehicles_people.mp4.
  • – cờ 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 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 ở đầu và '&' ở cuối để tạo công việc trong 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 có quy trình truyền dẫn sự kiện phát 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 lưu lượng truy cập.

Chuyển đến thẻ Bảng tin

Chế độ xem 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 của video được nhập vào sự kiện phát trực tiếp trong bảng điều khiển Google Cloud. Ghi nhận quyền tác giả của video: Elizabeth Mavor trên Pixabay (đã thêm 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ông tin sau:

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

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

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

Để có thể điề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ẻ Ứ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 rồi 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. Nút truyền dẫn: Tài nguyên luồng nhập dữ liệu được gửi từ thực thể máy ảo Compute Engine mà bạn tạo.
  2. Nút xử lý: Mô hình phân tích số người lưu trú hoạt động dựa trên dữ liệu được 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 có chứa 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 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 ứng dụng quản lý lưu lượng truy cập, hãy chọn Xem biểu đồ. Thao tác này sẽ đưa bạn đến hình ảnh trực quan hoá biểu đồ của quy trình xử lý.

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

  1. Để thêm nút luồng đầu vào, chọn tùy chọn Luồng trong phần Trình kết nối của menu 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 về số người lưu trú, hãy chọn mục 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à NgườiXe.
  3. Thêm dòng tại giao cắt đường. Sử dụng công cụ đường đa điểm để vẽ các đường mà bạn cần phát hiện xe ô tô hoặc người đi vào.
  4. Vẽ các khu vực đang hoạt động để đếm số người/phương tiện trong khu vực đó.
  5. Thêm chế độ cài đặt cho thời gian ở để phát hiện tình trạng tắc nghẽn nếu bạn vẽ một vùng đang hoạt động.
  • (hiện khu vực hoạt động và đường giao nhau không được hỗ trợ đồng thời. Mỗi lần chỉ sử dụng một tính năng.)

3acdb6f1e8474e07.pngs ce63449d601995e9.png

194c54d2bbcf7e8a.png.

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

  1. Để thêm nút đích đến đầu ra (bộ nhớ lưu trữ), hãy chọn tuỳ chọn Kho 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 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àng, hãy chọn Tạo kho hàng 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 hàng.

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 của mình, thì tất cả dữ liệu đầu ra của mô hình ứng dụng đã kết nối sẽ được nhập 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 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ạo bảng tự động

Nếu để 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.

Tập dữ liệu và các điều kiện sau đây của bảng sẽ được áp dụng nếu bạn muốn 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à visibilityai_dataset.
  • Bảng: Tên bảng được tạo tự động là visibilityai_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ẻ Ứng dụng trên trang tổng quan Vertex AI Vision. Chuyển đến thẻ Ứng dụng
  2. Chọn View app (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 từ phần Trình kết nối.
  4. Để trống trường Đường dẫn BigQuery. ee0b67d4ab2263d.png
  5. Trong phần siêu dữ liệu cửa hàng từ: chỉ chọn "số liệu phân tích về tỷ lệ kín phòng" và bỏ chọn bảng tin.

Biểu đồ ứng dụng hoàn thiện sẽ có dạng như sau:

1787242465fd6da7.pngS

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

Sau khi bạn đã tạo ứng dụng hoàn chỉnh 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 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 quản lý 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 Deploy (Triển khai).
  4. Trong hộp thoại xác nhận sau đây, hãy chọn Triển khai. Hoạt động 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 kiế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 lưu trú.

  1. Mở thẻ Warehouses (Kho kho) trên trang tổng quan của Vertex AI Vision. Chuyển đến thẻ Kho hàng
  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 mục Số người hoặc Số lượng xe, hãy đặt giá trị Tối thiểu là 1 và giá trị Tối đa là 5.
  4. Để lọc dữ liệu video đã xử lý được lưu trữ trong Media Warehouse của Vertex AI Vision, hãy nhấp vào Tìm kiếm.

e636361b19738c8d.png

Chế độ xem dữ liệu video đã lưu trữ khớp với tiêu chí tìm kiếm trong bảng điều khiển Google Cloud. Ghi nhận quyề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 kết quả trong bảng BigQuery

Chuyển đến BigQuery

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

Chọn bảng: APP_ID của bạn (trong trường hợp này là ứng dụng lưu lượng truy cập)

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 băng qua từng dò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 ở từng 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 "Xe" thành "Person" để tính 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 Query1. Bạn có thể làm theo quy trình tương tự cho Query2.

e6fd891f3a46246.png

Nhấp vào mục 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.pngS

Trong "phương diện" ngăn 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" thêm line_id. b5da9704ccd8db.png

Biểu đồ trên cho thấy số phương tiện/người qua từng dòng mỗi phút.

Thanh màu xanh dương đậm và màu xanh dương nhạt biểu thị hai id dòng khác nhau.

10. Xin chúc mừng

Xin chúc mừng, bạn đã hoàn thành phòng thí nghiệm!

Dọn dẹp

Để tránh làm phát sinh chi phí cho các tài nguyên được sử dụng trong hướng dẫn này trong tài khoản Google Cloud của bạn, 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 riêng lẻ.

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 để cung cấp ý kiến phản hồi

Khảo sát

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

Chỉ có thể đọ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 hữu ích vừa phải