Phần 16. Thực thi bộ phát hiện trái cây tại biên

0
952

Video dưới đây giới thiệu tổng quan việc chạy bộ phân loại hình ảnh trên các thiết bị IoT- chủ đề sẽ được đề cập trong bài viết này.

Bài viết trước đã trình bày cách sử dụng bộ phân loại hình ảnh để phân loại trái cây chín và chưa chín, cách gửi hình ảnh chụp từ máy ảnh trên thiết bị IoT qua internet tới dịch vụ đám mây. Quy trình trên mất thời gian, tốn kém và tùy thuộc vào loại dữ liệu hình ảnh đang sử dụng mà có thể ảnh hưởng đến quyền riêng tư.

Bài viết này sẽ hướng dẫn cách chạy các mô hình học máy (ML) hiện đại trên các thiết bị IoT (chạy trên mạng riêng chứ không phải trên đám mây) và phân tích ưu, nhược điểm của điện toán biên so với điện toán đám mây, cách triển khai và cách truy cập mô hình AI từ thiết bị IoT.

Các nội dung chính trong bài viết này gồm:

1. Khái niệm điện toán biên

2. Dịch vụ Azure IoT Edge

3. Cách đăng ký thiết bị IoT Edge

4. Cách cài đặt thiết bị IoT Edge

5. Cách export mô hình

6. Chuẩn bị vùng chứa để triển khai

7. Cách triển khai vùng chứa

8. Cách sử dụng thiết bị IoT Edge

1. Khái niệm điện toán biên

Điện toán biên liên quan đến việc các máy tính xử lý dữ liệu IoT càng gần với nơi tạo ra dữ liệu càng tốt. Thay vì xử lý dữ liệu trên đám mây, nó được chuyển đến biên của đám mây – mạng nội bộ.

Trong các bài viết trước đã đề cập đến các thiết bị thu thập dữ liệu và gửi dữ liệu lên đám mây để phân tích, chạy các chức năng serverless hoặc mô hình AI trên đám mây.

Điện toán biên liên quan đến việc di chuyển một số dịch vụ đám mây ra khỏi đám mây và sang các máy tính chạy trên cùng một mạng với các thiết bị IoT, chỉ giao tiếp với đám mây nếu cần. Ví dụ: chạy mô hình AI trên các thiết bị tại biên để phân tích độ chín của trái cây và chỉ gửi phân tích trở lại đám mây, như số lượng trái cây chín so với chưa chín.

Ưu điểm của điện toán biên:

1. Tốc độ – điện toán biên lý tưởng cho dữ liệu truyền nhanh vì được thực hiện trên cùng mạng với thiết bị, thay vì thực hiện truyền qua internet. Nó cho phép tăng tốc độ truyền vì mạng nội bộ chạy với tốc độ nhanh hơn đáng kể so với kết nối internet, với khoảng cách truyền dữ liệu ngắn hơn nhiều.

Mặc dù kết nối internet sử dụng cáp quang cho phép dữ liệu truyền với tốc độ rất nhanh, thì dữ liệu vẫn cần thời gian để truyền khắp thế giới đến các nhà cung cấp dịch vụ đám mây. Ví dụ: nếu gửi dữ liệu qua cáp quang xuyên Đại Tây Dương đến dịch vụ đám mây ở Mỹ thì cần ít nhất là 28ms (chưa tính đến thời gian đưa dữ liệu đến cáp xuyên Đại Tây Dương, chuyển đổi từ tín hiệu điện sang tín hiệu quang và quay lại phía bên kia, sau đó từ cáp quang đến nhà cung cấp dịch vụ đám mây).

Điện toán biên cũng yêu cầu dung lượng ít hơn, giảm nguy cơ chậm dữ liệu do tắc nghẽn trên băng thông hạn chế có sẵn cho kết nối internet.

2. Khả năng truy cập từ xa – Điện toán biên hoạt động trong trường hợp thiết bị bị hạn chế hoặc không có kết nối hoặc để sử dụng liên tục mà chi phí kết nối quá tốn kém. Ví dụ khi làm việc ở các khu vực thảm họa nhân đạo, nơi cơ sở hạ tầng còn hạn chế hoặc ở các quốc gia đang phát triển.

