Azure AI 102 - Ngày 4
Table of contents
- Computer Vision nâng cao: Custom Vision, huấn luyện mô hình riêng
- 1. Giới thiệu về Computer Vision
- 2. Custom Vision
- 2.1. Các tính năng chính của Custom Vision
- 2.2. Các bước sử dụng Custom Vision
- 2.3. Ví dụ minh họa
- 3. Huấn luyện Mô hình Riêng
- 3.1. Các bước huấn luyện mô hình riêng
- 3.2. Ví dụ minh họa
- 4. Các Thách Thức Tiềm Ẩn
- 4.1. Chất lượng dữ liệu
- 4.2. Xử lý hình ảnh thực tế
- 4.3. Tính toán và hiệu năng
- 5. Best practices
- Thực hành với Azure AI Vision: Phân tích hình ảnh, trích xuất văn bản, phát hiện vật thể.
- Bài tập
- Bài tập thêm: Tìm hiểu về Security cho Azure AI services
- 1. Xác thực và Ủy quyền (Authentication and Authorization)
- 2. Bảo mật Mạng (Network Security)
- 3. Bảo mật Dữ liệu (Data Security)
- 4. Bảo mật Ứng dụng (Application Security)
- 5. Quản lý và Giám sát (Management and Monitoring)
- 6. Đảm bảo Tuân thủ (Compliance Assurance) và các mối đe dọa AI
- 7. Công cụ bảo mật nâng cao
- Tài liệu tham khảo:
- Bài tập thêm: Tìm hiểu về monitoring Azure AI services
- Bài tập thêm: Deploy Azure AI services trong containers
- 1. Giới Thiệu về Dịch Vụ AI của Azure trong Container
- 2. Các Dịch Vụ AI của Azure Có Sẵn trong Container
- 3. Hiểu Về Container Dịch Vụ AI của Azure
- 4. Kịch Bản Triển Khai và Các Trường Hợp Sử Dụng
- 5. Yêu Cầu Kỹ Thuật và Thiết Lập
- 6. Bảo Mật và Tuân Thủ
- 7. Giám Sát và Quản Lý
- 8. Thực Hành: Triển Khai Container Language Dectection
- 9. Triển Khai Container Bằng Terraform trên Azure container
- 10. Nghiên Cứu Tình Huống và Ứng Dụng Thực Tiễn
- Tài Nguyên Thêm
- Bài tập thêm: Video Indexer
- 1. Giới thiệu về Video Indexer
- 2. Các Tính Năng Chính của Video Indexer
- a. Nhận Diện Khuôn Mặt và Đối Tượng
- b. Nhận Diện Giọng Nói và Tự Động Chuyển Đổi Giọng Nói Thành Văn Bản
- c. Phân Tích Cảnh và Hành Động
- d. Dịch Tự Động và Phụ Đề
- 3. Cách Hoạt Động của Video Indexer
- 4. Các Ứng Dụng Thực Tế của Video Indexer
- a. Truyền Thông và Giải Trí
- b. Giáo Dục và Đào Tạo
- c. Bảo Mật và Giám Sát
Ngày 4:
Sáng: Tiếp tục Computer Vision nâng cao: Custom Vision, huấn luyện mô hình riêng.
Chiều: Thực hành Custom Vision: Tạo dự án, gắn nhãn dữ liệu, huấn luyện và đánh giá mô hình.
Tối: Ôn tập và làm bài tập:
Tạo một mô hình Custom Vision nhận diện chữ số viết tay.
Giải thích các chỉ số đánh giá mô hình (Precision, Recall, mAP).
Bài tập thêm: Deploy Cognitive AI service bằng Container
Tìm hiểu thêm: Cognitive security & Video Indexer
Computer Vision nâng cao: Custom Vision, huấn luyện mô hình riêng
1. Giới thiệu về Computer Vision
Computer Vision là một lĩnh vực của trí tuệ nhân tạo (AI) tập trung vào việc giúp máy tính hiểu và diễn giải thông tin từ hình ảnh và video. Ứng dụng của Computer Vision bao gồm nhận diện khuôn mặt, phân loại hình ảnh, phát hiện đối tượng, và nhiều hơn nữa.
2. Custom Vision
Custom Vision là một dịch vụ thuộc Azure Cognitive Services của Microsoft, cho phép bạn dễ dàng tạo, huấn luyện và triển khai các mô hình nhận diện hình ảnh tùy chỉnh mà không cần nhiều kiến thức chuyên sâu về AI hay machine learning.
2.1. Các tính năng chính của Custom Vision
Tải dữ liệu và huấn luyện: Bạn có thể tải lên các tập dữ liệu hình ảnh của riêng mình để huấn luyện mô hình.
Gắn nhãn dữ liệu: Custom Vision cung cấp giao diện người dùng để bạn gắn nhãn các hình ảnh, giúp mô hình học được những gì cần nhận diện.
Huấn luyện và đánh giá: Sau khi gắn nhãn dữ liệu, bạn có thể huấn luyện mô hình và sử dụng các công cụ đánh giá để kiểm tra hiệu suất của mô hình.
Triển khai mô hình: Custom Vision hỗ trợ triển khai mô hình dưới dạng dịch vụ RESTful hoặc xuất mô hình để sử dụng trong các ứng dụng di động hoặc nhúng.
2.2. Các bước sử dụng Custom Vision
Tạo dự án: Đăng nhập vào Azure portal, tạo một dự án Custom Vision trong Custom Vision Studio, chọn loại dự án (phân loại hình ảnh hoặc phát hiện đối tượng).
Tải lên và gắn nhãn hình ảnh: Tải lên các hình ảnh và gắn nhãn chúng theo các lớp mà bạn muốn mô hình học.
Huấn luyện mô hình: Sau khi gắn nhãn, bắt đầu huấn luyện mô hình. Custom Vision sẽ tự động chọn các tham số huấn luyện tốt nhất.
Đánh giá mô hình: Sử dụng tập dữ liệu kiểm tra để đánh giá độ chính xác và hiệu suất của mô hình. Custom Vision cung cấp các chỉ số như độ chính xác, độ nhạy và độ đặc hiệu.
Triển khai mô hình: Khi mô hình đạt được độ chính xác mong muốn, bạn có thể triển khai mô hình và sử dụng nó trong các ứng dụng của mình.
2.3. Ví dụ minh họa
Ví dụ 1: Nhận diện sản phẩm trong siêu thị
Một chuỗi siêu thị muốn tạo ra một ứng dụng nhận diện sản phẩm để giúp khách hàng tìm kiếm thông tin về sản phẩm chỉ bằng cách chụp ảnh. Sử dụng Custom Vision, họ tải lên các hình ảnh của sản phẩm từ các góc độ khác nhau và gắn nhãn chúng theo từng loại sản phẩm. Sau khi huấn luyện mô hình, ứng dụng có thể nhận diện chính xác các sản phẩm khi khách hàng chụp ảnh và cung cấp thông tin chi tiết về sản phẩm đó.
Ví dụ 2: Phát hiện bệnh trên lá cây
Một công ty nông nghiệp muốn phát hiện sớm các bệnh trên cây trồng. Họ thu thập hình ảnh của lá cây bị bệnh và khỏe mạnh, sau đó sử dụng Custom Vision để huấn luyện mô hình phân loại các loại bệnh khác nhau. Khi triển khai mô hình, các nông dân có thể chụp ảnh lá cây và hệ thống sẽ thông báo nếu cây bị bệnh và gợi ý cách xử lý.
3. Huấn luyện Mô hình Riêng
Đối với các ứng dụng phức tạp hơn hoặc yêu cầu đặc thù, bạn có thể muốn huấn luyện mô hình của riêng mình từ đầu hoặc tinh chỉnh các mô hình có sẵn bằng cách sử dụng các framework như TensorFlow, PyTorch, hoặc Keras.
3.1. Các bước huấn luyện mô hình riêng
Thu thập và tiền xử lý dữ liệu: Tập hợp một tập dữ liệu đủ lớn và đa dạng, sau đó tiền xử lý dữ liệu bao gồm việc chuẩn hóa, gắn nhãn, và chia tập dữ liệu thành tập huấn luyện, tập kiểm tra và tập đánh giá.
Xây dựng mô hình: Chọn kiến trúc mạng nơ-ron phù hợp với bài toán của bạn. Các kiến trúc phổ biến bao gồm Convolutional Neural Networks (CNN), ResNet, Inception, và MobileNet.
Huấn luyện mô hình: Sử dụng tập huấn luyện để huấn luyện mô hình, chọn các tham số như learning rate, số epoch, và batch size.
Đánh giá và tinh chỉnh mô hình: Sử dụng tập kiểm tra để đánh giá hiệu suất của mô hình và điều chỉnh các tham số, cấu trúc mạng để cải thiện kết quả.
Triển khai mô hình: Sau khi huấn luyện và đánh giá, mô hình sẵn sàng để triển khai vào môi trường thực tế. Bạn có thể sử dụng các dịch vụ đám mây như Azure Machine Learning hoặc TensorFlow Serving để triển khai mô hình.
3.2. Ví dụ minh họa
Ví dụ 1: Phân loại ảnh mèo và chó
Một dự án đơn giản nhưng phổ biến là phân loại ảnh mèo và chó. Bạn thu thập hàng ngàn hình ảnh của mèo và chó từ các nguồn khác nhau, sau đó sử dụng một kiến trúc CNN để huấn luyện mô hình. Sau khi huấn luyện, mô hình có thể phân loại chính xác hình ảnh mới là mèo hay chó với độ chính xác cao.
Ví dụ 2: Nhận diện biển số xe
Một công ty phát triển hệ thống quản lý bãi đỗ xe thông minh muốn tự động nhận diện biển số xe. Họ thu thập hình ảnh biển số từ nhiều điều kiện ánh sáng và góc chụp khác nhau, sau đó sử dụng mạng YOLO (You Only Look Once) để huấn luyện mô hình phát hiện và nhận diện ký tự trên biển số. Sau khi triển khai, hệ thống có thể tự động nhận diện và ghi lại biển số của các xe vào bãi.
4. Các Thách Thức Tiềm Ẩn
4.1. Chất lượng dữ liệu
Chất lượng dữ liệu là yếu tố then chốt để huấn luyện mô hình thành công. Dữ liệu không đủ hoặc không đa dạng có thể dẫn đến mô hình không tổng quát hóa tốt, gây ra các lỗi khi gặp dữ liệu mới. Ví dụ, một mô hình phân loại mèo và chó có thể gặp khó khăn nếu chỉ được huấn luyện trên ảnh của các giống chó và mèo phổ biến mà không bao gồm các giống ít gặp hơn.
4.2. Xử lý hình ảnh thực tế
Các mô hình có thể hoạt động tốt trên dữ liệu huấn luyện nhưng gặp khó khăn khi triển khai thực tế do các yếu tố như ánh sáng, góc chụp, và môi trường xung quanh khác biệt so với dữ liệu huấn luyện. Ví dụ, một hệ thống nhận diện sản phẩm trong siêu thị có thể không hoạt động tốt trong các điều kiện ánh sáng yếu hoặc khi sản phẩm bị che khuất.
4.3. Tính toán và hiệu năng
Huấn luyện các mô hình deep learning đòi hỏi nhiều tài nguyên tính toán và thời gian. Việc tối ưu hóa mô hình để đạt được sự cân bằng giữa hiệu năng và độ chính xác là một thách thức. Ví dụ, một mô hình nhận diện khuôn mặt sử dụng trong ứng dụng di động cần phải đủ nhẹ để chạy mượt mà trên các thiết bị với tài nguyên hạn chế.
5. Best practices
Gắn nhãn chính xác: Đảm bảo dữ liệu huấn luyện được gắn nhãn chính xác và đầy đủ.
Sử dụng tập dữ liệu đa dạng: Một tập dữ liệu đa dạng giúp mô hình học được nhiều tình huống khác nhau và cải thiện khả năng tổng quát hóa.
Kiểm tra mô hình kỹ lưỡng: Luôn sử dụng tập kiểm tra và đánh giá để kiểm tra độ chính xác và khả năng tổng quát hóa của mô hình.
Theo dõi và cải tiến mô hình: Sau khi triển khai, tiếp tục theo dõi hiệu suất của mô hình và cập nhật khi cần thiết để đảm bảo chất lượng.
Thực hành với Azure AI Vision: Phân tích hình ảnh, trích xuất văn bản, phát hiện vật thể.
1. Giới thiệu về Custom Vision
Custom Vision là một dịch vụ thuộc Azure Cognitive Services của Microsoft, cho phép bạn tạo, huấn luyện và triển khai các mô hình nhận diện hình ảnh tùy chỉnh. Trong bài này, chúng ta sẽ tìm hiểu cách tạo dự án, gắn nhãn dữ liệu, huấn luyện và đánh giá mô hình sử dụng Python và Terraform.
2. Các bước chi tiết
2.1. Cài đặt và cấu hình môi trường
pip install azure-cognitiveservices-vision-customvision
2.2. Tạo Dự án Custom Vision
Sử dụng Terraform để thiết lập Azure Custom Vision
Tạo file cấu hình Terraform (
main.tf
):provider "azurerm" { features {} } resource "azurerm_resource_group" "example" { name = "custom-vision-example" location = "East US" } resource "azurerm_cognitive_account" "example_cv_training_account" { name = "examplecvtrainaccount" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location kind = "CustomVision.Training" sku_name = "F0" } resource "azurerm_cognitive_account" "example_cv_prediction_account" { name = "examplecvpredictaccount" resource_group_name = azurerm_resource_group.example.name location = azurerm_resource_group.example.location kind = "CustomVision.Prediction" sku_name = "F0" }
Triển khai hạ tầng bằng Terraform:
terraform init terraform apply
Sử dụng Python để tương tác với Custom Vision
.env (project id sẽ điền sau khi tạo được project)
TrainingEndpoint=https://eastus.api.cognitive.microsoft.com/
TrainingKey=<TrainingKey>
PredictionKey=<PredictionKey>
PredictionResourceId=/subscriptions/xxxfxxde-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/custom-vision-example/providers/Microsoft.CognitiveServices/accounts/examplecvpredictaccount
ProjectId=<ProjectId>
Tạo project
import time
from dotenv import load_dotenv
import os
from azure.cognitiveservices.vision.customvision.training import CustomVisionTrainingClient
from msrest.authentication import ApiKeyCredentials
# Load environment variables from .env file
load_dotenv()
# Get values from environment variables
ENDPOINT = os.getenv('TrainingEndpoint')
training_key = os.getenv('TrainingKey')
prediction_key = os.getenv('PredictionKey')
prediction_resource_id = os.getenv('PredictionResourceId')
credentials = ApiKeyCredentials(in_headers={"Training-key": training_key})
trainer = CustomVisionTrainingClient(ENDPOINT, credentials)
# Get the list of projects
projects = trainer.get_projects()
print(projects)
# Create a new project
project = trainer.create_project("My Custom Vision Project")
# Create tags in the new project
cat_tag = trainer.create_tag(project.id, "Cat")
dog_tag = trainer.create_tag(project.id, "Dog")
print(projects[0].id)
Giải thích code:
Import các thư viện cần thiết:
import time
from dotenv import load_dotenv
import os
from azure.cognitiveservices.vision.customvision.training import CustomVisionTrainingClient
from msrest.authentication import ApiKeyCredentials
time
: Thư viện chuẩn cho các chức năng liên quan đến thời gian.load_dotenv
: Hàm từ góidotenv
dùng để tải các biến môi trường từ tệp.env
.os
: Thư viện chuẩn cho việc tương tác với hệ điều hành.CustomVisionTrainingClient
vàApiKeyCredentials
: Các lớp từ các moduleazure.cognitiveservices.vision.customvision.training
vàmsrest.authentication
, tương ứng, để tương tác với dịch vụ Custom Vision của Azure.
Tải các biến môi trường từ tệp .env
:
load_dotenv()
Hàm này tải các biến môi trường từ tệp tên là .env
nằm trong thư mục gốc của dự án. Điều này hữu ích để giữ thông tin nhạy cảm như API keys không xuất hiện trong mã nguồn.
Lấy giá trị từ các biến môi trường:
ENDPOINT = os.getenv('TrainingEndpoint')
training_key = os.getenv('TrainingKey')
prediction_key = os.getenv('PredictionKey')
prediction_resource_id = os.getenv('PredictionResourceId')
os.getenv('VARIABLE_NAME')
lấy giá trị của biến môi trườngVARIABLE_NAME
. Nếu biến không tồn tại, nó sẽ trả vềNone
.
Xác thực và tạo một training client:
credentials = ApiKeyCredentials(in_headers={"Training-key": training_key})
trainer = CustomVisionTrainingClient(ENDPOINT, credentials)
ApiKeyCredentials
: Lớp này được sử dụng để xử lý xác thực bằng cách sử dụng training key.CustomVisionTrainingClient
: Client này được sử dụng để tương tác với Custom Vision training API bằng cách sử dụng endpoint và credentials được cung cấp.
Tạo một project mới:
project = trainer.create_project("My Custom Vision Project")
create_project("My Custom Vision Project")
: Phương thức này tạo một Custom Vision project mới với tên "My Custom Vision Project".
Tạo các tags trong project mới:
cat_tag = trainer.create_tag(project.id, "Cat")
dog_tag = trainer.create_tag(project.id, "Dog")
create_tag(project.id, "Cat")
: Phương thức này tạo một tag mới tên "Cat" trong project được xác định bởiproject.id
.create_tag(project.id, "Dog")
: Tương tự, tạo một tag tên "Dog".
upload_data.py
from azure.cognitiveservices.vision.customvision.training import CustomVisionTrainingClient
from msrest.authentication import ApiKeyCredentials
import os
from dotenv import load_dotenv
def upload_images(trainer, project_id, base_image_url, tag_name):
tag = trainer.create_tag(project_id, tag_name)
for image_path in os.listdir(base_image_url):
with open(os.path.join(base_image_url, image_path), "rb") as image_contents:
trainer.create_images_from_data(project_id, image_contents.read(), [tag.id])
# Load environment variables from .env file
load_dotenv()
# Get values from environment variables
ENDPOINT = os.getenv('TrainingEndpoint')
training_key = os.getenv('TrainingKey')
project_id = os.getenv('ProjectId')
base_image_url = "images"
training_credentials = ApiKeyCredentials(in_headers={"Training-key": training_key})
trainer = CustomVisionTrainingClient(ENDPOINT, training_credentials)
upload_images(trainer, project_id, os.path.join(base_image_url, "cats"), "cats")
upload_images(trainer, project_id, os.path.join(base_image_url, "dogs"), "dogs")
Đây là một đoạn mã Python sử dụng dịch vụ Azure Custom Vision để tải lên các hình ảnh cho một dự án nhận dạng hình ảnh.
Import các thư viện cần thiết: Đầu tiên, mã này import các thư viện cần thiết, bao gồm
CustomVisionTrainingClient
từazure.cognitiveservices.vision.customvision.training
để tương tác với dịch vụ Azure Custom Vision,ApiKeyCredentials
từmsrest.authentication
để xác thực,os
để làm việc với hệ thống tệp, vàdotenv
để tải các biến môi trường từ tệp.env
.Hàm upload_images: Hàm này tạo một thẻ mới trong dự án với tên được chỉ định (
tag_name
), sau đó duyệt qua tất cả các hình ảnh trong thư mục được chỉ định (base_image_url
) và tải chúng lên dự án với thẻ đã tạo.Tải các biến môi trường: Mã này sử dụng
load_dotenv()
để tải các biến môi trường từ tệp.env
. Các biến này bao gồmTrainingEndpoint
,TrainingKey
, vàProjectId
.Khởi tạo client: Mã này tạo một đối tượng
ApiKeyCredentials
vớiTrainingKey
và sau đó sử dụng nó để khởi tạo một đối tượngCustomVisionTrainingClient
vớiENDPOINT
.Tải lên hình ảnh: Cuối cùng, mã này gọi hàm
upload_images
hai lần, một lần cho mỗi thư mục hình ảnh ("cats" và "dogs"), với mỗi lần gọi tạo một thẻ mới với tên tương ứng và tải lên tất cả các hình ảnh trong thư mục đó.
Training model
training_model.py
import time
from dotenv import load_dotenv
import os
from azure.cognitiveservices.vision.customvision.training import CustomVisionTrainingClient
from msrest.authentication import ApiKeyCredentials
# Load environment variables from .env file
load_dotenv()
# Get values from environment variables
ENDPOINT = os.getenv('TrainingEndpoint')
training_key = os.getenv('TrainingKey')
prediction_key = os.getenv('PredictionKey')
prediction_resource_id = os.getenv('PredictionResourceId')
project_id = os.getenv('ProjectId') # Get project id from environment variable
credentials = ApiKeyCredentials(in_headers={"Training-key": training_key})
trainer = CustomVisionTrainingClient(ENDPOINT, credentials)
# Get the project
project = trainer.get_project(project_id)
# Get the tags in the project
tags = trainer.get_tags(project_id)
cat_tag = next(tag for tag in tags if tag.name == "Cat")
dog_tag = next(tag for tag in tags if tag.name == "Dog")
# Add images to the tags, note that at least 15 images are needed for each tag
for image_path in os.listdir("images/cats"):
with open(os.path.join("images/cats", image_path), "rb") as image_contents:
trainer.create_images_from_data(project.id, image_contents.read(), [cat_tag.id])
for image_path in os.listdir("images/dogs"):
with open(os.path.join("images/dogs", image_path), "rb") as image_contents:
trainer.create_images_from_data(project.id, image_contents.read(), [dog_tag.id])
print("Training...")
iteration = trainer.train_project(project.id)
while iteration.status != "Completed":
iteration = trainer.get_iteration(project.id, iteration.id)
print(f"Training status: {iteration.status}")
time.sleep(10)
# Set this iteration as the default
trainer.update_iteration(project.id, iteration.id, name=iteration.name, is_default=True)
print(f"Training completed. Iteration id: {iteration.id}")
Đây là một đoạn mã Python sử dụng dịch vụ Azure Custom Vision để tải lên các hình ảnh cho một dự án nhận dạng hình ảnh và sau đó huấn luyện một mô hình phân loại hình ảnh.
Import các thư viện cần thiết: Đầu tiên, mã này import các thư viện cần thiết, bao gồm
CustomVisionTrainingClient
từazure.cognitiveservices.vision.customvision.training
để tương tác với dịch vụ Azure Custom Vision,ApiKeyCredentials
từmsrest.authentication
để xác thực,os
để làm việc với hệ thống tệp, vàdotenv
để tải các biến môi trường từ tệp.env
.Tải các biến môi trường: Mã này sử dụng
load_dotenv()
để tải các biến môi trường từ tệp.env
. Các biến này bao gồmTrainingEndpoint
,TrainingKey
,PredictionKey
,PredictionResourceId
, vàProjectId
.Khởi tạo client: Mã này tạo một đối tượng
ApiKeyCredentials
vớiTrainingKey
và sau đó sử dụng nó để khởi tạo một đối tượngCustomVisionTrainingClient
vớiENDPOINT
.Lấy dự án và các thẻ: Mã này lấy thông tin về dự án và các thẻ trong dự án.
Tải lên hình ảnh: Mã này duyệt qua tất cả các hình ảnh trong thư mục "images/cats" và "images/dogs", mở mỗi hình ảnh và tải nó lên dự án với thẻ tương ứng.
Huấn luyện mô hình: Mã này gọi
trainer.train_project(project.id)
để bắt đầu quá trình huấn luyện. Nó sau đó kiểm tra trạng thái của quá trình huấn luyện mỗi 10 giây cho đến khi hoàn thành.Đặt vòng lặp huấn luyện làm mặc định: Cuối cùng, mã này đặt vòng lặp huấn luyện đã hoàn thành làm mặc định cho dự án, điều này có nghĩa là nó sẽ được sử dụng cho tất cả các dự đoán trong tương lai.
Publish project
publish_project.py
from dotenv import load_dotenv
import os
from azure.cognitiveservices.vision.customvision.training import CustomVisionTrainingClient
from msrest.authentication import ApiKeyCredentials
# Load environment variables from .env file
load_dotenv()
# Get values from environment variables
ENDPOINT = os.getenv('TrainingEndpoint')
training_key = os.getenv('TrainingKey')
project_id = os.getenv('ProjectId') # Get project id from environment variable
prediction_resource_id = os.getenv('PredictionResourceId') # Get prediction resource id from environment variable
credentials = ApiKeyCredentials(in_headers={"Training-key": training_key})
trainer = CustomVisionTrainingClient(ENDPOINT, credentials)
# Get the project
project = trainer.get_project(project_id)
# Get the latest iteration of the project
iterations = trainer.get_iterations(project_id)
latest_iteration = iterations[-1]
# Publish the latest iteration
publish_iteration_name = "catdog-identifier" # Replace with your desired publish iteration name
trainer.publish_iteration(project_id, latest_iteration.id, publish_iteration_name, prediction_resource_id)
print(f"Published iteration: {latest_iteration.id}")
Đây là một đoạn mã Python sử dụng dịch vụ Azure Custom Vision để xuất bản phiên bản huấn luyện mới nhất của một dự án nhận dạng hình ảnh.
Import các thư viện cần thiết: Đầu tiên, mã này import các thư viện cần thiết, bao gồm
CustomVisionTrainingClient
từazure.cognitiveservices.vision.customvision.training
để tương tác với dịch vụ Azure Custom Vision,ApiKeyCredentials
từmsrest.authentication
để xác thực, vàdotenv
để tải các biến môi trường từ tệp.env
.Tải các biến môi trường: Mã này sử dụng
load_dotenv()
để tải các biến môi trường từ tệp.env
. Các biến này bao gồmTrainingEndpoint
,TrainingKey
,ProjectId
, vàPredictionResourceId
.Khởi tạo client: Mã này tạo một đối tượng
ApiKeyCredentials
vớiTrainingKey
và sau đó sử dụng nó để khởi tạo một đối tượngCustomVisionTrainingClient
vớiENDPOINT
.Lấy dự án và phiên bản huấn luyện mới nhất: Mã này lấy thông tin về dự án và danh sách các phiên bản huấn luyện của dự án. Nó sau đó lấy phiên bản huấn luyện mới nhất từ danh sách này.
Xuất bản phiên bản huấn luyện mới nhất: Mã này gọi
trainer.publish_iteration()
để xuất bản phiên bản huấn luyện mới nhất với tên xuất bản được chỉ định (publish_iteration_name
) và ID tài nguyên dự đoán (prediction_resource_id
).In ID của phiên bản huấn luyện đã xuất bản: Cuối cùng, mã này in ID của phiên bản huấn luyện đã được xuất bản.
Test model
test_model.py
from azure.cognitiveservices.vision.customvision.training import CustomVisionTrainingClient
from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient
from msrest.authentication import ApiKeyCredentials
from dotenv import load_dotenv
import os
# Load environment variables from .env file
load_dotenv()
# Get values from environment variables
ENDPOINT = os.getenv('TrainingEndpoint')
training_key = os.getenv('TrainingKey')
prediction_key = os.getenv('PredictionKey')
project_id = os.getenv('ProjectId') # Get project id from environment variable
print(f"Endpoint: {ENDPOINT}")
# Create credentials and clients
training_credentials = ApiKeyCredentials(in_headers={"Training-key": training_key})
trainer = CustomVisionTrainingClient(ENDPOINT, training_credentials)
prediction_credentials = ApiKeyCredentials(in_headers={"Prediction-key": prediction_key})
predictor = CustomVisionPredictionClient(ENDPOINT, prediction_credentials)
try:
# Get the latest published iteration of the project
iterations = trainer.get_iterations(project_id)
published_iterations = [i for i in iterations if i.publish_name is not None]
if not published_iterations:
raise Exception("No published iterations found")
# Sort the published iterations by creation time in descending order
published_iterations.sort(key=lambda i: i.created, reverse=True)
# The latest iteration is the first one in the sorted list
latest_iteration = published_iterations[0]
print(f"Latest iteration: {latest_iteration.name} (ID: {latest_iteration.id}, Publish name: {latest_iteration.publish_name})")
if latest_iteration:
test_image_path = "images/15.jpg"
if not os.path.exists(test_image_path):
raise FileNotFoundError(f"Test image not found: {test_image_path}")
with open(test_image_path, "rb") as image_contents:
print(f"Iteration ID: {latest_iteration.id}")
try:
# Use the publish name for prediction
results = predictor.classify_image(project_id, latest_iteration.publish_name, image_contents.read())
for prediction in results.predictions:
print(f"{prediction.tag_name}: {prediction.probability * 100:.2f}%")
except Exception as e:
print(f"Prediction error: {e}")
else:
print("Latest iteration not found or invalid.")
except Exception as e:
print(f"Error: {e}")
Đây là một đoạn mã Python sử dụng dịch vụ Azure Custom Vision để dự đoán nhãn của một hình ảnh dựa trên mô hình đã được huấn luyện và xuất bản.
Import các thư viện cần thiết: Đầu tiên, mã này import các thư viện cần thiết, bao gồm
CustomVisionTrainingClient
vàCustomVisionPredictionClient
từazure.cognitiveservices.vision.customvision.training
vàazure.cognitiveservices.vision.customvision.prediction
để tương tác với dịch vụ Azure Custom Vision,ApiKeyCredentials
từmsrest.authentication
để xác thực, vàdotenv
để tải các biến môi trường từ tệp.env
.Tải các biến môi trường: Mã này sử dụng
load_dotenv()
để tải các biến môi trường từ tệp.env
. Các biến này bao gồmTrainingEndpoint
,TrainingKey
,PredictionKey
, vàProjectId
.Khởi tạo client: Mã này tạo một đối tượng
ApiKeyCredentials
vớiTrainingKey
vàPredictionKey
và sau đó sử dụng chúng để khởi tạo một đối tượngCustomVisionTrainingClient
vàCustomVisionPredictionClient
vớiENDPOINT
.Lấy phiên bản huấn luyện đã xuất bản mới nhất của dự án: Mã này lấy danh sách các phiên bản huấn luyện của dự án, lọc ra những phiên bản đã được xuất bản, sắp xếp chúng theo thời gian tạo (giảm dần), và lấy phiên bản mới nhất.
Dự đoán nhãn của hình ảnh: Mã này mở một hình ảnh từ đường dẫn được chỉ định (
test_image_path
), đọc nội dung của nó, và sau đó gửi nội dung hình ảnh đó cùng với tên xuất bản của phiên bản huấn luyện mới nhất để dự đoán nhãn của hình ảnh. Kết quả dự đoán được in ra.Xử lý lỗi: Mã này bao gồm một khối
try/except
để xử lý các lỗi có thể xảy ra, như không tìm thấy phiên bản huấn luyện đã xuất bản, không tìm thấy hình ảnh kiểm tra, hoặc lỗi khi thực hiện dự đoán.
Kết quả sẽ có dạng như sau:
Dog: 91.43%
Cat: 8.25%
Dọn dẹp tài nguyên:
Unpublish, xoá project trên Vision Studio
Chạy
terraform destroy
để xoá các resource infrastructure
Bài tập
Tạo một mô hình Custom Vision nhận diện chữ số viết tay
Xem triển khai ở ngày 3
Giải thích các chỉ số đánh giá mô hình (Precision, Recall, mAP)
Giới Thiệu Về Các Chỉ Số Đánh Giá Mô Hình (Precision, Recall, mAP)
Đánh giá hiệu quả của một mô hình học máy là một bước quan trọng trong quá trình phát triển và triển khai mô hình. Các chỉ số đánh giá như Precision, Recall, và mAP (mean Average Precision) là những công cụ quan trọng giúp đánh giá và so sánh các mô hình, đặc biệt là trong các bài toán phân loại và nhận diện đối tượng.
1. Precision (Độ chính xác)
Precision đo lường tỷ lệ dự đoán chính xác trong số các dự đoán mà mô hình cho là dương tính.
Trong đó:
TP (True Positive): Số lượng các trường hợp dương tính được dự đoán đúng.
FP (False Positive): Số lượng các trường hợp không phải dương tính nhưng lại bị dự đoán sai là dương tính.
Ví dụ: Nếu mô hình của bạn dự đoán 100 trường hợp là bệnh ung thư, nhưng chỉ có 80 trường hợp thực sự là ung thư và 20 trường hợp là không phải, thì Precision sẽ là \(\\frac{80}{100} = 0.8\).
Ý nghĩa: Precision cao có nghĩa là mô hình ít dự đoán sai các trường hợp không phải là dương tính.
2. Recall (Độ nhạy)
Recall đo lường tỷ lệ các trường hợp dương tính thực sự được mô hình dự đoán đúng.
Trong đó:
- FN (False Negative): Số lượng các trường hợp dương tính bị bỏ sót, tức là dự đoán sai là âm tính.
Ví dụ: Nếu có tổng cộng 100 trường hợp ung thư thực sự, nhưng mô hình của bạn chỉ dự đoán đúng 80 trường hợp và bỏ sót 20 trường hợp, thì Recall sẽ là \(\\frac{80}{100} = 0.8\).
Ý nghĩa: Recall cao có nghĩa là mô hình có khả năng phát hiện nhiều trường hợp dương tính thực sự.
3. Mean Average Precision (mAP)
mAP là một chỉ số tổng hợp thường được sử dụng trong các bài toán nhận diện và phân loại đối tượng, đặc biệt là trong lĩnh vực thị giác máy tính.
mAP là trung bình của Average Precision (AP) trên tất cả các lớp hoặc các nhãn. AP đo lường diện tích dưới đường Precision-Recall curve cho từng lớp hoặc nhãn.
Cách tính AP:
Precision-Recall Curve: Đầu tiên, ta vẽ đường cong Precision-Recall cho từng lớp.
Diện tích dưới đường cong: Tính diện tích dưới đường Precision-Recall curve để có được AP cho từng lớp.
Cách tính mAP:
Ý nghĩa: mAP cao cho thấy mô hình có hiệu suất tốt trên tất cả các lớp, không chỉ tập trung vào một số lớp nhất định.
Ví Dụ Minh Hoạ và Ứng Dụng Thực Tế
1. Phân Loại Văn Bản:
Precision: Khi phân loại email spam, Precision cao nghĩa là trong số các email được đánh dấu là spam, phần lớn thực sự là spam.
Recall: Recall cao nghĩa là hầu hết các email spam đã được phát hiện.
2. Nhận Diện Đối Tượng:
Precision: Khi nhận diện khuôn mặt, Precision cao nghĩa là các khuôn mặt được nhận diện thực sự là của người cần nhận diện.
Recall: Recall cao nghĩa là phần lớn các khuôn mặt trong ảnh đã được nhận diện đúng.
3. Đánh Giá Hiệu Quả Của Hệ Thống:
- mAP: Khi đánh giá một hệ thống nhận diện đối tượng như YOLO, mAP là chỉ số tổng hợp giúp hiểu rõ hơn về hiệu suất toàn diện của mô hình trên nhiều lớp đối tượng.
Precision, Recall, và mAP là các chỉ số đánh giá quan trọng giúp hiểu rõ hơn về hiệu suất của mô hình. Tùy vào ứng dụng cụ thể mà chúng ta có thể ưu tiên một chỉ số hơn so với các chỉ số khác. Tuy nhiên, trong hầu hết các trường hợp, một mô hình tốt cần phải cân bằng giữa Precision và Recall, và có mAP cao để đảm bảo hiệu suất tổng thể.
Bài tập thêm: Tìm hiểu về Security cho Azure AI services
Bảo mật là nền tảng không thể thiếu khi triển khai các dịch vụ AI trên Azure. Bảo vệ các tài nguyên, mô hình và dữ liệu AI khỏi các mối đe dọa đa dạng và tinh vi là yếu tố then chốt để đảm bảo tính toàn vẹn, khả dụng và bảo mật cho hệ thống của bạn. Bài giảng này sẽ đi sâu vào các khía cạnh bảo mật quan trọng, cung cấp các ví dụ thực tế và các công cụ nâng cao để giúp bạn xây dựng một hệ thống AI an toàn và đáng tin cậy trên Azure.
1. Xác thực và Ủy quyền (Authentication and Authorization)
Azure Active Directory (Azure AD):
Ví dụ: Sử dụng Azure AD để quản lý danh tính của các nhà khoa học dữ liệu và kỹ sư AI, cho phép họ truy cập vào các tài nguyên Azure cần thiết (như Azure Machine Learning workspace) thông qua đăng nhập một lần (SSO).
Mẹo: Triển khai xác thực đa yếu tố (MFA) để tăng cường bảo mật, đặc biệt là khi truy cập từ các vị trí không tin cậy.
Role-Based Access Control (RBAC):
Ví dụ: Gán vai trò "Contributor" cho các nhà khoa học dữ liệu để họ có thể tạo và quản lý các thí nghiệm AI, trong khi gán vai trò "Reader" cho các nhà phân tích kinh doanh để họ chỉ có thể xem kết quả.
Mẹo: Tạo các vai trò tùy chỉnh để phù hợp với các yêu cầu cụ thể của tổ chức bạn. Ví dụ, bạn có thể tạo một vai trò "AI Model Trainer" chỉ có quyền truy cập vào các tài nguyên cần thiết cho việc huấn luyện mô hình.
2. Bảo mật Mạng (Network Security)
Virtual Networks (VNet):
Ví dụ: Tạo một VNet riêng biệt cho các dịch vụ AI của bạn, tách biệt với các tài nguyên khác trong môi trường Azure của bạn. Điều này giúp hạn chế bề mặt tấn công và giảm thiểu rủi ro.
Mẹo: Sử dụng subnets để phân đoạn VNet của bạn và áp dụng các chính sách bảo mật khác nhau cho từng subnet.
Network Security Groups (NSG):
Ví dụ: Tạo một NSG cho phép lưu lượng truy cập đến cổng 80 và 443 từ Internet vào một máy ảo chạy ứng dụng web AI, đồng thời chặn tất cả các lưu lượng truy cập khác.
Mẹo: Sử dụng các quy tắc NSG để kiểm soát lưu lượng truy cập giữa các subnet trong VNet của bạn.
3. Bảo mật Dữ liệu (Data Security)
Encryption:
Ví dụ: Sử dụng Azure Disk Encryption để mã hóa các ổ đĩa ảo lưu trữ dữ liệu huấn luyện mô hình AI của bạn.
Mẹo: Sử dụng các loại mã hóa khác nhau cho dữ liệu khi lưu trữ (ví dụ: AES-256) và khi truyền (ví dụ: TLS 1.2).
Azure Key Vault:
Ví dụ: Lưu trữ các khóa mã hóa và bí mật ứng dụng (như API keys) trong Azure Key Vault và kiểm soát truy cập vào chúng bằng RBAC.
Mẹo: Sử dụng các tính năng bảo mật nâng cao của Azure Key Vault, như tính năng xóa mềm và khôi phục, để bảo vệ các khóa và bí mật của bạn khỏi bị xóa nhầm hoặc bị mất.
4. Bảo mật Ứng dụng (Application Security)
Azure Security Center:
Ví dụ: Sử dụng Azure Security Center để giám sát các lỗ hổng bảo mật trong các ứng dụng AI của bạn và nhận các khuyến nghị để khắc phục chúng.
Mẹo: Tích hợp Azure Security Center với các công cụ DevOps của bạn để tự động quét và vá các lỗ hổng bảo mật.
Application Gateway và Web Application Firewall (WAF):
Ví dụ: Triển khai Application Gateway trước ứng dụng web AI của bạn để bảo vệ nó khỏi các cuộc tấn công DDoS và các mối đe dọa khác.
Mẹo: Sử dụng WAF để lọc các yêu cầu độc hại và bảo vệ ứng dụng của bạn khỏi các cuộc tấn công như SQL injection và cross-site scripting (XSS).
5. Quản lý và Giám sát (Management and Monitoring)
Azure Monitor:
Ví dụ: Sử dụng Azure Monitor để thu thập nhật ký hoạt động từ các dịch vụ AI của bạn và phân tích chúng để phát hiện các hoạt động bất thường hoặc đáng ngờ.
Mẹo: Thiết lập các cảnh báo trong Azure Monitor để được thông báo ngay lập tức về các sự cố bảo mật tiềm ẩn.
Azure Policy:
Ví dụ: Tạo một Azure Policy yêu cầu tất cả các tài khoản lưu trữ chứa dữ liệu AI phải được mã hóa.
Mẹo: Sử dụng Azure Policy để thực thi các tiêu chuẩn bảo mật và tuân thủ trong toàn bộ môi trường Azure của bạn.
6. Đảm bảo Tuân thủ (Compliance Assurance) và các mối đe dọa AI
Compliance Certifications:
Ví dụ: Nếu bạn đang xử lý dữ liệu y tế, hãy đảm bảo rằng các dịch vụ AI của bạn tuân thủ HIPAA.
Mẹo: Làm việc với các chuyên gia pháp lý và tuân thủ để đảm bảo rằng các dịch vụ AI của bạn đáp ứng tất cả các yêu cầu tuân thủ hiện hành.
Các mối đe dọa AI:
Đầu độc dữ liệu: Kẻ tấn công cố tình đưa dữ liệu sai lệch vào tập huấn luyện để làm sai lệch mô hình.
Ví dụ: Trong một hệ thống nhận dạng hình ảnh, kẻ tấn công có thể thêm nhiễu vào hình ảnh để đánh lừa mô hình.
Giải pháp: Xác thực dữ liệu đầu vào, sử dụng các kỹ thuật phát hiện dị thường, và thường xuyên kiểm tra lại mô hình.
Tấn công mô hình: Kẻ tấn công khai thác các lỗ hổng trong mô hình để đưa ra dự đoán sai lệch.
Ví dụ: Trong một mô hình phân loại văn bản, kẻ tấn công có thể tạo ra các đoạn văn bản "độc hại" để đánh lừa mô hình.
Giải pháp: Sử dụng các kỹ thuật phòng thủ đối kháng, thường xuyên cập nhật và kiểm tra mô hình.
Truy cập trái phép vào dữ liệu huấn luyện: Kẻ tấn công đánh cắp hoặc làm rò rỉ dữ liệu nhạy cảm được sử dụng để huấn luyện mô hình.
Ví dụ: Trong một mô hình dự đoán tài chính, dữ liệu giao dịch nhạy cảm có thể bị đánh cắp.
Giải pháp: Mã hóa dữ liệu, kiểm soát truy cập chặt chẽ, và giám sát các hoạt động bất thường.
7. Công cụ bảo mật nâng cao
Azure Sentinel:
- Ví dụ: Sử dụng Azure Sentinel để thu thập dữ liệu bảo mật từ các dịch vụ AI của bạn, phân tích chúng để phát hiện các mối đe dọa, và tự động phản ứng với các sự cố.
Azure Confidential Computing:
- Ví dụ: Sử dụng Azure Confidential Computing để bảo vệ dữ liệu nhạy cảm trong quá trình sử dụng, chẳng hạn như dữ liệu y tế hoặc tài chính, bằng cách chạy các mô hình AI trong các môi trường thực thi đáng tin cậy (TEE).
Tài liệu tham khảo:
Thực hành theo lab tại đây: https://microsoftlearning.github.io/AI-102-AIEngineer/Instructions/02-cognitive-services-security.html
Terraform:
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "example" {
name = "textanalys-rg"
location = "East US"
}
resource "azurerm_cognitive_account" "example" {
name = "textanalysexample"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
kind = "CognitiveServices"
sku_name = "S0"
identity {
type = "SystemAssigned"
}
tags = {
Environment = "Test"
}
}
data "azurerm_client_config" "current" {}
resource "azurerm_key_vault" "example" {
name = "textanavault"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
enabled_for_disk_encryption = true
tenant_id = data.azurerm_client_config.current.tenant_id
soft_delete_retention_days = 7
purge_protection_enabled = false
sku_name = "standard"
access_policy {
tenant_id = data.azurerm_client_config.current.tenant_id
object_id = data.azurerm_client_config.current.object_id
key_permissions = [
"Get", "List", "Update", "Create", "Import", "Delete", "Recover", "Backup", "Restore", "Decrypt", "Encrypt", "UnwrapKey",
"WrapKey", "Verify", "Sign", "Purge", "Release", "Rotate", "GetRotationPolicy", "SetRotationPolicy"
]
secret_permissions = [
"Get", "List", "Set", "Delete", "Recover", "Backup", "Restore", "Purge"
]
}
}
output "endpoint" {
value = azurerm_cognitive_account.example.endpoint
}
output "api_key" {
value = azurerm_cognitive_account.example.primary_access_key
sensitive = true
}
Tạo service principal:
az ad sp create-for-rbac -n "api://<spName>" --role owner --scopes subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
Lấy objectid:
az ad sp show --id <appId> --query id --out tsv
Assign permission:
az keyvault set-policy -n <keyVaultName> --object-id <objectId> --secret-permissions get list
Cài đặt thư viện:
pip install azure-ai-textanalytics
pip install azure-identity
pip install azure-keyvault-secrets
.env
COG_SERVICE_ENDPOINT=your_cognitive_services_endpoint
KEY_VAULT=your_key_vault_name
TENANT_ID=your_service_principal_tenant_id
APP_ID=your_service_principal_app_id
APP_PASSWORD=your_service_principal_password
from dotenv import load_dotenv
import os
from azure.ai.textanalytics import TextAnalyticsClient
from azure.core.credentials import AzureKeyCredential
from azure.keyvault.secrets import SecretClient
from azure.identity import ClientSecretCredential
def main():
global cog_endpoint
global cog_key
try:
# Get Configuration Settings
load_dotenv()
cog_endpoint = os.getenv('COG_SERVICE_ENDPOINT')
key_vault_name = os.getenv('KEY_VAULT')
app_tenant = os.getenv('TENANT_ID')
app_id = os.getenv('APP_ID')
app_password = os.getenv('APP_PASSWORD')
# Get Azure AI services key from keyvault using the service principal credentials
key_vault_uri = f"https://{key_vault_name}.vault.azure.net/"
credential = ClientSecretCredential(app_tenant, app_id, app_password)
keyvault_client = SecretClient(key_vault_uri, credential)
secret_key = keyvault_client.get_secret("Cognitive-Services-Key")
cog_key = secret_key.value
# Get user input (until they enter "quit")
userText =''
while userText.lower() != 'quit':
userText = input('\\nEnter some text ("quit" to stop)\\n')
if userText.lower() != 'quit':
language = GetLanguage(userText)
print('Language:', language)
except Exception as ex:
print(ex)
def GetLanguage(text):
# Create client using endpoint and key
credential = AzureKeyCredential(cog_key)
client = TextAnalyticsClient(endpoint=cog_endpoint, credential=credential)
# Call the service to get the detected language
detectedLanguage = client.detect_language(documents = [text])[0]
return detectedLanguage.primary_language.name
if __name__ == "__main__":
main()
Dọn dẹp tài nguyên:
Xoá service principal đã tạo:
# Lấy ID của Service Principal
$sp_id = az ad sp list --display-name "api://ai-app" --query "[].appId" -o tsv
# Xóa Service Principal
az ad sp delete --id $sp_id
Sau đó chạy terraform destroy để xoá các resource infra khác
Bài tập thêm: Tìm hiểu về monitoring Azure AI services
Việc giám sát các dịch vụ AI trên Azure rất quan trọng để duy trì tính ổn định, hiệu suất và bảo mật cho các giải pháp AI của bạn. Nó đảm bảo rằng các dịch vụ của bạn hoạt động trơn tru, đáp ứng được các kỳ vọng về hiệu suất, và phát hiện cũng như phản hồi kịp thời các vấn đề. Dưới đây, chúng ta sẽ cùng tìm hiểu các thành phần chính và những phương pháp tốt nhất để giám sát các dịch vụ AI trên Azure.
1. Azure Monitor
Azure Monitor là một dịch vụ giám sát toàn diện cung cấp giải pháp hoàn chỉnh để thu thập, phân tích và hành động trên dữ liệu telemetry từ các môi trường đám mây và tại chỗ của bạn. Nó giúp bạn hiểu được cách các ứng dụng của bạn đang hoạt động và xác định sớm các vấn đề ảnh hưởng đến chúng và các tài nguyên mà chúng phụ thuộc.
Các Tính Năng Chính:
Metrics và Logs: Thu thập các số liệu và nhật ký từ các dịch vụ Azure, ứng dụng, và hạ tầng.
Alerts: Thiết lập các cảnh báo để nhận thông báo về các vấn đề quan trọng.
Dashboards: Tạo các biểu đồ trực quan để giám sát các chỉ số hiệu suất chính.
Autoscale: Tự động mở rộng hoặc thu hẹp ứng dụng dựa trên các quy tắc đã được xác định trước.
2. Azure Application Insights
Azure Application Insights là một dịch vụ quản lý hiệu suất ứng dụng (APM) dành cho các nhà phát triển để giám sát các ứng dụng trực tiếp. Nó giúp bạn phát hiện và chẩn đoán các vấn đề về hiệu suất và hiểu cách người dùng tương tác với ứng dụng của bạn.
Các Tính Năng Chính:
Telemetry Collection: Tự động thu thập dữ liệu telemetry như tỷ lệ yêu cầu, thời gian phản hồi, và tỷ lệ lỗi.
Analytics và Diagnostics: Cung cấp ngôn ngữ truy vấn mạnh mẽ và các công cụ chẩn đoán để điều tra các vấn đề.
Live Metrics Stream: Xem các chỉ số hiệu suất thời gian thực của ứng dụng.
3. Azure Log Analytics
Azure Log Analytics là một dịch vụ trong Azure Monitor giúp bạn thu thập và phân tích dữ liệu nhật ký từ nhiều nguồn. Nó cho phép các truy vấn phức tạp, cảnh báo tùy chỉnh và biểu đồ dữ liệu nâng cao.
Các Tính Năng Chính:
Query Language: Sử dụng Kusto Query Language (KQL) để truy vấn mạnh mẽ và linh hoạt.
Custom Dashboards: Tạo bảng điều khiển tùy chỉnh để trực quan hóa dữ liệu nhật ký.
4. Giám Sát Các Dịch Vụ AI Cụ Thể
Azure Cognitive Services
Azure Cognitive Services cung cấp các API dịch vụ AI mà bạn có thể sử dụng để thêm các khả năng nhận dạng giọng nói, thị giác máy tính, ngôn ngữ tự nhiên, và ra quyết định vào các ứng dụng của bạn.
Giám Sát Các Tính Năng Chính:
API Response Times: Giám sát thời gian phản hồi của các API để đảm bảo hiệu suất.
Error Rates: Theo dõi tỷ lệ lỗi để phát hiện và khắc phục các vấn đề kịp thời.
Usage Metrics: Theo dõi các số liệu sử dụng để quản lý tài nguyên và chi phí.
Azure Machine Learning
Azure Machine Learning cung cấp một môi trường để phát triển, huấn luyện, và triển khai các mô hình machine learning.
Giám Sát Các Tính Năng Chính:
Model Training: Giám sát quá trình huấn luyện mô hình để phát hiện các vấn đề về hiệu suất và tính đúng đắn.
Model Deployment: Theo dõi các mô hình đã triển khai để đảm bảo chúng hoạt động như mong đợi.
Experimentation: Theo dõi và quản lý các thử nghiệm để tối ưu hóa mô hình.
Các Best practices
Thiết Lập Cảnh Báo: Luôn thiết lập các cảnh báo để nhận biết sớm các vấn đề.
Tối Ưu Hóa Tài Nguyên: Sử dụng tính năng autoscale để tối ưu hóa việc sử dụng tài nguyên và chi phí.
Phân Tích Xu Hướng: Sử dụng các công cụ phân tích để theo dõi xu hướng hiệu suất và sử dụng.
Terraform:
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "example" {
name = "textanalys-rg"
location = "East US"
}
resource "azurerm_cognitive_account" "example" {
name = "textanalysexample"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
kind = "CognitiveServices"
sku_name = "S0"
identity {
type = "SystemAssigned"
}
tags = {
Environment = "Test"
}
}
resource "azurerm_monitor_action_group" "example" {
name = "cogservice-action-group"
resource_group_name = azurerm_resource_group.example.name
short_name = "cogservice"
email_receiver {
name = "sendtoadmin"
email_address = "trinhhaiyen79@gmail.com"
use_common_alert_schema = true
}
}
resource "azurerm_monitor_metric_alert" "example" {
name = "Total Calls Alert"
resource_group_name = azurerm_resource_group.example.name
scopes = [azurerm_cognitive_account.example.id]
description = "This alert will trigger when the sum of Total Calls is greater than zero."
severity = 4
frequency = "PT1M" # Check every 1 minute
window_size = "PT5M" # Look at data over the last 5 minutes
criteria {
metric_namespace = "Microsoft.CognitiveServices/accounts"
metric_name = "TotalCalls"
aggregation = "Total"
operator = "GreaterThan"
threshold = 0
}
action {
action_group_id = azurerm_monitor_action_group.example.id
}
}
resource "azurerm_monitor_activity_log_alert" "key_list_alert" {
name = "Key List Alert"
resource_group_name = azurerm_resource_group.example.name
scopes = [azurerm_cognitive_account.example.id]
description = "This alert will trigger when the List Keys activity occurs."
criteria {
category = "Administrative"
operation_name = "Microsoft.CognitiveServices/accounts/listKeys/action"
status = "Succeeded"
level = "Informational"
}
action {
action_group_id = azurerm_monitor_action_group.example.id
}
}
output "endpoint" {
value = azurerm_cognitive_account.example.endpoint
}
output "api_key" {
value = azurerm_cognitive_account.example.primary_access_key
sensitive = true
}
Thực hiện chạy câu lệnh sau trong Command promt windows để test:
curl -X POST "<yourEndpoint>/text/analytics/v3.1/languages?" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: <yourKey>" --data-ascii "{'documents':[{'id':1,'text':'hello'}]}"
Bạn sẽ nhận được cảnh báo về hành động List key và Total Count:
Bài tập thêm: Deploy Azure AI services trong containers
https://microsoftlearning.github.io/AI-102-AIEngineer/Instructions/04-use-a-container.html
1. Giới Thiệu về Dịch Vụ AI của Azure trong Container
Định Nghĩa và Tổng Quan
Dịch vụ AI của Azure cung cấp một loạt các mô hình máy học được xây dựng sẵn có thể triển khai và mở rộng trên Azure.
Các dịch vụ này có sẵn dưới dạng API, SDK và container, cung cấp sự linh hoạt trong việc triển khai.
Lợi Ích của Việc Sử Dụng Container
Di Động: Container có thể chạy đồng nhất trên các môi trường khác nhau.
Khả Năng Mở Rộng: Dễ dàng mở rộng các dịch vụ AI để đáp ứng nhu cầu.
Cách Ly: Mỗi container chạy độc lập, đảm bảo các dịch vụ khác nhau không can thiệp vào nhau.
Linh Hoạt: Chọn nơi và cách triển khai các dịch vụ AI, dù là on-premises, trên Azure hay các đám mây khác.
2. Các Dịch Vụ AI của Azure Có Sẵn trong Container
Computer Vision
- Phân tích hình ảnh, OCR, phát hiện khuôn mặt và nhiều hơn nữa.
Text Analytics
- Phân tích cảm xúc, trích xuất từ khóa, phát hiện ngôn ngữ, v.v.
Speech
- Chuyển giọng nói thành văn bản, chuyển văn bản thành giọng nói, dịch giọng nói.
Language Understanding (LUIS)
- Khả năng xử lý ngôn ngữ tự nhiên để hiểu ý định và thực thể của người dùng.
3. Hiểu Về Container Dịch Vụ AI của Azure
Các image:
Feature | Image |
Key Phrase Extraction | mcr.microsoft.com/azure-cognitive-services/textanalytics/keyphrase |
Language Detection | mcr.microsoft.com/azure-cognitive-services/textanalytics/language |
Sentiment Analysis | mcr.microsoft.com/azure-cognitive-services/textanalytics/sentiment |
Named Entity Recognition | mcr.microsoft.com/product/azure-cognitive-services/textanalytics/language/about |
Text Analytics for health | mcr.microsoft.com/product/azure-cognitive-services/textanalytics/healthcare/about |
Translator | mcr.microsoft.com/product/azure-cognitive-services/translator/text-translation/about |
Summarization | mcr.microsoft.com/azure-cognitive-services/textanalytics/summarization |
Kiến Thức Cơ Bản về Container
Container là gì?
Container là một gói phần mềm chứa tất cả những gì cần thiết để chạy một ứng dụng, bao gồm mã nguồn, thư viện, biến môi trường và các tệp cấu hình khác.
Container cho phép ứng dụng chạy đồng nhất trên các môi trường khác nhau từ phát triển, thử nghiệm đến sản xuất.
Container khác gì so với máy ảo?
Máy ảo (VM):
VM là một mô phỏng đầy đủ của một máy tính vật lý, bao gồm hệ điều hành riêng, phần cứng ảo, và các ứng dụng.
VM sử dụng hypervisor để quản lý và phân bổ tài nguyên phần cứng của máy chủ vật lý cho các máy ảo khác nhau.
VM có kích thước lớn và cần nhiều tài nguyên hệ thống.
Container:
Container chia sẻ cùng một hệ điều hành với máy chủ vật lý, nhưng cô lập các ứng dụng bên trong.
Container sử dụng công nghệ ảo hóa ở mức hệ điều hành (OS-level virtualization) thay vì hypervisor.
Container nhẹ hơn, khởi động nhanh hơn và tiêu tốn ít tài nguyên hơn so với VM.
Đóng Gói Dịch Vụ AI Dưới Dạng Container
Các dịch vụ AI được đóng gói thành container như thế nào?
Các dịch vụ AI của Azure được đóng gói thành container bằng cách sử dụng Docker. Docker là nền tảng phổ biến nhất để tạo, triển khai và chạy container.
Dịch vụ AI của Azure, chẳng hạn như Text Analytics, Computer Vision, Speech, và LUIS, được cung cấp dưới dạng các container Docker có thể tải xuống và chạy trên bất kỳ môi trường nào hỗ trợ Docker.
Các thành phần của một container dịch vụ AI của Azure
Điểm cuối API (API Endpoint):
Mỗi container dịch vụ AI của Azure đi kèm với một API endpoint, cho phép người dùng gửi yêu cầu và nhận kết quả từ mô hình AI.
Ví dụ: Container Text Analytics sẽ có các endpoint như
/text/analytics/v3.0/sentiment
để phân tích cảm xúc,/text/analytics/v3.0/keyPhrases
để trích xuất từ khóa, v.v.
Mô hình đã được đào tạo sẵn (Pre-trained Model):
Container dịch vụ AI chứa các mô hình máy học đã được đào tạo sẵn bởi Microsoft. Các mô hình này được tối ưu hóa cho các tác vụ cụ thể như phân tích văn bản, nhận diện hình ảnh, chuyển đổi giọng nói, v.v.
Ví dụ: Mô hình Text Analytics đã được đào tạo trên hàng triệu mẫu văn bản để nhận diện cảm xúc, chủ đề và ngôn ngữ.
Cấu hình và Biến Môi Trường (Configuration and Environment Variables):
Container cần các cấu hình và biến môi trường để hoạt động chính xác. Những biến này bao gồm các thông tin như khóa API, chấp nhận điều khoản sử dụng, và các thiết lập khác.
Ví dụ: Biến môi trường
TEXT_ANALYTICS_API_KEY
được sử dụng để xác thực yêu cầu API tới dịch vụ Text Analytics.
Hệ thống tập tin và thư viện (File System and Libraries):
Container dịch vụ AI chứa hệ thống tập tin và thư viện cần thiết để chạy các mô hình AI. Điều này bao gồm các thư viện mã nguồn mở và các công cụ đặc biệt mà dịch vụ yêu cầu.
Ví dụ: Container Text Analytics có thể bao gồm các thư viện NLP như spaCy hoặc NLTK.
Bộ điều phối và quản lý (Orchestration and Management):
Mặc dù không phải lúc nào cũng có trong mỗi container, nhưng các hệ thống điều phối như Kubernetes (AKS) hoặc Docker Swarm có thể được sử dụng để quản lý và điều phối nhiều container cùng một lúc.
Bộ điều phối giúp quản lý các tác vụ như mở rộng, cân bằng tải và cập nhật container.
4. Kịch Bản Triển Khai và Các Trường Hợp Sử Dụng
On-Premises Deployment
Khi dữ liệu cần lưu trữ tại chỗ và tuân thủ yêu cầu.
Ví dụ: Các tổ chức tài chính yêu cầu dữ liệu phải được lưu trữ tại chỗ.
Edge Deployment
Chạy các dịch vụ AI trên các thiết bị biên với kết nối hạn chế.
Ví dụ: Các cửa hàng bán lẻ sử dụng AI tại chỗ để phân tích hành vi khách hàng.
Đám Mây Kết Hợp
Kết hợp tài nguyên tại chỗ và đám mây để triển khai linh hoạt.
Ví dụ: Các tổ chức y tế sử dụng cả tài nguyên đám mây và tại chỗ để xử lý dữ liệu bệnh nhân.
5. Yêu Cầu Kỹ Thuật và Thiết Lập
Yêu Cầu Trước
Docker đã được cài đặt trên môi trường mục tiêu.
Đăng ký Azure (để lấy container image).
6. Bảo Mật và Tuân Thủ
Thực Hành Tốt về Bảo Mật Container
Cập nhật thường xuyên container image.
Quét các lỗ hổng bảo mật.
Sử dụng các kiểm soát truy cập an toàn.
Tuân Thủ
Đảm bảo các container đáp ứng các quy định và tiêu chuẩn ngành.
Cách các dịch vụ AI của Azure tuân thủ các tiêu chuẩn chính (GDPR, HIPAA, v.v.)
7. Giám Sát và Quản Lý
Giám Sát Container Dịch Vụ AI
Công cụ và kỹ thuật để giám sát hiệu suất container.
Nhật ký và chẩn đoán.
Mở Rộng và Cân Bằng Tải
Chiến lược mở rộng các dịch vụ AI dựa trên nhu cầu.
Sử dụng Azure Kubernetes Service (AKS) để điều phối container.
8. Thực Hành: Triển Khai Container Language Dectection
https://microsoftlearning.github.io/AI-102-AIEngineer/Instructions/04-use-a-container.html
- Terraform tạo AI service:
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "example" {
name = "example-resources"
location = "East US"
}
resource "azurerm_cognitive_account" "example_cognitive_account" {
name = "examplecognitiveaccount"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
kind = "CognitiveServices"
sku_name = "S0"
}
Kéo container image Language dection (lưu ý image này khá nặng: 6.828GB)
docker pull mcr.microsoft.com/azure-cognitive-services/textanalytics/language:latest
Cấu hình các biến môi trường.
$env:ENPOINT = "<your-text-analytics-api-endpoint>" $env:KEY = "<your-api-key>"
Chạy container.
docker run --rm -it -p 5000:5000 --memory 12g --cpus 1 mcr.microsoft.com/azure-cognitive-services/textanalytics/language:latest Eula=accept Billing=<yourEndpoint> ApiKey=<yourKey>
Kiểm tra các điểm cuối API với dữ liệu mẫu.
import requests import json # Replace with your ACI IP address or FQDN aci_address = "localhost" # The URL of the Language Detection API url = "http://" + aci_address + ":5000/text/analytics/v3.0/languages" # The text that you want to analyze documents = [ {"id": "1", "text": "Hello world."}, {"id": "2", "text": "Salut tout le monde."} ] # Define headers for the request headers = {'Content-Type': 'application/json'} # Send the POST request response = requests.post(url, headers=headers, json={"documents": documents}) # Print the response print(response.json()) # Powershell: # $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" # $headers.Add("Content-Type", "application/json") # $body = @" # { # "documents": [ # {"id": "1", "text": "Hello world."}, # {"id": "2", "text": "Salut tout le monde."} # ] # } # "@ # Invoke-WebRequest -Uri "<http://localhost:5000/text/analytics/v3.0/languages>" -Method POST -Body $body -Headers $headers # Curl: # curl POST "http://<your_ACI_IP_address_or_FQDN>:5000/text/analytics/v3.0/languages" -H "Content-Type: application/json" --data-ascii "{'documents':[{'id':1,'text':'Hello world.'},{'id':2,'text':'Salut tout le monde.'}]}"
9. Triển Khai Container Bằng Terraform trên Azure container
Tạo Container:
resource "azurerm_container_group" "example" { name = "langdetector-congroup" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name ip_address_type = "Public" dns_name_label = "myuniquelang123" os_type = "Linux" container { name = "langdetector" image = "mcr.microsoft.com/azure-cognitive-services/textanalytics/language:latest" cpu = "1" memory = "12" ports { port = 5000 protocol = "TCP" } environment_variables = { "ApiKey" = azurerm_cognitive_account.example_cognitive_account.primary_access_key "Billing" = azurerm_cognitive_account.example_cognitive_account.endpoint "Eula" = "accept" } } restart_policy = "OnFailure" }
Áp Dụng Cấu Hình Terraform
terraform init terraform apply
Kết quả:
Bạn có thể thực hiện kiểm tra các API của mình
https://azure.microsoft.com/en-us/blog/running-cognitive-service-containers/
10. Nghiên Cứu Tình Huống và Ứng Dụng Thực Tiễn
Tài Chính
Tình Huống: Một ngân hàng lớn cần triển khai dịch vụ nhận dạng văn bản (OCR) để xử lý các tài liệu tài chính tại chỗ.
Giải Pháp: Sử dụng container dịch vụ Computer Vision của Azure để triển khai dịch vụ OCR trên cơ sở hạ tầng on-premises.
Phân Tích: Container đảm bảo tính bảo mật dữ liệu, linh hoạt trong mở rộng khi khối lượng công việc tăng, và dễ dàng quản lý.
Bán Lẻ
Tình Huống: Một chuỗi cửa hàng bán lẻ muốn triển khai dịch vụ phân tích hành vi khách hàng tại các cửa hàng riêng lẻ.
Giải Pháp: Sử dụng container dịch vụ Text Analytics và Computer Vision của Azure triển khai trên thiết bị edge tại mỗi cửa hàng.
Phân Tích: Dịch vụ phân tích tại chỗ giúp tối ưu hóa việc trưng bày sản phẩm, quản lý tồn kho hiệu quả hơn, và cải thiện trải nghiệm khách hàng. Container đảm bảo tính bảo mật và hiệu suất ổn định, đồng thời giảm độ trễ trong quá trình xử lý dữ liệu.
Y Tế
Tình Huống: Một bệnh viện muốn triển khai dịch vụ nhận diện giọng nói để chuyển đổi các cuộc trò chuyện giữa bác sĩ và bệnh nhân thành văn bản.
Giải Pháp: Sử dụng container dịch vụ Speech-to-Text của Azure triển khai trong môi trường đám mây kết hợp.
Phân Tích: Giải pháp này giúp giảm thời gian ghi chép y khoa, tăng cường độ chính xác của hồ sơ bệnh nhân và cải thiện hiệu quả làm việc của bác sĩ. Đồng thời, đảm bảo tuân thủ các quy định bảo mật và quyền riêng tư dữ liệu y tế.
Tài Nguyên Thêm
Microsoft Learn Module: Điều tra việc sử dụng container để triển khai dịch vụ AI
Tài Liệu Azure: Hướng dẫn chi tiết về từng dịch vụ AI của Azure và các tùy chọn triển khai container của chúng.
Tài Liệu Docker: Tài nguyên toàn diện cho việc làm việc với các container Docker.
Bài tập thêm: Video Indexer
https://microsoftlearning.github.io/AI-102-AIEngineer/Instructions/16-video-indexer.html
1. Giới thiệu về Video Indexer
Video Indexer là dịch vụ AI của Microsoft Azure, cung cấp khả năng phân tích video và trích xuất thông tin từ video như nhận dạng khuôn mặt, nhận dạng giọng nói, dịch tự động, phân loại cảnh, và nhiều tính năng khác. Nó tích hợp các mô-đun AI khác nhau để xử lý video một cách toàn diện.
2. Các Tính Năng Chính của Video Indexer
a. Nhận Diện Khuôn Mặt và Đối Tượng
Nhận diện khuôn mặt: Video Indexer có khả năng nhận diện và theo dõi khuôn mặt trong suốt video. Nó có thể nhận dạng khuôn mặt của các nhân vật nổi tiếng và so sánh với một cơ sở dữ liệu đã được cung cấp. Ví dụ, trong một video hội nghị, Video Indexer có thể nhận diện và gắn nhãn cho các diễn giả.
Nhận diện đối tượng: Nó cũng có thể xác định và phân loại các đối tượng trong video như xe cộ, đồ vật, hoặc thú vật. Điều này rất hữu ích trong các ứng dụng giám sát an ninh, nơi việc nhận diện và theo dõi các đối tượng quan trọng.
b. Nhận Diện Giọng Nói và Tự Động Chuyển Đổi Giọng Nói Thành Văn Bản
Nhận diện giọng nói: Video Indexer có thể nhận diện các diễn giả khác nhau và gán các phần thoại cho từng người. Điều này giúp tạo ra một bản ghi chính xác về ai đã nói gì trong video.
Tự động chuyển đổi giọng nói thành văn bản (Speech-to-Text): Chuyển đổi toàn bộ nội dung thoại trong video thành văn bản, hỗ trợ hơn 30 ngôn ngữ. Điều này giúp tạo ra bản gốc văn bản của video, giúp việc tìm kiếm và truy cập nội dung video dễ dàng hơn.
c. Phân Tích Cảnh và Hành Động
Phân loại cảnh: Phân loại các đoạn video thành các loại cảnh khác nhau như trong nhà, ngoài trời, đám đông, v.v. Điều này giúp người dùng hiểu rõ hơn về nội dung và ngữ cảnh của video.
Nhận diện hành động: Có thể nhận diện các hành động cụ thể trong video như chạy, nhảy, vỗ tay, v.v. Điều này có thể hỗ trợ trong việc phân tích hành vi và hoạt động trong video.
d. Dịch Tự Động và Phụ Đề
Dịch tự động: Dịch nội dung thoại sang nhiều ngôn ngữ khác nhau, tạo điều kiện cho việc đa ngôn ngữ hóa video. Điều này giúp mở rộng đối tượng người xem và tăng khả năng tiếp cận của video.
Phụ đề: Tự động tạo phụ đề cho video dựa trên nội dung thoại đã được chuyển đổi thành văn bản. Điều này giúp người xem có thể theo dõi nội dung video mà không cần âm thanh.
3. Cách Hoạt Động của Video Indexer
Video Indexer hoạt động bằng cách sử dụng các mô-đun AI khác nhau được tích hợp trong dịch vụ Azure Cognitive Services. Các bước cơ bản bao gồm:
Tải lên video: Người dùng tải lên video lên dịch vụ Video Indexer.
Phân tích video: Video Indexer sẽ phân tích video và trích xuất thông tin từ video bằng cách sử dụng các mô-đun AI.
Hiển thị kết quả: Các kết quả phân tích sẽ được hiển thị dưới dạng metadata, bao gồm nhận diện khuôn mặt, giọng nói, đối tượng, cảnh, và các thông tin khác.
Tích hợp và sử dụng: Người dùng có thể tích hợp kết quả phân tích vào ứng dụng hoặc hệ thống của mình.
4. Các Ứng Dụng Thực Tế của Video Indexer
a. Truyền Thông và Giải Trí
Video Indexer giúp các công ty truyền thông phân loại và tìm kiếm nội dung video một cách hiệu quả. Ví dụ, một công ty truyền hình có thể sử dụng Video Indexer để tự động tạo phụ đề và dịch nội dung video sang nhiều ngôn ngữ khác nhau, giúp mở rộng đối tượng người xem và tăng khả năng tiếp cận của nội dung.
b. Giáo Dục và Đào Tạo
Trong lĩnh vực giáo dục, Video Indexer giúp phân tích và tạo phụ đề cho các bài giảng video, giúp học viên dễ dàng theo dõi và học tập. Ví dụ, một trường đại học có thể sử dụng Video Indexer để tạo ra bản gốc văn bản của các bài giảng, giúp sinh viên có thể tìm kiếm và ôn tập nội dung một cách dễ dàng.
c. Bảo Mật và Giám Sát
Video Indexer có thể được sử dụng trong các hệ thống giám sát để nhận diện và theo dõi đối tượng, phân tích hành vi, và phát hiện các hành động đáng ngờ. Ví dụ, một công ty bảo mật có thể sử dụng Video Indexer để phân tích video giám sát và phát hiện các hành động bất thường, giúp nâng cao hiệu quả của hệ thống giám sát.
Luyện tập
https://microsoftlearning.github.io/AI-102-AIEngineer/Instructions/16-video-indexer.html
Link: https://www.videoindexer.ai/
Template tạo infra:
{
"id": "/subscriptions/<id>/resourceGroups/test-video-indexer/providers/Microsoft.Resources/deployments/Microsoft.VideoIndexer1717341262612",
"name": "Microsoft.VideoIndexer1717341262612",
"type": "Microsoft.Resources/deployments",
"properties": {
"templateHash": "<templateHash>",
"parameters": {
"name": {
"type": "String",
"value": "testvideoindexers"
},
"resourceLocation": {
"type": "String",
"value": "eastus"
},
"mappedLocation": {
"type": "String",
"value": "eastus"
},
"resourceGroupLocation": {
"type": "String",
"value": "eastus"
},
"classicAccountId": {
"type": "String",
"value": ""
},
"tags": {
"type": "Object",
"value": {}
},
"resourceGroupName": {
"type": "String",
"value": "test-video-indexer"
},
"managedIdentityName": {
"type": "String",
"value": ""
},
"managedIdentityType": {
"type": "String",
"value": "SystemAssigned"
},
"storageAccountName": {
"type": "String",
"value": "testgvd"
},
"storageAccountId": {
"type": "String",
"value": ""
},
"managedIdentityId": {
"type": "String",
"value": ""
},
"storageAccountSku": {
"type": "String",
"value": "Standard_LRS"
},
"storageAccountTier": {
"type": "String",
"value": "Storage"
},
"storageAccountTags": {
"type": "Object",
"value": {}
}
},
"mode": "Incremental",
"debugSetting": {
"detailLevel": "None"
},
"provisioningState": "Running",
"timestamp": "2024-06-02T15:14:46.9388546Z",
"duration": "PT2.8947991S",
"correlationId": "<correlationId>",
"providers": [
{
"namespace": "Microsoft.Storage",
"resourceTypes": [
{
"resourceType": "storageAccounts",
"locations": [
"eastus"
]
},
{
"resourceType": "storageAccounts/blobServices",
"locations": [
null
]
}
]
},
{
"namespace": "Microsoft.VideoIndexer",
"resourceTypes": [
{
"resourceType": "accounts",
"locations": [
"eastus"
]
}
]
}
],
"dependencies": [
{
"dependsOn": [
{
"id": "/subscriptions/<id>/resourceGroups/test-video-indexer/providers/Microsoft.Storage/storageAccounts/testgvd",
"resourceType": "Microsoft.Storage/storageAccounts",
"resourceName": "testgvd"
}
],
"id": "/subscriptions/<id>/resourceGroups/test-video-indexer/providers/Microsoft.Storage/storageAccounts/testgvd/blobServices/default",
"resourceType": "Microsoft.Storage/storageAccounts/blobServices",
"resourceName": "testgvd/default"
},
{
"dependsOn": [
{
"id": "/subscriptions/<id>/resourceGroups/test-video-indexer/providers/Microsoft.Storage/storageAccounts/testgvd",
"resourceType": "Microsoft.Storage/storageAccounts",
"resourceName": "testgvd"
}
],
"id": "/subscriptions/<id>/resourceGroups/test-video-indexer/providers/Microsoft.VideoIndexer/accounts/testvideoindexers",
"resourceType": "Microsoft.VideoIndexer/accounts",
"resourceName": "testvideoindexers"
}
],
"validationLevel": "Template"
},
"tags": {
"primaryResourceId": "/subscriptions/<id>/resourcegroups/test-video-indexer/providers/Microsoft.VideoIndexer/accounts/testvideoindexers",
"marketplaceItemId": "Microsoft.VideoIndexer"
}
}
analyze_video.html:
<html>
<header>
<title>Analyze Video</title>
<script src="https://breakdown.blob.core.windows.net/public/vb.widgets.mediator.js"></script>
</header>
<body>
<h1>Video Analysis</h1>
<table>
<tr>
<td style="vertical-align:top;">
<!--Player widget goes here -->
</td>
<td style="vertical-align:top;">
<!-- Insights widget goes here -->
</td>
</tr>
</table>
</body>
</html>
Portal API: https://api-portal.videoindexer.ai
Lấy key và account id dán vào code sau:
$account_id="<id>"
$api_key="<key>"
$location="trial" # If you have created an unrestricted Video Analyzer account (with an associated Azure resource), you can change this to the location where your Azure resource is provisioned (for example “eastus”).
# Call the AccessToken method with the API key in the header to get an access token
$token = Invoke-RestMethod -Method "Get" -Uri "<https://api.videoindexer.ai/auth/$location/Accounts/$account_id/AccessToken>" -Headers @{'Ocp-Apim-Subscription-Key' = $api_key}
# Use the access token to make an authenticated call to the Videos method to get a list of videos in the account
Invoke-RestMethod -Method "Get" -Uri "<https://api.videoindexer.ai/$location/Accounts/$account_id/Videos?accessToken=$token>" | ConvertTo-Json
Kết quả:
{
"results": [
{
"accountId": "<accountId>",
"id": "<id>",
"partition": null,
"externalId": null,
"metadata": null,
"name": "Responsible AI",
"description": null,
"created": "2024-06-02T15:23:34.2733333+00:00",
"lastModified": "2024-06-02T15:25:39.5666667+00:00",
"lastIndexed": "2024-06-02T15:25:39.5666667+00:00",
"privacyMode": "Private",
"userName": "<userName>",
"isOwned": true,
"isBase": true,
"hasSourceVideoFile": true,
"state": "Processed",
"moderationState": "OK",
"reviewState": "None",
"processingProgress": "100%",
"durationInSeconds": 114,
"thumbnailVideoId": "<id>",
"thumbnailId": "<thumbnailId>",
"searchMatches": "",
"indexingPreset": "Default",
"streamingPreset": "SingleBitrate",
"sourceLanguage": "en-US",
"sourceLanguages": "en-US",
"personModelId": "<personModelId>"
}
],
"nextPage": {
"pageSize": 25,
"skip": 0,
"done": true
}
}