Bagikan melalui


Tutorial: Melakukan klasifikasi gambar di tepi dengan Layanan Visi Kustom

Berlaku untuk:Tanda centang IoT Edge 1.5 IoT Edge 1.5

Penting

IoT Edge 1.5 LTS adalah rilis yang didukung. IoT Edge 1.4 LTS adalah akhir masa pakai per 12 November 2024. Jika Anda menggunakan rilis sebelumnya, lihat Memperbarui IoT Edge.

Azure IoT Edge membuat solusi IoT lebih efisien dengan memindahkan beban kerja dari cloud ke tepi. Kemampuan ini meminjamkan dirinya dengan baik untuk layanan yang memproses data dalam jumlah besar, seperti model visi komputer. Azure AI Custom Vision memungkinkan Anda membangun pengklasifikasi gambar kustom dan menyebarkannya ke perangkat sebagai kontainer. Bersama-sama, kedua layanan ini memungkinkan pengguna menemukan wawasan dari gambar atau aliran video tanpa mentransfer semua data di luar situs terlebih dahulu. Custom Vision menyediakan pengklasifikasi yang membandingkan gambar dengan model terlatih untuk menghasilkan wawasan.

Misalnya, Custom Vision pada perangkat IoT Edge mungkin menentukan apakah jalan raya memiliki lalu lintas yang lebih tinggi atau lebih rendah dari biasanya, atau jika garasi parkir memiliki tempat parkir yang tersedia berturut-turut. insight ini dapat dibagikan dengan layanan lain untuk mengambil tindakan.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membangun pengklasifikasi gambar dengan Visi Kustom.
  • Kembangkan modul IoT Edge yang meminta server web Custom Vision di perangkat.
  • Kirim hasil pengklasifikasi gambar ke IoT Hub.

Diagram - Tutorial arsitektur, tahapan dan penyebaran pengklasifikasi

Jika Anda tidak memiliki akun Azure, buat akun gratis sebelum memulai.

Prasyarat

Petunjuk / Saran

Tutorial ini adalah versi yang disederhanakan dari Visi Kustom dan Azure IoT Edge pada proyek sampel Raspberry Pi 3. Ini berjalan pada VM cloud dan menggunakan gambar statis untuk melatih dan menguji pengklasifikasi gambar, yang membantu seseorang yang baru menggunakan Custom Vision di IoT Edge. Proyek sampel menggunakan perangkat keras fisik dan menyiapkan umpan kamera langsung untuk melatih dan menguji pengklasifikasi gambar, yang berguna bagi seseorang yang menjelajahi skenario kehidupan nyata yang lebih terperinci.

Membangun pengklasifikasi gambar dengan Visi Kustom

Untuk membangun pengklasifikasi gambar, buat proyek Custom Vision dan berikan gambar pelatihan. Untuk informasi selengkapnya tentang langkah-langkah yang Anda ambil di bagian ini, lihat Cara membuat pengklasifikasi dengan Visi Kustom.

Setelah membangun dan melatih pengklasifikasi gambar Anda, ekspor sebagai kontainer Docker dan sebarkan ke perangkat IoT Edge.

Membuat proyek baru

  1. Di browser web Anda, buka halaman web Visi Kustom.

  2. Pilih Masuk dan masuk menggunakan akun yang sama dengan yang Anda gunakan untuk mengakses sumber daya Azure.

  3. Pilih Proyek baru.

  4. Buat proyek Anda dengan nilai berikut:

    Bidang Nilai
    Nama Beri nama proyek Anda, seperti EdgeTreeClassifier.
    Deskripsi Deskripsi proyek opsional.
    Sumber daya Pilih salah satu grup sumber daya Azure yang menyertakan sumber daya Layanan Visi Kustom atau buat baru jika Anda belum menambahkannya.
    Jenis Proyek Klasifikasi
    Jenis Klasifikasi Multikelas (tag tunggal per gambar)
    Domain Umum (ringkas)
    Kapabilitas Ekspor Platform dasar (TensorFlow, CoreML, ONNX, ...)
  5. Pilih Buat proyek.

Unggah gambar dan latih pengklasifikasi Anda