3. Chi phí thấp hơn – thực hiện các hành động thu thập, lưu trữ, phân tích và kích hoạt dữ liệu trên thiết bị biên làm giảm việc sử dụng các dịch vụ đám mây do đó giảm chi phí tổng thể cho ứng dụng IoT. Gần đây các thiết bị được thiết kế cho điện toán biên ngày càng tăng, như bo mạch tăng tốc AI tên là Jetson Nano của NVIDIA. Với giá dưới 100$ thì người dùng đã có thể chạy các ứng dụng AI trên các bo mạch như vậy.

4. Quyền riêng tư và bảo mật – với điện toán biên, dữ liệu vẫn nằm trên mạng và không được tải lên đám mây. Điều này thường được ưu tiên đối với thông tin nhạy cảm và có thể nhận dạng cá nhân, đặc biệt vì dữ liệu không cần lưu trữ sau khi đã phân tích nên giúp giảm đáng kể nguy cơ rò rỉ dữ liệu. Ví dụ dữ liệu y tế và cảnh quay camera an ninh.

5. Xử lý các thiết bị không an toàn – nếu thiết bị của bạn có lỗi bảo mật do đó bạn không muốn kết nối trực tiếp với mạng hoặc internet, thì có thể kết nối chúng với một mạng riêng biệt tới thiết bị IoT Edge cổng vào. Sau đó, thiết bị biên này cũng kết nối với mạng lớn hơn hoặc internet và quản lý các luồng dữ liệu qua lại.

6. Hỗ trợ các thiết bị không tương thích – với thiết bị chỉ kết nối được qua HTTP hoặc chỉ có Bluetooth mà không thể kết nối với IoT Hub thì có thể sử dụng thiết bị biên IoT làm thiết bị cổng, chuyển tiếp tin nhắn đến IoT Hub.

Nhược điểm của điện toán biên:

Điện toán biên tồn tại những nhược điểm mà đó là ưu điểm của điện toán đám mây:

1. Quy mô và tính linh hoạt – điện toán đám mây có thể điều chỉnh theo nhu cầu mạng và dữ liệu trong thời gian thực bằng cách thêm hoặc giảm servers và các tài nguyên khác. Với điện toán biên, để thêm nhiều máy tính biên phải thực hiện bằng cách thủ công.

2. Độ tin cậy và khả năng khôi phục – điện toán đám mây thường cung cấp nhiều servers ở nhiều vị trí để dự phòng và khắc phục sự cố. Đối với điện toán biên, để có cùng một mức độ dự phòng vượt trội như điện toán đám mây thì đòi hỏi đầu tư lớn và rất nhiều cấu hình.

3. Bảo trì – Nhà cung cấp dịch vụ đám mây cung cấp bản cập nhật và bảo trì hệ thống.

Nhược điểm của điện toán biên chính là ưu điểm của điện toán đám mây – người dùng phải tự xây dựng và quản lý các thiết bị này, thay vì dựa vào chuyên môn và quy mô của các nhà cung cấp đám mây.

Tuy nhiên chính bản chất điện toán biên giảm thiểu được một số sự cố. Ví dụ: nếu một thiết bị biên đang chạy trong nhà máy thu thập dữ liệu từ máy móc, không cần lo lắng về tình huống khôi phục sau sự cố. Nếu nhà máy bị ngắt điện thì không cần thiết bị biên dự phòng vì các máy tạo ra dữ liệu mà thiết bị biên xử lý cũng không có điện.

Đối với các hệ thống IoT, người dùng thường muốn kết hợp giữa điện toán đám mây và điện toán biên, tận dụng ưu điểm từng dịch vụ dựa trên nhu cầu của hệ thống, khách hàng và người bảo trì.

2. Dịch vụ Azure IoT Edge

Azure IoT Edge là dịch vụ giúp chuyển khối lượng công việc ra khỏi đám mây đến biên. Người dùng thiết lập một thiết bị làm thiết bị biên và có thể triển khai mã cho thiết bị biên đó từ đám mây. Điều này cho phép kết hợp các khả năng của điện toán đám mây và điện toán biên.

Workloads là một thuật ngữ chỉ bất kỳ dịch vụ nào thực hiện một số loại công việc, như các mô hình AI, ứng dụng hoặc các chức năng serverless.

