You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/mo/4-manufacturing/lessons/3-run-fruit-detector-edge
co-op-translator[bot] 7b6699135a
🌐 Update translations via Co-op Translator (#544)
4 weeks ago
..
README.md 🌐 Update translations via Co-op Translator (#544) 4 weeks ago
assignment.md 🌐 Update translations via Co-op Translator (#544) 4 weeks ago
single-board-computer.md 🌐 Update translations via Co-op Translator (#544) 4 weeks ago
vm-iotedge.md 🌐 Update translations via Co-op Translator (#544) 4 weeks ago
wio-terminal.md 🌐 Update translations via Co-op Translator (#544) 4 weeks ago

README.md

在邊緣設備上運行水果檢測器

本課程概述的手繪筆記

手繪筆記由 Nitya Narasimhan 提供。點擊圖片查看更大版本。

這段影片概述了如何在物聯網設備上運行圖像分類器,這是本課程的主題。

Azure IoT Edge上的自訂視覺AI

課前測驗

課前測驗

簡介

在上一課中,你使用了圖像分類器來區分成熟和未成熟的水果,並將物聯網設備上的相機捕捉到的圖像通過網路傳送到雲端服務。這些操作需要時間,會產生費用,並且根據所使用的圖像數據類型,可能會涉及隱私問題。

在本課中你將學習如何在邊緣設備上運行機器學習ML模型——即在自己的網路上運行物聯網設備而不是在雲端。你將了解邊緣計算相較於雲端計算的優勢和劣勢如何將AI模型部署到邊緣設備以及如何從物聯網設備訪問它。

本課程將涵蓋以下內容:

邊緣計算

邊緣計算是指將處理物聯網數據的計算機儘可能靠近數據生成的地方。與其在雲端進行處理,邊緣計算將處理移至雲端的邊緣——你的內部網路。

一個架構圖顯示雲端的網路服務和本地網路上的物聯網設備

到目前為止的課程中你的設備一直在收集數據並將數據發送到雲端進行分析運行無伺服器函數或AI模型。

一個架構圖顯示本地網路上的物聯網設備連接到邊緣設備,邊緣設備再連接到雲端

邊緣計算將部分雲端服務移至與物聯網設備相同網路上的計算機僅在需要時與雲端通信。例如你可以在邊緣設備上運行AI模型來分析水果的成熟度並僅將分析結果如成熟水果與未成熟水果的數量發送回雲端。

思考一下你已經構建的物聯網應用程序,其中哪些部分可以移至邊緣。

優勢

邊緣計算的優勢包括:

  1. 速度 - 邊緣計算非常適合時間敏感的數據,因為操作是在與設備相同的網路上完成,而不是通過網路進行呼叫。這使得速度更快,因為內部網路的速度通常比網路連接快得多,數據傳輸距離也更短。

    💁 儘管網路連接使用光纖電纜使數據能以光速傳輸但數據在全球範圍內傳輸到雲端提供商仍需要時間。例如從歐洲向美國的雲端服務發送數據僅跨越大西洋的光纖電纜就需要至少28毫秒這還不包括數據到達光纖電纜的時間、電信號轉換為光信號以及另一端的反向轉換時間然後再從光纖電纜到雲端提供商。

    邊緣計算還需要更少的網路流量,降低了因網路連接有限帶寬的擁塞而導致數據減速的風險。

  2. 遠程可訪問性 - 邊緣計算在網路連接有限或無法連接,或者連接成本過高時仍然有效。例如在基礎設施有限的災難救援地區或發展中國家工作時。

  3. 成本更低 - 在邊緣設備上執行數據收集、存儲、分析和觸發操作可以減少雲端服務的使用,從而降低物聯網應用程序的整體成本。最近出現了專為邊緣計算設計的設備,例如 NVIDIA 的 Jetson Nano這些設備可以使用GPU硬件運行AI工作負載成本低於100美元。

  4. 隱私和安全性 - 使用邊緣計算,數據保留在你的網路中,不會上傳到雲端。這通常是敏感和個人識別信息的首選,尤其是因為數據在分析後不需要存儲,這大大降低了數據洩漏的風險。例如醫療數據和安全攝像機的影像。

  5. 處理不安全設備 - 如果你有已知存在安全漏洞的設備,不希望直接連接到你的網路或網路連接,可以將它們連接到一個獨立網路上的網關物聯網邊緣設備。這個邊緣設備可以同時連接到更廣泛的網路或網路連接,並管理數據流的來回。

  6. 支持不兼容設備 - 如果你有無法直接連接到物聯網中心的設備例如只能使用HTTP連接的設備或僅有藍牙連接的設備可以使用物聯網邊緣設備作為網關設備將消息轉發到物聯網中心。

做一些研究:邊緣計算還有哪些其他優勢?

劣勢

邊緣計算也有劣勢,某些情況下雲端可能是更好的選擇:

  1. 規模和靈活性 - 雲端計算可以根據網路和數據需求即時調整資源,增加或減少伺服器和其他資源。增加更多邊緣計算機則需要手動添加更多設備。

  2. 可靠性和韌性 - 雲端計算通常提供多個伺服器,甚至多個地點的冗餘和災難恢復。要在邊緣上達到相同的冗餘水平需要大量投資和配置工作。

  3. 維護 - 雲端服務提供商提供系統維護和更新。

做一些研究:邊緣計算還有哪些其他劣勢?

劣勢基本上是使用雲端的優勢的反面——你需要自己構建和管理這些設備,而不是依賴雲端提供商的專業知識和規模。

某些風險可以通過邊緣計算的特性來減輕。例如,如果你有一個邊緣設備在工廠中運行,收集機器的數據,你不需要考慮某些災難恢復場景。如果工廠停電,那麼你不需要備份邊緣設備,因為生成數據的機器也會因停電而停止運行。

對於物聯網系統,你通常需要雲端和邊緣計算的結合,根據系統、客戶和維護者的需求來利用每種服務。

Azure IoT Edge

Azure IoT Edge標誌

Azure IoT Edge 是一項服務,可以幫助你將工作負載從雲端移至邊緣。你可以將設備設置為邊緣設備,並從雲端部署代碼到該邊緣設備。這使得你可以結合雲端和邊緣的能力。

🎓 工作負載 是指任何執行某種工作的服務例如AI模型、應用程序或無伺服器函數。

例如你可以在雲端訓練一個圖像分類器然後從雲端將其部署到邊緣設備。你的物聯網設備隨後將圖像發送到邊緣設備進行分類而不是通過網路發送圖像。如果需要部署模型的新版本你可以在雲端訓練並使用IoT Edge將新版本更新到邊緣設備。

🎓 部署到IoT Edge的軟件被稱為 模組。默認情況下IoT Edge運行與IoT Hub通信的模組例如 edgeAgentedgeHub 模組。當你部署圖像分類器時,它會作為額外的模組部署。

IoT Edge內建於IoT Hub中因此你可以使用管理物聯網設備的同一服務來管理邊緣設備並具有相同的安全級別。

IoT Edge從 容器 中運行代碼——容器是獨立的應用程序,與計算機上的其他應用程序隔離運行。當你運行容器時,它就像在你的計算機內部運行的獨立計算機,擁有自己的軟件、服務和應用程序。大多數情況下,容器無法訪問計算機上的任何內容,除非你選擇與容器共享某些內容,例如文件夾。容器通過開放的端口暴露服務,你可以連接到該端口或將其暴露到網路。

一個網頁請求被重定向到容器

例如你可以有一個容器在端口80上運行網站這是默認的HTTP端口然後你可以將其暴露在你的計算機上也是在端口80。

做一些研究了解容器和像Docker或Moby這樣的服務。

你可以使用Custom Vision下載圖像分類器並將其作為容器部署直接運行在設備上或通過IoT Edge部署。一旦它們在容器中運行你可以使用與雲端版本相同的REST API訪問它但端點指向運行容器的邊緣設備。

註冊物聯網邊緣設備

要使用物聯網邊緣設備必須在IoT Hub中註冊。

任務 - 註冊物聯網邊緣設備

  1. fruit-quality-detector 資源群組中創建一個IoT Hub。給它一個基於 fruit-quality-detector 的唯一名稱。

  2. 在你的IoT Hub中註冊一個名為 fruit-quality-detector-edge 的物聯網邊緣設備。執行此操作的命令與註冊非邊緣設備的命令類似,只需添加 --edge-enabled 標誌。

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

    <hub_name> 替換為你的IoT Hub的名稱。

  3. 使用以下命令獲取設備的連接字串:

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

    <hub_name> 替換為你的IoT Hub的名稱。

    複製輸出中顯示的連接字串。

設置物聯網邊緣設備

在你的IoT Hub中創建邊緣設備註冊後你可以設置邊緣設備。

任務 - 安裝並啟動IoT Edge運行時

IoT Edge運行時僅運行Linux容器。 它可以在Linux上運行也可以在Windows上通過Linux虛擬機運行。

導出模型

要在邊緣運行分類器需要從Custom Vision導出。Custom Vision可以生成兩種類型的模型——標準模型和緊湊型模型。緊湊型模型使用各種技術來減小模型的大小使其足夠小以便下載並部署到物聯網設備。

當你創建圖像分類器時,你使用了 Food這是針對食物圖像訓練的模型版本。在Custom Vision中你可以更改項目的域使用你的訓練數據訓練一個新域的新模型。Custom Vision支持的所有域都可以作為標準和緊湊型版本。

任務 - 使用Food緊湊型域訓練你的模型

  1. 開啟 CustomVision.ai 的 Custom Vision 入口網站,並登入(如果尚未開啟)。接著打開你的 fruit-quality-detector 專案。

  2. 選擇 設定 按鈕(⚙ 圖示)。

  3. Domains 清單中,選擇 Food (compact)

  4. Export Capabilities 下,確認選擇了 Basic platforms (Tensorflow, CoreML, ONNX, ...)

  5. 在設定頁面的底部,選擇 儲存變更

  6. 使用 訓練 按鈕重新訓練模型,並選擇 快速訓練

任務 - 匯出你的模型

當模型訓練完成後,需要將其匯出為容器。

  1. 選擇 效能 分頁,找到使用 compact domain 訓練的最新迭代版本。

  2. 點擊頂部的 匯出 按鈕。

  3. 選擇 DockerFile,然後選擇與你的邊緣設備相符的版本:

    • 如果你在 Linux 電腦、Windows 電腦或虛擬機器上運行 IoT Edge選擇 Linux 版本。
    • 如果你在 Raspberry Pi 上運行 IoT Edge選擇 ARM (Raspberry Pi 3) 版本。

🎓 Docker 是管理容器最受歡迎的工具之一,而 DockerFile 是一組用於設置容器的指令。

  1. 選擇 匯出 讓 Custom Vision 建立相關檔案,然後點擊 下載 以壓縮檔案形式下載。

  2. 將檔案儲存到你的電腦,然後解壓縮資料夾。

為部署準備容器

容器被建置後推送到容器註冊表,然後通過 IoT Edge 從容器註冊表部署到邊緣設備

下載模型後需要將其建置為容器然後推送到容器註冊表——一個用於儲存容器的線上位置。IoT Edge 可以從註冊表下載容器並推送到你的設備。

Azure 容器註冊表標誌

本課程中使用的容器註冊表是 Azure Container Registry。這不是免費服務因此為了節省費用請確保在完成後清理你的專案

💁 你可以在 Azure Container Registry 價格頁面 查看使用 Azure Container Registry 的成本。

任務 - 安裝 Docker

為了建置和部署分類器,你可能需要安裝 Docker

只有當你計劃從與安裝 IoT Edge 的設備不同的設備建置容器時,才需要這樣做——因為在安裝 IoT Edge 的過程中Docker 已經為你安裝好了。

  1. 如果你在與 IoT Edge 設備不同的設備上建置 Docker 容器,請按照 Docker 安裝頁面 的指導安裝 Docker Desktop 或 Docker 引擎。安裝後確保其正在運行。

任務 - 建立容器註冊表資源

  1. 在終端機或命令提示字元中執行以下命令以建立 Azure Container Registry 資源:

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

    <Container registry name> 替換為容器註冊表的唯一名稱,只能使用字母和數字。以 fruitqualitydetector 為基礎命名。此名稱將成為訪問容器註冊表的 URL 的一部分,因此需要全域唯一。

  2. 使用以下命令登入 Azure Container Registry

    az acr login --name <Container registry name>
    

    <Container registry name> 替換為你使用的容器註冊表名稱。

  3. 將容器註冊表設置為管理模式,以便生成密碼,執行以下命令:

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

    <Container registry name> 替換為你使用的容器註冊表名稱。

  4. 使用以下命令生成容器註冊表的密碼:

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

    <Container registry name> 替換為你使用的容器註冊表名稱。

    複製 PASSWORD 的值,稍後會用到。

任務 - 建置你的容器

從 Custom Vision 下載的是一個 DockerFile包含如何建置容器的指令以及將在容器內運行的應用程式代碼用於託管你的 Custom Vision 模型和 REST API。你可以使用 Docker 從 DockerFile 建置一個標記的容器,然後將其推送到容器註冊表。

🎓 容器會被賦予一個標籤,定義其名稱和版本。當需要更新容器時,可以使用相同的標籤但較新的版本進行建置。

  1. 打開終端機或命令提示字元,導航到從 Custom Vision 下載並解壓縮的模型資料夾。

  2. 執行以下命令以建置並標記映像:

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

    <platform> 替換為容器將運行的平台。如果你在 Raspberry Pi 上運行 IoT Edge設置為 linux/armhf,否則設置為 linux/amd64

    💁 如果你在運行 IoT Edge 的設備上執行此命令,例如 Raspberry Pi可以省略 --platform <platform> 部分,因為它默認為當前平台。

    <Container registry name> 替換為你使用的容器註冊表名稱。

    💁 如果你在 Linux 或 Raspberry Pi OS 上運行,可能需要使用 sudo 執行此命令。

    Docker 將建置映像,配置所需的所有軟體。映像將被標記為 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
    

任務 - 將容器推送到容器註冊表

  1. 使用以下命令將容器推送到容器註冊表:

    docker push <Container registry name>.azurecr.io/classifier:v1
    

    <Container registry name> 替換為你使用的容器註冊表名稱。

    💁 如果你在 Linux 上運行,可能需要使用 sudo 執行此命令。

    容器將被推送到容器註冊表。

    ➜  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. 為了驗證推送,你可以使用以下命令列出註冊表中的容器:

    az acr repository list --output table \
                           --name <Container registry name> 
    

    <Container registry name> 替換為你使用的容器註冊表名稱。

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

    你將在輸出中看到你的分類器。

部署你的容器

現在可以將容器部署到 IoT Edge 設備。要部署,你需要定義一個部署清單——一個列出將部署到邊緣設備的模組的 JSON 文件。

任務 - 建立部署清單

  1. 在電腦上某處建立一個名為 deployment.json 的新檔案。

  2. 在此檔案中新增以下內容:

    {
        "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
                        }
                    }
                }
            }
        }
    }
    

    💁 你可以在 code-deployment/deployment 資料夾中找到此檔案。

    將三個 <Container registry name> 替換為你使用的容器註冊表名稱。一個在 ImageClassifier 模組部分,另外兩個在 registryCredentials 部分。

    registryCredentials 部分中的 <Container registry password> 替換為你的容器註冊表密碼。

  3. 從包含部署清單的資料夾執行以下命令:

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

    <hub_name> 替換為你的 IoT Hub 名稱。

    映像分類器模組將被部署到你的邊緣設備。

任務 - 驗證分類器是否正在運行

  1. 連接到 IoT Edge 設備:

    • 如果你使用 Raspberry Pi 運行 IoT Edge通過終端機使用 ssh 或通過 VS Code 的遠端 SSH 會話連接。

    • 如果你在 Windows 上的 Linux 容器中運行 IoT Edge按照 驗證成功配置指南 的步驟連接到 IoT Edge 設備。

    • 如果你在虛擬機器上運行 IoT Edge可以使用你在建立 VM 時設置的 adminUsernamepassword,以及 IP 地址或 DNS 名稱進行 SSH 連接:

      ssh <adminUsername>@<IP address>
      

      或:

      ssh <adminUsername>@<DNS Name>
      

      當提示時輸入你的密碼。

  2. 連接後,執行以下命令以獲取 IoT Edge 模組列表:

    iotedge list
    

    💁 你可能需要使用 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. 使用以下命令檢查映像分類器模組的日誌:

    iotedge logs ImageClassifier
    

    💁 你可能需要使用 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)
    