Membuat pengklasifikasi gambar memerlukan serangkaian gambar pelatihan dan menguji gambar.

  1. Kloning atau unduh gambar sampel dari repo Cognitive-CustomVision-Windows ke komputer pengembangan lokal Anda.

    git clone https://github.com/Microsoft/Cognitive-CustomVision-Windows.git
    
  2. Kembali ke proyek Visi Kustom Anda dan pilih Tambahkan gambar.

  3. Telusuri repo git yang Anda kloning secara lokal, dan arahkan ke folder gambar pertama, Cognitive-CustomVision-Windows / Sampel / Images / Hemlock. Pilih semua 10 gambar di folder, lalu pilih Buka.

  4. Tambahkan tag hemlock ke grup gambar ini, lalu tekan enter untuk menerapkan tag.

  5. Pilih Unggah 10 file.

    Mengunggah file dengan hemlock ke Visi Kustom

  6. Saat gambar berhasil diunggah, pilih Selesai.

  7. Pilih Tambahkan gambar lagi.

  8. Telusuri folder gambar kedua, Cognitive-CustomVision-Windows / Samples / Images / Japanese Cherry. Pilih semua 10 gambar dalam folder lalu Buka.

  9. Tambahkan tag japanese cherry ke grup gambar ini dan tekan enter untuk menerapkan tag.

  10. Pilih Unggah 10 file. Saat gambar berhasil diunggah, pilih Selesai.

  11. Setelah menandai dan mengunggah kedua set gambar, pilih Latih untuk melatih pengklasifikasi.

Mengekspor pengklasifikasi Anda

  1. Setelah melatih pengklasifikasi Anda, pilih Ekspor pada halaman Performa dari pengklasifikasi.

    Mengekspor pengklasifikasi gambar yang Anda latih

  2. Pilih DockerFile untuk platform.

  3. Pilih Linux untuk versi.

  4. Pilih Ekspor.

  5. Setelah ekspor selesai, pilih Unduh dan simpan paket .zip secara lokal di komputer Anda. Ekstrak semua berkas dari paket. Gunakan file-file ini untuk membuat modul IoT Edge yang berisi server klasifikasi gambar.

Ketika mencapai titik ini, Anda telah selesai membuat dan melatih proyek Visi Kustom. Anda akan menggunakan file yang diekspor di bagian berikutnya, tetapi Anda sudah selesai dengan halaman web Visi Kustom.

Membuat perangkat Azure IoT Edge

Anda sekarang memiliki file untuk versi kontainer pengklasifikasi gambar Anda di komputer pengembangan Anda. Di bagian ini, Anda menyiapkan kontainer pengklasifikasi gambar untuk dijalankan sebagai modul IoT Edge. Anda juga membuat modul kedua yang memposting permintaan ke pengklasifikasi dan mengirim hasilnya sebagai pesan ke IoT Hub.

Membuat solusi baru

Solusi adalah cara logis untuk mengembangkan dan mengatur beberapa modul untuk satu penyebaran Azure IoT Edge. Solusi berisi kode untuk satu atau beberapa modul dan manifes penyebaran yang menyatakan cara mengonfigurasinya pada perangkat IoT Edge. Buat solusi menggunakan alat pengembangan baris perintah (CLI) Azure IoT Edge Dev Tool . Cara paling sederhana untuk menggunakan alat ini adalah dengan Menjalankan Kontainer Dev IoT Edge dengan Docker.

  1. Buat direktori bernama pengklasifikasi dan pindah ke direktori.

    mkdir CustomVisionSolution
    cd CustomVisionSolution
    
  2. Jalankan perintah init alat iotedgedev untuk membuat solusi IoT Edge baru. Di kontainer IoT Edge Dev Docker, masukkan perintah berikut:

    iotedgedev solution init --template python --module classifier
    

    Skrip init solusi iotedgedev meminta Anda untuk menyelesaikan beberapa langkah termasuk:

    • Mengautentikasi ke Azure
    • Memilih langganan Azure
    • Memilih atau membuat grup sumber daya
    • Memilih atau membuat Azure IoT Hub
    • Memilih atau membuat perangkat Azure IoT Edge

    Perintah membuat solusi IoT Edge baru dengan modul bernama pengklasifikasi di direktori kerja saat ini.

  3. Buka solusi di Visual Studio Code.

Menambahkan pengklasifikasi gambar Anda