Ví dụ: Đào tạo một bộ phân loại hình ảnh trên đám mây, sau đó từ đám mây triển khai cho một thiết bị biên. Khi đó, thay vì gửi hình ảnh qua internet, thì thiết bị IoT sẽ gửi hình ảnh đến thiết bị biên để phân loại. Nếu cần triển khai một bước lặp mới của mô hình, có thể đào tạo nó trên đám mây và sử dụng IoT Edge để cập nhật mô hình trên thiết bị biên lên phiên bản mới.

Phần mềm được triển khai cho IoT Edge được gọi là module. Theo mặc định, IoT Edge chạy các module giao tiếp với IoT Hub, như module edgeAgentedgeHub. Khi đó bộ phân loại hình ảnh đóng vai trò như một module bổ sung.

IoT Edge được tích hợp vào IoT Hub, vì vậy có thể quản lý các thiết bị biên bằng cùng một dịch vụ quản lý các thiết bị IoT, với cùng một mức độ bảo mật.

IoT Edge chạy mã từ các containers (vùng chứa)- các ứng dụng độc lập chạy tách biệt với các ứng dụng còn lại trên máy tính.Chạy một vùng chứa giống như một máy tính riêng biệt chạy bên trong máy tính, với phần mềm, dịch vụ và ứng dụng của chính nó đang chạy. Hầu hết các vùng chứa thời gian không thể truy cập bất kỳ thứ gì trên máy tính trừ khi người dùng chọn chia sẻ như một thư mục với vùng chứa. Sau đó, vùng chứa hiển thị các dịch vụ thông qua một cổng mở có thể kết nối hoặc hiển thị với mạng.

Ví dụ: Có một vùng chứa với một trang web chạy trên cổng 80, cổng HTTP mặc định, sau đó có thể hiển thị từ máy tính cũng trên cổng 80.

Sử dụng Custom Vision để tải xuống bộ phân loại hình ảnh và triển khai dưới dạng vùng chứa, chạy trực tiếp đến thiết bị hoặc triển khai qua IoT Edge. Khi đang chạy trong một vùng chứa, truy cập vào bằng cách sử dụng API REST giống như phiên bản đám mây, nhưng với điểm cuối trỏ đến thiết bị Edge đang chạy vùng chứa.

3. Cách đăng ký thiết bị IoT Edge

Để sử dụng thiết bị IoT Edge, cần đăng ký thiết bị đó với IoT Hub.

* Cách đăng ký thiết bị IoT Edge

1. Tạo IoT Hub trong nhóm tài nguyên fruit-quality-detector với tên riêng dựa trên fruit-quality-detector.

2. Đăng ký thiết bị IoT Edge có tên fruit-quality-detector trong IoT Hub. Lệnh này tương tự như lệnh đăng ký thiết bị không biên, ngoại trừ vượt qua cờ –edge-enabled.

az iot hub device-identity create --edge-enabled \
                                  --device-id fruit-quality-detector-edge \
                                  --hub-name <hub_name>

Thay thế <hub_name> bằng tên của IoT Hub.

Lấy chuỗi kết nối cho thiết bị bằng lệnh sau:

az iot hub device-identity connection-string show --device-id fruit-quality-detector-edge \
                                                  --output table \
                                                  --hub-name <hub_name>

Thay thế <hub_name> bằng tên của IoT Hub.

Copy chuỗi kết nối hiển thị ở đầu ra.

4. Cách cài đặt thiết bị IoT Edge

Sau khi đăng ký thiết bị biên ở IoT Hub thì có thể cài đặt thiết bị biên.

* Cách cài đặt và khởi động IoT Edge Runtime

IoT Edge runtime có thể chạy trên Linux hoặc Windows bằng Máy ảo Linux trong đó nó chỉ chạy các vùng chứa Linux.

Nếu đang sử dụng Raspberry Pi làm thiết bị IoT, thì thiết bị này chạy phiên bản được hỗ trợ Linux và có thể lưu trữ IoT Edge runtime. Làm theo hướng dẫn cài đặt Azure IoT Edge cho Linux trên tài liệu của Microsoft để cài đặt IoT Edge và đặt chuỗi kết nối.

Lưu ý: Raspberry Pi OS là một phiên bản của Debian Linux.