任務 - 測試映像分類器

  1. 你可以使用 CURL 測試映像分類器,通過運行 IoT Edge 代理的電腦的 IP 地址或主機名進行測試。找到 IP 地址:

  2. 你可以使用以下 curl 命令測試容器與本地檔案:

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

    <IP address or name> 替換為運行 IoT Edge 的電腦的 IP 地址或主機名。將 <file_Name> 替換為要測試的檔案名稱。

    你將在輸出中看到預測結果:

    {
        "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": ""
    }
    

    💁 這裡不需要提供預測金鑰,因為這不是使用 Azure 資源。相反,安全性將基於內部網路的內部安全需求進行配置,而不是依賴公共端點和 API 金鑰。

使用你的 IoT Edge 設備

現在你的映像分類器已部署到 IoT Edge 設備,你可以從 IoT 設備使用它。

任務 - 使用你的 IoT Edge 設備

按照相關指南使用 IoT Edge 分類器進行映像分類:

模型重新訓練

在 IoT Edge 上運行映像分類器的一個缺點是它們未連接到你的 Custom Vision 專案。如果你查看 Custom Vision 的 預測 分頁,將看不到使用基於 Edge 的分類器分類的映像。

這是預期行為——映像不會被發送到雲端進行分類,因此它們不會在雲端中可用。使用 IoT Edge 的一個優點是隱私性,確保映像不會離開你的網路,另一個優點是能夠離線工作,因此當設備沒有網路連接時不依賴於上傳映像。缺點是改進你的模型——你需要實現另一種方式來儲存映像,這些映像可以手動重新分類以改進和重新訓練映像分類器。

思考如何上傳映像以重新訓練分類器。


🚀 挑戰

在邊緣設備上運行 AI 模型可能比在雲端更快——網路跳躍更短。它們也可能更慢,因為運行模型的硬體可能不如雲端強大。

進行一些計時,並比較調用邊緣設備是否比調用雲端更快或更慢?思考解釋差異或缺乏差異的原因。研究如何使用專用硬體在邊緣上更快地運行 AI 模型。

課後測驗

課後測驗

回顧與自學

作業

在邊緣運行其他服務


免責聲明
本文件已使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。