Templat modul Python di Visual Studio Code berisi beberapa kode sampel yang dapat Anda jalankan untuk menguji IoT Edge. Anda tidak akan menggunakan kode itu dalam skenario ini. Sebagai gantinya, gunakan langkah-langkah di bagian ini untuk mengganti kode sampel dengan kontainer pengklasifikasi gambar yang Anda ekspor sebelumnya.

  1. Di penjelajah file Anda, telusuri paket Visi Kustom yang Anda unduh dan ekstrak. Salin semua isi dari paket yang diekstrak. Paket berisi dua folder, aplikasi dan azureml, dan dua file, Dockerfile dan README.

  2. Di penjelajah file, telusuri direktori tempat Anda memberi tahu Visual Studio Code untuk membuat solusi Azure IoT Edge Anda.

  3. Buka folder modul pengklasifikasi. Jika menggunakan nama yang disarankan di bagian sebelumnya, struktur folder akan terlihat seperti CustomVisionSolution / modules / classifier.

  4. Tempelkan file ke folder pengklasifikasi.

  5. Kembali ke jendela Visual Studio Code. Ruang kerja solusi Anda sekarang telah menampilkan file pengklasifikasi gambar di folder modul.

  6. Ganti file Dockerfile.amd64 asli dengan Dockerfile dari paket visi kustom dengan menghapus Dockerfile.amd64 asli dan mengganti nama Dockerfile menjadi Dockerfile.amd64.

  7. Simpan perubahan Anda.

Membuat modul kamera simulasi

Dalam penyebaran visi kustom nyata, kamera menyediakan gambar langsung atau streaming video. Untuk skenario ini, Anda akan mensimulasikan kamera dengan membuat modul yang mengirimkan gambar uji ke pengklasifikasi gambar.

Di bagian ini, Anda menambahkan modul baru ke CustomVisionSolution yang sama dan menyediakan kode untuk membuat kamera yang disimulasikan.

  1. Gunakan alat iotedgedev tambahkan modul baru ke solusi. Perintah membuat folder baru bernama cameracapture di folder modul solusi Anda.

    iotedgedev solution add --template python cameracapture
    
  2. Buka file main.py di folder modules / cameracapture.

  3. Ganti semua file dengan kode berikut. Kode sampel ini mengirim permintaan POST ke layanan pemrosesan gambar yang berjalan di modul pengklasifikasi. Kami menyediakan kontainer modul ini dengan gambar sampel untuk digunakan dalam permintaan. Hal ini kemudian mengemas respons sebagai pesan Azure IoT Hub dan mengirimkannya ke antrean output.

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license. See LICENSE file in the project root for
    # full license information.
    
    import time
    import sys
    import os
    import requests
    import json
    from azure.iot.device import IoTHubModuleClient, Message
    
    # global counters
    SENT_IMAGES = 0
    
    # global client
    CLIENT = None
    
    # Send a message to IoT Hub
    # Route output1 to $upstream in deployment.template.json
    def send_to_hub(strMessage):
        message = Message(bytearray(strMessage, 'utf8'))
        CLIENT.send_message_to_output(message, "output1")
        global SENT_IMAGES
        SENT_IMAGES += 1
        print( "Total images sent: {}".format(SENT_IMAGES) )
    
    # Send an image to the image classifying server
    # Return the JSON response from the server with the prediction result
    def sendFrameForProcessing(imagePath, imageProcessingEndpoint):
        headers = {'Content-Type': 'application/octet-stream'}
    
        with open(imagePath, mode="rb") as test_image:
            try:
                response = requests.post(imageProcessingEndpoint, headers = headers, data = test_image)
                print("Response from classification service: (" + str(response.status_code) + ") " + json.dumps(response.json()) + "\n")
            except Exception as e:
                print(e)
                print("No response from classification service")
                return None
    
        return json.dumps(response.json())
    
    def main(imagePath, imageProcessingEndpoint):
        try:
            print ( "Simulated camera module for Azure IoT Edge. Press Ctrl-C to exit." )
    
            try:
                global CLIENT
                CLIENT = IoTHubModuleClient.create_from_edge_environment()
            except Exception as iothub_error:
                print ( "Unexpected error {} from IoTHub".format(iothub_error) )
                return
    
            print ( "The sample is now sending images for processing and will indefinitely.")
    
            while True:
                classification = sendFrameForProcessing(imagePath, imageProcessingEndpoint)
                if classification:
                    send_to_hub(classification)
                time.sleep(10)
    
        except KeyboardInterrupt:
            print ( "IoT Edge module sample stopped" )
    
    if __name__ == '__main__':
        try:
            # Retrieve the image location and image classifying server endpoint from container environment
            IMAGE_PATH = os.getenv('IMAGE_PATH', "")
            IMAGE_PROCESSING_ENDPOINT = os.getenv('IMAGE_PROCESSING_ENDPOINT', "")
        except ValueError as error:
            print ( error )
            sys.exit(1)
    
        if ((IMAGE_PATH and IMAGE_PROCESSING_ENDPOINT) != ""):
            main(IMAGE_PATH, IMAGE_PROCESSING_ENDPOINT)
        else: 
            print ( "Error: Image path or image-processing endpoint missing" )
    
  4. Simpan file main.py.

  5. Buka file requirements.txt.

  6. Tambahkan baris baru pustaka untuk disertakan dalam kontainer.

    requests
    
  7. Simpan file requirements.txt.