Nếu không sử dụng Raspberry Pi nhưng có máy tính Linux thì có thể chạy IoT Edge runtime. Làm theo hướng dẫn cài đặt Azure IoT Edge cho Linux trên tài liệu của Microsoft để cài đặt IoT Edge và đặt chuỗi kết nối.

Nếu đang sử dụng Windows, có thể cài đặt IoT Edge runtime trong Linux Virtual Machine bằng cách thực hiện theo cài đặt và bắt đầu phần IoT Edge runtime của triển khai mô-đun IoT Edge đầu tiên cho thiết bị Windows khởi động nhanh trên tài liệu của Microsoft. Có thể dừng lại khi đến phần Deploy a module.

Nếu đang sử dụng macOS, có thể tạo một máy ảo (VM) trên đám mây để sử dụng cho thiết bị IoT Edge. Đây là những máy tính có thể tạo trên đám mây và truy cập qua internet. Tạo một Linux VM đã cài đặt IoT Edge. Làm theo hướng dẫn tạo máy ảo chạy IoT Edge:

5. Cách Export mô hình

Cầnexport bộ phân loại tại biên từ ​​Custom Vision để có thể chạy tại biên. Custom Vision tạo ra hai loại mô hình: mô hình standart và mô hình compact. Mô hình compact sử dụng các kỹ thuật khác nhau để giảm kích thước, làm cho nó đủ nhỏ để tải xuống và triển khai trên các thiết bị IoT.

Khi tạo bộ phân loại hình ảnh, bạn đã sử dụng miền Food– một phiên bản của mô hình được tối ưu hóa để đào tạo về hình ảnh thực phẩm. Trong Custom Vision, thay đổi miền của project, sử dụng dữ liệu đào tạo để đào tạo một mô hình mới với miền mới. Tất cả các miền được Custom Vision hỗ trợ đều có sẵn dưới dạng standartcompact.

* Cách đào tạo mô hình bằng miền Food (compact)

1. Khởi chạy và đăng nhập cổng Custom Vision tại CustomVision.ai. Mở project fruit-quality-detector.

2. Chọn nút Settings (biểu tượng ⚙)

3. Trong danh sách Domains, chọn Food (compact)

4. Trong Export Capabilities, chọn Basic platforms (Tensorflow, CoreML, ONNX, …).

5. Ở cuối trang Settings, chọn Save Changes.

6. Đào tạo lại mô hình bằng nút Train, chọn Quick

* Cách export mô hình

Sau khi đã đào tạo mô hình, cần export nó dưới dạng vùng chứa.

1. Chọn tab Performance, tìm bước lặp gần nhất đã đào tạo bằng miền compact.

2. Chọn nút Export ở trên cùng.

3. Chọn DockerFile, sau đó chọn phiên bản phù hợp với thiết bị biên:

– Nếu đang chạy IoT Edge trên máy tính Linux, máy tính Windows hoặc Máy ảo, chọn phiên bản Linux.

– Nếu đang chạy IoT Edge trên Raspberry Pi, chọn phiên bản ARM (Raspberry Pi 3).

Docker là một trong những công cụ phổ biến nhất để quản lý và hướng dẫn cách thiết lập vùng chứa.

4. Chọn Export để có Custom Vision giúp tạo các file có liên quan, sau đó chọn Download để tải xuống dưới dạng file zip.

5. Lưu các file vào máy tính, sau đó giải nén thư mục.

6. Chuẩn bị vùng chứa để triển khai

Khi đã tải mô hình, cần tích hợp nó vào một vùng chứa, sau đó đẩy đến cơ quan đăng ký vùng chứa – vị trí trực tuyến nơi có thể lưu trữ các vùng chứa. Sau đó, IoT Edge có thể tải vùng chứa từ sổ đăng ký và đẩy nó vào thiết bị.

Cơ quan đăng ký vùng chứa sử dụng trong bài viết này là Azure Container Registry. Đây là dịch vụ trả phí, do đó để tiết kiệm tiền, hãy dọn dẹp project sau khi hoàn thành.

Tham khảo chi phí sử dụng Azure Container Registry tại Azure Container Registry pricing

* Cách cài đặt Docker

Để xây dựng và triển khai bộ phân loại, cần cài đặt Docker.