Menambahkan gambar uji ke kontainer

Alih-alih menggunakan kamera asli untuk menyediakan umpan gambar pada skenario ini, kita akan menggunakan gambar uji tunggal. Gambar uji disertakan dalam repo GitHub yang Anda unduh untuk gambar pelatihan sebelumnya dalam tutorial ini.

  1. Buka gambar uji, yang terletak di Cognitive-CustomVision-Windows / Sampel / Gambar / Uji.

  2. Salin test_image.jpg

  3. Telusuri ke direktori solusi IoT Edge Anda dan tempelkan gambar pengujian di foldercameracapture / . Gambar harus berada di folder yang sama dengan file main.py yang Anda edit di bagian sebelumnya.

  4. Di Visual Studio Code, buka file Dockerfile.amd64 untuk modul cameracapture.

  5. Setelah baris yang menetapkan direktori kerja, WORKDIR /app, tambahkan baris kode berikut:

    ADD ./test_image.jpg .
    
  6. Simpan Dockerfile.

Menyiapkan manifes penyebaran

Sejauh ini dalam tutorial ini, Anda telah melatih model visi kustom untuk mengklasifikasikan gambar pohon dan mengemas model tersebut sebagai modul IoT Edge. Kemudian, Anda membuat modul kedua yang mengkueri server klasifikasi gambar dan melaporkan hasilnya ke IoT Hub. Sekarang, Anda siap untuk membuat manifes penyebaran yang memberi tahu perangkat IoT Edge cara memulai dan menjalankan kedua modul ini bersama-sama.

Ekstensi Azure IoT Edge untuk Visual Studio Code menyediakan templat di setiap solusi Azure IoT Edge untuk membantu Anda membuat manifes penyebaran.

  1. Buka deployment.template.json di folder solusi.

  2. Atur kredensial registri untuk modul dalam manifes penyebaran.

    "registryCredentials": {
        "<registryName>": {
            "username": "<AcrUsername>",
            "password": "<AcrPassword>",
            "address": "<registryName>.azurecr.io"
        }
    }
    

    Ganti <registryName> dengan nama registri kontainer Azure Anda, dan ganti <AcrUsername> dan <AcrPassword> dengan nama pengguna dan kata sandi untuk registri Anda. Anda dapat menemukan nilai-nilai ini di bagian Kunci akses dari registri kontainer Azure Anda di portal Microsoft Azure.

  3. Temukan bagian modul , yang berisi tiga modul: dua yang Anda buat, pengklasifikasi dan cameracapture, dan yang ketiga disertakan secara default, tempSensor.

  4. Hapus modul tempSensor dengan semua parameternya. Modul ini menyediakan data sampel untuk skenario pengujian, tetapi tidak diperlukan dalam penyebaran ini.

  5. Jika Anda menamai modul klasifikasi gambar selain classifier, periksa namanya sekarang dan pastikan semuanya menggunakan huruf kecil. Modul cameracapture memanggil modul pengklasifikasi menggunakan pustaka 'requests' yang memformat semua permintaan dalam huruf kecil, dan IoT Edge sensitif terhadap huruf besar-kecil.

  6. Untuk setiap modul sistem edgeAgent dan edgeHub, ubah nilai createOptions menjadi versi bersifat string. Contohnya:

    "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    
  7. Untuk setiap modul sistem edgeAgent dan edgeHub, ubah versi gambar ke versi terbaru 1.5. Contohnya:

    "image": "mcr.microsoft.com/azureiotedge-agent:1.5",
    "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
    
  8. Perbarui parameter createOptions untuk modul classifier ke versi string. Contohnya:

    "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    
  9. Perbarui parameter createOptions untuk modul cameracapture dengan JSON berikut. Informasi ini membuat variabel lingkungan dalam kontainer modul yang diambil dalam proses main.py. Termasuk informasi ini dalam manifes penyebaran memungkinkan Anda mengubah gambar atau titik akhir tanpa membangun kembali gambar modul.

    "createOptions": "{\"Env\":[\"IMAGE_PATH=test_image.jpg\",\"IMAGE_PROCESSING_ENDPOINT=http://classifier/image\"]}"
    

    Jika Anda menamai modul Visi Kustom Anda selain pengklasifikasi, perbarui nilai titik akhir pemrosesan gambar agar sesuai.

    Misalnya, konfigurasi pengklasifikasi dan cameracapture harus mirip dengan:

    "modules": {
        "classifier": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
                "image": "${MODULES.classifier}",
                "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
            }
        },
        "cameracapture": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
                "image": "${MODULES.cameracapture}",
                "createOptions": "{\"Env\":[\"IMAGE_PATH=test_image.jpg\",\"IMAGE_PROCESSING_ENDPOINT=http://classifier/image\"]}"
            }
        }
    }
    
  10. Simpan file deployment.template.json.

Membangun dan mendorong solusi Azure IoT Edge

Setelah membuat modul dan mengonfigurasi templat manifes penyebaran, buat gambar kontainer dan dorong ke registri kontainer Anda.

Setelah gambar berada di registri Anda, Anda dapat menyebarkan solusi ke perangkat Azure IoT Edge. Anda dapat mengatur modul pada perangkat melalui IoT Hub. Di bagian ini, Anda menyiapkan akses ke IoT Hub, lalu menggunakan Azure CLI untuk menyebarkan solusi Anda ke perangkat IoT Edge Anda.

Pertama, buat dan unggah solusi ke registri kontainer.

  1. Buka terminal terintegrasi Visual Studio Code dengan memilih Lihat>Terminal.

  2. Masuk ke Docker dengan memasukkan perintah berikut di terminal menggunakan nama pengguna, kata sandi, dan server masuk dari registri kontainer Azure. Anda dapat mengambil nilai ini dari bagian Kunci akses registri Anda di portal Azure.

    docker login -u <AcrUsername> -p <AcrPassword> <AcrLoginServer>
    

    Anda mungkin menerima peringatan keamanan yang merekomendasikan penggunaan --password-stdin. Meskipun praktik terbaik tersebut disarankan untuk skenario produksi, praktik terbaik berada di luar cakupan tutorial ini. Untuk mengetahui informasi selengkapnya, lihat referensi masuk docker.

  3. Gunakan Dockerfile modul untuk membuat dan menandai gambar Docker modul.

    docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>" 
    

    Misalnya, untuk membangun gambar untuk registri lokal atau registri kontainer Azure, gunakan perintah berikut:

    
    # Build and tag the image for an Azure Container Registry. Replace <AcrRegistryName> with your own registry name.
    
    docker build --rm -f "./modules/classifier/Dockerfile.amd64" -t <AcrRegistryName>.azurecr.io/classifier:0.0.1-amd64 "./modules/classifier"
    docker build --rm -f "./modules/cameracapture/Dockerfile.amd64" -t <AcrRegistryName>.azurecr.io/cameracapture:0.0.1-amd64 "./modules/cameracapture"
    

Mendorong gambar Docker modul

Berikan kredensial registri kontainer Anda ke Docker sehingga dapat mendorong gambar kontainer Anda ke penyimpanan di registri.

  1. Masuk ke Docker dengan kredensial Azure Container Registry (ACR).

    docker login -u <AcrUsername> -p <AcrPassword> <AcrLoginServer>
    

    Anda mungkin menerima peringatan keamanan yang merekomendasikan penggunaan --password-stdin. Meskipun itu adalah praktik terbaik yang direkomendasikan untuk skenario produksi, itu di luar cakupan tutorial ini. Untuk mengetahui informasi selengkapnya, lihat referensi masuk docker.

  2. Masuk ke Azure Container Registry. Anda perlu Menginstal Azure CLI untuk menggunakan az perintah . Perintah ini meminta nama pengguna dan kata sandi Anda yang ditemukan di registri kontainer Anda di kunci Akses Pengaturan>.

    az acr login -n <AcrRegistryName>
    

    Petunjuk / Saran

    Jika Anda keluar kapan saja dalam tutorial ini, ulangi langkah-langkah masuk Docker dan Azure Container Registry untuk melanjutkan.

  3. Dorong gambar modul Anda ke registri lokal atau registri kontainer.

    docker push <ImageName>
    

    Contohnya:

    # Push the Docker image to an Azure Container Registry. Replace <AcrRegistryName> with your Azure Container Registry name.
    
    az acr login --name <AcrRegistryName>
    docker push <AcrRegistryName>.azurecr.io/classifier:0.0.1-amd64
    docker push <AcrRegistryName>.azurecr.io/cameracapture:0.0.1-amd64
    