Làm theo hướng dẫn cài đặt Docker trên trang Docker install để cài đặt Docker Desktop hoặc công cụ Docker.

* Cách tạo tài nguyên đăng ký vùng chứa

1. Chạy lệnh dưới đây từ Terminal hoặc sau dấu nhắc lệnh để tạo tài nguyên Azure Container Registry:

az acr create --resource-group fruit-quality-detector \
              --sku Basic \
              --name <Container registry name>

Thay thế <Container registry name> bằng tên duy nhất cho đăng ký vùng chứa, chỉ sử dụng các chữ cái và số dựa vào fruitqualitydetector. Tên này trở thành một phần của URL để truy cập sổ đăng ký vùng chứa, vì vậy phải là duy nhất trên toàn cầu.

2. Đăng nhập vào Azure Container Registry bằng lệnh sau:

az acr login --name <Container registry name>

Thay thế <Container registry name> bằng tên đã sử dụng cho đăng ký vùng chứa.

3. Đặt sổ đăng ký vùng chứa thành chế độ quản trị để tạo mật khẩu bằng lệnh sau:

az acr update --admin-enabled true \
             --name <Container registry name>

Thay thế <Container registry name> bằng tên đã sử dụng cho đăng ký vùng chứa.

4. Tạo mật khẩu cho sổ đăng ký vùng chứa bằng lệnh sau:

 az acr credential renew --password-name password \
                         --output table \
                         --name <Container registry name>

Thay thế <Container registry name> bằng tên đã sử dụng cho đăng ký vùng chứa.

Copy PASSWORD.

* Cách xây dựng vùng chứa

Những gì đã tải xuống từ Custom Vision là DockerFile chứa hướng dẫn về cách tạo vùng chứa, cùng với mã ứng dụng chạy bên trong vùng chứa để lưu trữ mô hình Custom Vision, cùng với REST API để gọi nó. Có thể sử dụng Docker để tạo một vùng chứa gắn thẻ từ DockerFile, sau đó đẩy nó vào sổ đăng ký vùng chứa của bạn.

Các vùng chứa được gắn thẻ xác định tên và phiên bản. Khi cần cập nhật vùng chứa, tạo vùng chứa đó bằng cùng một thẻ nhưng phiên bản mới hơn.

1. Mở Terminal hoặc dấu nhắc lệnh và điều hướng đến mô hình đã giải nén đã được tải xuống từ Custom Vision.

2. Chạy lệnh sau để xây dựng và gắn thẻ hình ảnh:

docker build --platform <platform> -t <Container registry name>.azurecr.io/classifier:v1 .

Nếu chạy lệnh này từ thiết bị đang chạy IoT Edge, như chạy lệnh từ Raspberry Pi thì có thể bỏ qua phần –platform <platform> vì nó được đặt mặc định cho nền tảng hiện tại.

Thay thế <Container registry name> bằng tên đã sử dụng cho đăng ký vùng chứa.

Nếu đang chạy Linux thì sử dụng sudo để chạy lệnh này.

Docker sẽ xây dựng hình ảnh, cấu hình tất cả các phần mềm cần thiết. Sau đó, hình ảnh sẽ được gắn thẻ là classifier:v1.