Memperbarui templat penyebaran

Perbarui file deployment.template.json dengan lokasi gambar registri kontainer. Ubah nilai gambar ke gambar yang Anda unggah ke registri. Misalnya, ganti <AcrRegistryName> dengan nama registri Anda dalam nilai gambar untuk modul pengklasifikasi dan cameracapture:

"classifier": {
    "version": "1.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "<AcrRegistryName>.azurecr.io/classifier:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    },
    "cameracapture": {
        "version": "1.0",
        "type": "docker",
        "status": "running",
        "restartPolicy": "always",
        "settings": {
            "image": "<AcrRegistryName>.azurecr.io/cameracapture:0.0.1-amd64",
            "createOptions": "{\"Env\":[\"IMAGE_PATH=test_image.jpg\",\"IMAGE_PROCESSING_ENDPOINT=http://classifier/image\"]}"
        }
    }
}

Manifes penyebaran akhir terlihat mirip seperti berikut:

{
  "$schema-template": "4.0.0",
  "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "<AcrRegistryName>": {
                "username": "<AcrUserName>",
                "password": "<AcrPassword>",
                "address": "<AcrRegistryName>.azurecr.io"
              }
            }
          }
        },
        "systemModules": {
          "edgeAgent": {
            "type": "docker",
            "settings": {
              "image": "mcr.microsoft.com/azureiotedge-agent:1.5",
              "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
            }
          },
          "edgeHub": {
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
              "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
            }
          }
        },
        "modules": {
          "classifier": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "<AcrRegistryName>.azurecr.io/classifier:0.0.1-amd64",
              "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
            }
          },
          "cameracapture": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "<AcrRegistryName>.azurecr.io/cameracapture:0.0.1-amd64",
              "createOptions": "{\"Env\":[\"IMAGE_PATH=test_image.jpg\",\"IMAGE_PROCESSING_ENDPOINT=http://classifier/image\"]}"
            }
          }
        }
      }
    },
    "$edgeHub": {
      "properties.desired": {
        "schemaVersion": "1.2",
        "routes": {
          "sensorToclassifier": "FROM /messages/modules/tempSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/classifier/inputs/input1\")",
          "classifierToIoTHub": "FROM /messages/modules/classifier/outputs/* INTO $upstream",
          "cameracaptureToIoTHub": "FROM /messages/modules/cameracapture/outputs/* INTO $upstream"
        },
        "storeAndForwardConfiguration": {
          "timeToLiveSecs": 7200
        }
      }
    }
  }
}

Menyebarkan modul ke perangkat

Verifikasi bahwa gambar kontainer bawaan disimpan di registri kontainer Anda. Kemudian, sebarkan ke perangkat menggunakan manifes penyebaran deployment.template.json yang telah disiapkan untuk skenario Anda.

Gunakan perintah set-modul IoT Edge Azure CLI untuk menyebarkan modul ke Azure IoT Hub. Misalnya, untuk menyebarkan modul yang ditentukan dalam file deployment.template.json ke IoT Hub <IotHubName> untuk DeviceName< perangkat >IoT Edge, gunakan perintah berikut. Ganti nilai untuk hub-name, device-id, dan login IoT Hub string koneksi dengan milik Anda sendiri.

az iot edge set-modules --hub-name <IotHubName> --device-id <DeviceName> --content ./deployment.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"

Petunjuk / Saran

Anda dapat menemukan string koneksi IoT Hub Anda termasuk kunci akses bersama di portal Azure. Buka pengaturan>akses bersama iothubowner.

Pastikan perangkat IoT Edge Anda berjalan.

Pada perangkat Anda, luaskan Modul untuk melihat daftar modul yang disebarkan dan berjalan. Pilih tombol refresh. Anda melihat modul pengklasifikasi dan cameracapture baru yang berjalan bersama dengan $edgeAgent dan $edgeHub.

Anda juga dapat memeriksa untuk melihat bahwa semua modul aktif dan berjalan di perangkat Anda sendiri. Pada perangkat Azure IoT Edge Anda, jalankan perintah berikut untuk melihat status modul.

iotedge list

Mungkin perlu beberapa menit agar modul dimulai. Runtime Azure IoT Edge perlu menerima manifes penyebaran barunya, menarik gambar modul dari runtime kontainer, lalu memulai setiap modul baru.

Melihat hasil klasifikasi

Di perangkat Anda, lihat log modul cameracapture untuk melihat pesan yang dikirim dan mengonfirmasi bahwa mereka diterima oleh IoT Hub.

iotedge logs cameracapture

Misalnya, Anda akan melihat output seperti berikut:

admin@vm:~$ iotedge logs cameracapture
Simulated camera module for Azure IoT Edge. Press Ctrl-C to exit.
The sample is now sending images for processing and will indefinitely.
Response from classification service: (200) {"created": "2023-07-13T17:38:42.940878", "id": "", "iteration": "", "predictions": [{"boundingBox": null, "probability": 1.0, "tagId": "", "tagName": "hemlock"}], "project": ""}

Total images sent: 1
Response from classification service: (200) {"created": "2023-07-13T17:38:53.444884", "id": "", "iteration": "", "predictions": [{"boundingBox": null, "probability": 1.0, "tagId": "", "tagName": "hemlock"}], "project": ""}

Catatan

Awalnya, Anda mungkin melihat kesalahan koneksi dalam output dari modul cameracapture karena penundaan antara modul yang disebarkan dan dimulai.

Modul cameracapture secara otomatis memasang ulang koneksi hingga berhasil. Setelah berhasil menyambungkan, Anda akan melihat pesan klasifikasi gambar yang diharapkan.

Hasil dari modul Custom Vision, yang dikirim sebagai pesan dari modul pengambilan gambar kamera, termasuk probabilitas apakah gambar tersebut adalah pohon hemlock atau pohon ceri. Karena gambar tersebut adalah hemlock, Anda melihat probabilitasnya sebagai 1.0.

Membersihkan sumber daya

Jika Anda berencana untuk melanjutkan ke artikel yang direkomendasikan berikutnya, pertahankan sumber daya dan konfigurasi yang Anda buat dan gunakan kembali. Anda juga dapat tetap menggunakan perangkat IoT Edge yang sama sebagai perangkat uji.

Jika tidak, hapus konfigurasi lokal dan sumber daya Azure yang Anda gunakan dalam artikel ini untuk menghindari biaya.

Menghapus sumber daya Azure

Menghapus sumber daya Azure dan grup sumber daya tidak dapat diubah. Pastikan Anda tidak menghapus grup atau sumber daya yang salah secara tidak sengaja. Jika Anda membuat IoT Hub di dalam grup sumber daya yang ada yang memiliki sumber daya yang ingin Anda simpan, hapus hanya sumber daya IoT Hub itu sendiri, bukan grup sumber daya.

Untuk menghapus sumber daya:

  1. Masuk ke portal Azure, lalu pilih Grup sumber daya.
  2. Pilih nama grup sumber daya yang berisi sumber daya pengujian IoT Edge Anda.
  3. Tinjau daftar sumber daya yang dimuat grup sumber daya Anda. Jika ingin menghapus semuanya, Anda dapat memilih Hapus grup sumber daya. Jika Anda hanya ingin menghapus beberapa dari mereka, Anda dapat memilih setiap sumber daya untuk menghapusnya satu per satu.

Langkah berikutnya

Dalam tutorial ini, Anda melatih model Visi Kustom dan menyebarkannya sebagai modul ke perangkat Azure IoT Edge. Kemudian Anda membangun modul yang dapat membuat kueri layanan klasifikasi gambar dan melaporkan hasilnya kembali ke Azure IoT Hub.

Lanjutkan ke tutorial berikutnya untuk mempelajari cara lain agar Azure IoT Edge dapat membantu Anda mengubah data menjadi wawasan bisnis di tepi.