➜  d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux docker build --platform linux/amd64 -t  fruitqualitydetectorjimb.azurecr.io/classifier:v1 .
[+] Building 102.4s (11/11) FINISHED
 => [internal] load build definition from Dockerfile
 => => transferring dockerfile: 131B
 => [internal] load .dockerignore
 => => transferring context: 2B
 => [internal] load metadata for docker.io/library/python:3.7-slim
 => [internal] load build context
 => => transferring context: 905B
 => [1/6] FROM docker.io/library/python:3.7-slim@sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6
 => => resolve docker.io/library/python:3.7-slim@sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6
 => => sha256:b4d181a07f8025e00e0cb28f1cc14613da2ce26450b80c54aea537fa93cf3bda 27.15MB / 27.15MB
 => => sha256:de8ecf497b753094723ccf9cea8a46076e7cb845f333df99a6f4f397c93c6ea9 2.77MB / 2.77MB
 => => sha256:707b80804672b7c5d8f21e37c8396f319151e1298d976186b4f3b76ead9f10c8 10.06MB / 10.06MB
 => => sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6 1.86kB / 1.86kB
 => => sha256:44073386687709c437586676b572ff45128ff1f1570153c2f727140d4a9accad 1.37kB / 1.37kB
 => => sha256:3d94f0f2ca798607808b771a7766f47ae62a26f820e871dd488baeccc69838d1 8.31kB / 8.31kB
 => => sha256:283715715396fd56d0e90355125fd4ec57b4f0773f306fcd5fa353b998beeb41 233B / 233B
 => => sha256:8353afd48f6b84c3603ea49d204bdcf2a1daada15f5d6cad9cc916e186610a9f 2.64MB / 2.64MB
 => => extracting sha256:b4d181a07f8025e00e0cb28f1cc14613da2ce26450b80c54aea537fa93cf3bda
 => => extracting sha256:de8ecf497b753094723ccf9cea8a46076e7cb845f333df99a6f4f397c93c6ea9
 => => extracting sha256:707b80804672b7c5d8f21e37c8396f319151e1298d976186b4f3b76ead9f10c8
 => => extracting sha256:283715715396fd56d0e90355125fd4ec57b4f0773f306fcd5fa353b998beeb41
 => => extracting sha256:8353afd48f6b84c3603ea49d204bdcf2a1daada15f5d6cad9cc916e186610a9f
 => [2/6] RUN pip install -U pip
 => [3/6] RUN pip install --no-cache-dir numpy~=1.17.5 tensorflow~=2.0.2 flask~=1.1.2 pillow~=7.2.0
 => [4/6] RUN pip install --no-cache-dir mscviplib==2.200731.16
 => [5/6] COPY app /app
 => [6/6] WORKDIR /app
 => exporting to image
 => => exporting layers
 => => writing image sha256:1846b6f134431f78507ba7c079358ed66d944c0e185ab53428276bd822400386
 => => naming to fruitqualitydetectorjimb.azurecr.io/classifier:v1

* Cách đẩy vùng chứa vào sổ đăng ký vùng chứa

  1. Sử dụng lệnh sau để đẩy vùng chứa vào sổ đăng ký vùng chứa:
docker push <Container registry name>.azurecr.io/classifier:v1

Thay thế <Container registry name> bằng tên đã sử dụng cho đăng ký vùng chứa.

Nếu đang chạy Linux, sử dụng sudo để chạy lệnh này.

Vùng chứa sẽ được đẩy đến sổ đăng ký vùng chứa.

➜  d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux docker push fruitqualitydetectorjimb.azurecr.io/classifier:v1
The push refers to repository [fruitqualitydetectorjimb.azurecr.io/classifier]
5f70bf18a086: Pushed 
8a1ba9294a22: Pushed 
56cf27184a76: Pushed 
b32154f3f5dd: Pushed 
36103e9a3104: Pushed 
e2abb3cacca0: Pushed 
4213fd357bbe: Pushed 
7ea163ba4dce: Pushed 
537313a13d90: Pushed 
764055ebc9a7: Pushed 
v1: digest: sha256:ea7894652e610de83a5a9e429618e763b8904284253f4fa0c9f65f0df3a5ded8 size: 2423
2. Để xác minh việc đẩy, bạn có thể liệt kê các vùng chứa trong sổ đăng ký của mình bằng lệnh sau
az acr repository list --output table \
                       --name <Container registry name> 

Thay thế <Container registry name> bằng tên đã sử dụng để đăng ký vùng chứa

➜  d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux az acr repository list --name fruitqualitydetectorjimb --output table
Result
----------
classifier

Khi đó sẽ thấy bộ phân loại được liệt kê trong đầu ra.

7. Cách triển khai vùng chứa

Lúc này có thể triển khai vùng chứa tới thiết bị IoT Edge. Để triển khai, cần xác định một bản kê khai triển khai – tài liệu JSON liệt kê các mô-đun sẽ triển khai cho thiết bị biên.

* Cách tạo bản kê khai triển khai

1. Tạo một file mới tên là deploy.json trên máy tính.

2. Thêm vào sau file đó đoạn code sau:

{
    "content": {
        "modulesContent": {
            "$edgeAgent": {
                "properties.desired": {
                    "schemaVersion": "1.1",
                    "runtime": {
                        "type": "docker",
                        "settings": {
                            "minDockerVersion": "v1.25",
                            "loggingOptions": "",
                            "registryCredentials": {
                                "ClassifierRegistry": {
                                    "username": "<Container registry name>",
                                    "password": "<Container registry password>",
                                    "address": "<Container registry name>.azurecr.io"
                                  }
                            }
                        }
                    },
                    "systemModules": {
                        "edgeAgent": {
                            "type": "docker",
                            "settings": {
                                "image": "mcr.microsoft.com/azureiotedge-agent:1.1",
                                "createOptions": "{}"
                            }
                        },
                        "edgeHub": {
                            "type": "docker",
                            "status": "running",
                            "restartPolicy": "always",
                            "settings": {
                                "image": "mcr.microsoft.com/azureiotedge-hub:1.1",
                                "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
                            }
                        }
                    },
                    "modules": {
                        "ImageClassifier": {
                            "version": "1.0",
                            "type": "docker",
                            "status": "running",
                            "restartPolicy": "always",
                            "settings": {
                                "image": "<Container registry name>.azurecr.io/classifier:v1",
                                "createOptions": "{\"ExposedPorts\": {\"80/tcp\": {}},\"HostConfig\": {\"PortBindings\": {\"80/tcp\": [{\"HostPort\": \"80\"}]}}}"
                            }
                        }
                    }
                }
            },
            "$edgeHub": {
                "properties.desired": {
                    "schemaVersion": "1.1",
                    "routes": {
                        "upstream": "FROM /messages/* INTO $upstream"
                    },
                    "storeAndForwardConfiguration": {
                        "timeToLiveSecs": 7200
                    }
                }
            }
        }
    }
}

File này nằm trong thư mục code-deployment/deployment

Thay thế ba trường hợp của <Container registry name> bằng tên đã sử dụng cho đăng ký vùng chứa của mình. Một trong phần module ImageClassifier, hai phần còn lại nằm trong phần registryCredentials.

Thay thế <Container registry password> trong registryCredentials bằng mật khẩu đăng ký vùng chứa.

3. Từ thư mục chứa file kê khai triển khai, chạy lệnh sau:

az iot edge set-modules --device-id fruit-quality-detector-edge \
                        --content deployment.json \
                        --hub-name <hub_name>

Thay thế <hub_name> bằng tên của IoT Hub.

Mô-đun bộ phân loại hình ảnh sẽ được triển khai cho thiết bị biên.

* Cách xác minh trình phân loại đang chạy

1. Kết nối với thiết bị biên IoT:

– Nếu đang sử dụng Raspberry Pi để chạy IoT Edge, hãy kết nối bằng ssh từ Terminal hoặc thông qua phiên SSH từ xa trong VS Code

– Nếu đang chạy IoT Edge trong vùng chứa Linux trên Windows, làm theo các bước trong hướng dẫn xác minh cấu hình thành công để kết nối với thiết bị IoT Edge.

– Nếu đang chạy IoT Edge trên một máy ảo, có thể SSH vào máy bằng cách sử dụng adminUsername và mật khẩu đã đặt khi tạo VM và sử dụng địa chỉ IP hoặc tên DNS:

ssh <adminUsername>@<IP address>

Hoặc

ssh <adminUsername>@<DNS Name>

2. Sau khi đã kết nối, chạy lệnh sau để nhận danh sách các IoT Edge module:

iotedge list

Chạy lệnh này với sudo.

jim@fruit-quality-detector-jimb:~$ iotedge list
NAME             STATUS           DESCRIPTION      CONFIG
ImageClassifier  running          Up 42 minutes    fruitqualitydetectorjimb.azurecr.io/classifier:v1
edgeAgent        running          Up 42 minutes    mcr.microsoft.com/azureiotedge-agent:1.1
edgeHub          running          Up 42 minutes    mcr.microsoft.com/azureiotedge-hub:1.1

3. Kiểm tra nhật ký cho module Bộ phân loại hình ảnh bằng lệnh sau:

iotedge logs ImageClassifier

Chạy lệnh sau với sudo

jim@fruit-quality-detector-jimb:~$ iotedge logs ImageClassifier
2021-07-05 20:30:15.387144: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2021-07-05 20:30:15.392185: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2394450000 Hz
2021-07-05 20:30:15.392712: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55ed9ac83470 executing computations on platform Host. Devices:
2021-07-05 20:30:15.392806: I tensorflow/compiler/xla/service/service.cc:175]   StreamExecutor device (0): Host, Default Version
Loading model...Success!
Loading labels...2 found. Success!
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

* Cách kiểm tra trình phân loại hình ảnh

1. Sử dụng CURL để kiểm tra bộ phân loại hình ảnh bằng địa chỉ IP hoặc tên máy chủ của máy tính đang chạy IoT Edge. Tìm địa chỉ IP:

– Nếu đang sử dụng cùng một máy chạy IoT Edge, có thể sử dụng localhost làm tên máy chủ.

– Nếu đang sử dụng máy ảo thì sử dụng địa chỉ IP hoặc tên DNS của máy ảo

– Nếu không, có thể lấy địa chỉ IP của máy chạy IoT Edge:

Trên Windows 10, làm theo hướng dẫn tìm địa chỉ IP.

Trên macOS, làm theo cách tìm địa chỉ IP trên hướng dẫn dành cho Mac

Trên Linux, theo cách tìm địa chỉ IP riêng trong tìm địa chỉ IP theo hướng dẫn Linux

2. Kiểm tra vùng chứa bằng file cục bộ bằng cách chạy lệnh curl sau:

curl --location \
     --request POST 'http://<IP address or name>/image' \
     --header 'Content-Type: image/png' \
     --data-binary '@<file_Name>' 

Thay thế <IP address or name> bằng địa chỉ IP hoặc tên máy chủ của máy tính chạy IoT Edge. Thay thế <file_Name> bằng tên của file để kiểm tra.

Kết quả dự đoán hiển thị trong đầu ra:

{
    "created": "2021-07-05T21:44:39.573181",
    "id": "",
    "iteration": "",
    "predictions": [
        {
            "boundingBox": null,
            "probability": 0.9995615482330322,
            "tagId": "",
            "tagName": "ripe"
        },
        {
            "boundingBox": null,
            "probability": 0.0004384400090202689,
            "tagId": "",
            "tagName": "unripe"
        }
    ],
    "project": ""
}

Không cần cung cấp khóa dự đoán vì ở đây không phải sử dụng tài nguyên Azure. Thay vào đó, bảo mật sẽ được định cấu hình trên mạng nội bộ dựa trên nhu cầu bảo mật nội bộ, thay vì dựa vào điểm cuối công khai và khóa API.

8. Cách sử dụng thiết bị IoT Edge

Lúc này, Bộ phân loại hình ảnh đã được triển khai tới thiết bị IoT Edge, bạn có thể sử dụng nó từ thiết bị IoT của mình.

Làm việc thông qua hướng dẫn tại các link dưới đây để phân loại hình ảnh bằng bộ phân loại IoT Edge:

Arduino – Thiết bị đầu cuối Wio

Máy tính một bo mạch – Raspberry Pi / thiết bị Virtual IoT

Đào tạo lại mô hình

Một trong những nhược điểm của việc chạy bộ phân loại hình ảnh trên IoT Edge là chúng không được kết nối với project Custom Vision. Nếu nhìn vào Predictions trong Custom Vision sẽ không thấy các hình ảnh được phân loại bằng bộ phân loại dựa trên Edge.

Đây là điều được mong đợi – hình ảnh không được gửi đến đám mây để phân loại vì vậy chúng sẽ không có sẵn trên đám mây. Một trong những ưu điểm của việc sử dụng IoT Edge là quyền riêng tư, đảm bảo hình ảnh không rời khỏi mạng của bạn. Lợi ích khác nữa là có thể hoạt động ngoại tuyến, vì vậy không cần phụ thuộc vào việc tải hình ảnh lên khi thiết bị không có kết nối internet. Nhược điểm là khả năng cải thiện mô hình: cần triển khai cách lưu trữ hình ảnh khác được phân loại lại theo cách thủ công để cải thiện và đào tạo lại bộ phân loại hình ảnh.

Biên dịch: Bắc Đặng

Để cập nhật tin tức công nghệ mới nhất và các sản phẩm của công ty AIoT JSC, vui lòng truy cập link: http://aiots.vn hoặc linhkienaiot.com

0 0 Phiếu bầu
Article Rating
Subscribe
Notify of
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả các bình luận