Öğretici: Özel Görüntü İşleme Hizmeti ile uçta görüntü sınıflandırması gerçekleştirme

Şunun için geçerlidir:IoT Edge 1.6 onay işareti IoT Edge 1.6

Önemli

IoT Edge 1.6 LTS desteklenen sürümdür. IoT Edge 1.5 LTS desteği 10 Kasım 2026'da sona erer; IoT Edge 1.4 LTS, 12 Kasım 2024'te ömrünün sonuna ulaştı. Önceki bir sürümü kullanıyorsanız bkz. Update IoT Edge.

Azure IoT Edge, iş yüklerini buluttan uçlara taşıyarak IoT çözümlerini daha verimli hale getirir. Bu özellik, görüntü işleme modelleri gibi büyük miktarda veriyi işleyen hizmetlere iyi bir şekilde yardımcı olur. Azure Yapay Zeka Özel Görüntü İşleme özel görüntü sınıflandırıcıları oluşturmanıza ve bunları cihazlara kapsayıcı olarak dağıtmanıza olanak tanır. Bu iki hizmet birlikte, kullanıcıların önce tüm verileri site dışına aktarmadan görüntülerden veya video akışlarından içgörüler bulmalarını sağlar. Özel Görüntü İşleme, içgörüler oluşturmak için görüntüleri eğitilmiş bir modelle karşılaştıran bir sınıflandırıcı sağlar.

Örneğin, IoT Edge bir cihazdaki Özel Görüntü İşleme, bir otoyolda normalden daha yüksek veya daha düşük trafik olup olmadığını veya bir otoparkın arka arkaya kullanılabilir park yerlerinin olup olmadığını belirleyebilir. Bu içgörüler eylem gerçekleştirmek üzere başka bir hizmetle paylaşılabilir.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Özel Görüntü İşleme ile bir görüntü sınıflandırıcı oluşturun.
  • Cihazdaki Özel Görüntü İşleme web sunucusunu sorgulayan bir IoT Edge modülü geliştirin.
  • Görüntü sınıflandırıcı sonuçlarını IoT Hub gönderin.

Diyagram - Öğretici mimarisi, sınıflandırıcıyı hazırlama ve dağıtma

Azure hesabınız yoksa başlamadan önce free hesabı oluşturun.

Önkoşullar

İpucu

Bu öğretici, Custom Vision ve Azure IoT Edge'in Raspberry Pi 3 örnek projesinin basitleştirilmiş bir sürümüdür. Bulut VM'sinde çalışır ve görüntü sınıflandırıcısını eğitmek ve test etmek için statik görüntüler kullanır ve bu da IoT Edge özel görüntü işlemeye yeni başlayan birine yardımcı olur. Örnek proje fiziksel donanım kullanır ve görüntü sınıflandırıcısını eğitmek ve test etmek için canlı bir kamera akışı ayarlar. Bu, daha ayrıntılı bir gerçek yaşam senaryosu keşfeden kişiler için yararlıdır.

Custom Vision ile bir görüntü sınıflandırıcı oluşturma

Görüntü sınıflandırıcısı oluşturmak için bir Özel Görüntü İşleme projesi oluşturun ve eğitim görüntüleri sağlayın. Bu bölümde gerçekleştireceğiniz adımlar hakkında daha fazla bilgi için bkz. Özel Görüntü İşleme Hizmeti ile sınıflandırıcı derleme.

Görüntü sınıflandırıcınızı derleyip eğitdikten sonra Docker kapsayıcısı olarak dışarı aktarın ve IoT Edge bir cihaza dağıtın.

Yeni proje oluşturma

  1. Web tarayıcınızda Özel Görüntü İşleme Hizmeti web sayfasına gidin.

  2. Sign in öğesini seçin ve Azure kaynaklara erişmek için kullandığınız hesapla oturum açın.

  3. Yeni proje'yi seçin.

  4. Aşağıdaki değerlerle bir proje oluşturun:

    Alan Değer
    Adı Projeniz için bir ad belirleyin, örneğin: EdgeTreeClassifier.
    Açıklama İsteğe bağlı proje açıklaması.
    Kaynak Özel Görüntü İşleme Hizmeti kaynağı içeren Azure kaynak gruplarınızdan birini seçin veya henüz eklemediyseniz yeni oluşturun.
    Proje Türleri sınıflandırma
    Sınıflandırma Türleri Multiclass (single tag per image) (Çok sınıflı (görüntü başına tek bir etiket))
    Etki alanları General (compact) (Genel (kompakt))
    Dışarı Aktarma Özellikleri Temel platformlar (TensorFlow, CoreML, ONNX, ...)
  5. Proje oluştur'u seçin.

Görüntüleri yükleyin ve sınıflandırıcınızı eğitin

Görüntü sınıflandırıcısı oluşturmak için bir dizi eğitim görüntüsü ve test görüntüsü gerekir.

  1. Cognitive-CustomVision-Windows deposundaki örnek görüntüleri yerel geliştirme makinenize kopyalayın veya indirin.

    git clone https://github.com/Microsoft/Cognitive-CustomVision-Windows.git
    
  2. Özel Görüntü İşleme Hizmeti projenize dönün ve Add images (Görüntü ekle) öğesini seçin.

  3. Yerel olarak kopyaladığınız git deposuna gidin ve Cognitive-CustomVision-Windows / Örnekler / Görüntüler / Hemlock ilk görüntü klasörüne gidin. Klasördeki 10 görüntünün tümünü ve ardından Aç'ı seçin.

  4. Bu görüntü grubuna hemlock etiketini ekleyin ve etiketi uygulamak için Enter tuşuna basın.

  5. 10 dosyayı karşıya yükle seçeneğini seçin.

    Hemlock etiketli dosyaları Özel Görü'ye yükle

  6. Görüntüler başarıyla karşıya yüklendikten sonra Done (Bitti) öğesini seçin.

  7. Yeniden Add images (Görüntü ekle) öğesini seçin.

  8. Cognitive-CustomVision-Windows / Samples / Images / Japanese Cherry ikinci resim klasörüne göz atın. Klasördeki 10 görüntüyü ve ardından Open (Aç) öğesini seçin.

  9. Bu görüntü grubuna japanese cherry etiketini ekleyin ve Enter tuşuna basarak etiketi uygulayın.

  10. 10 dosyayı karşıya yükle seçeneğini seçin. Görüntüler başarıyla karşıya yüklendikten sonra Done (Bitti) öğesini seçin.

  11. Her iki görüntü kümesini de etiketleyip karşıya yükledikten sonra sınıflandırıcıyı eğitmek için Eğit'i seçin.

Sınıflandırıcınızı dışarı aktarma

  1. Sınıflandırıcınızı eğittikten sonra sınıflandırıcının Performance (Performans) sayfasında Export (Dışarı aktar) öğesini seçin.

    Eğitilen görüntü sınıflandırıcınızı dışarı aktarma

  2. Platform için DockerFile seçin.

  3. Sürüm olarak Linux seçin.

  4. Dışa aktar'ı seçin.

  5. Dışarı aktarma tamamlandıktan sonra İndir'i seçin ve .zip paketini bilgisayarınıza yerel olarak kaydedin. Paketteki tüm dosyaları ayıklayın. Görüntü sınıflandırma sunucusunu içeren bir IoT Edge modülü oluşturmak için bu dosyaları kullanın.

Custom Vision projenizi oluşturma ve eğitme adımlarını tamamladınız. Dışarı aktarılan dosyaları bir sonraki bölümde kullanacaksınız ancak Özel Görüntü İşleme Hizmeti web sayfasıyla işiniz bitti.

IoT Edge çözümü oluşturma

Artık geliştirme makinenizde görüntü sınıflandırıcınızın kapsayıcı sürümüne ait dosyalara sahipsiniz. Bu bölümde, görüntü sınıflandırıcı kapsayıcısını IoT Edge modülü olarak çalışacak şekilde ayarlarsınız. Ayrıca, istekleri sınıflandırıcıya gönderen ve sonuçları IoT Hub ileti olarak gönderen ikinci bir modül oluşturursunuz.

Yeni çözüm oluşturma

Çözüm, tek bir IoT Edge dağıtımı için birden çok modül geliştirmenin ve düzenlemenin mantıksal bir yoludur. Çözüm, bir veya daha fazla modülün kodunu ve bunların IoT Edge bir cihazda nasıl yapılandırıldığını bildiren dağıtım bildirimini içerir. Azure IoT Edge Geliştirme Aracı komut satırı (CLI) geliştirme aracını kullanarak çözümü oluşturun. Aracı kullanmanın en basit yolu Docker ile IoT Edge Geliştirme Kapsayıcısını çalıştırmaktır.

  1. Sınıflandırıcı adlı bir dizin oluşturun ve o dizine geçin.

    mkdir CustomVisionSolution
    cd CustomVisionSolution
    
  2. Yeni bir IoT Edge çözümü oluşturmak için iotedgedev tool init komutunu çalıştırın. IoT Edge Dev Docker kapsayıcısında aşağıdaki komutu girin:

    iotedgedev solution init --template python --module classifier
    

    iotedgedev çözümü init betiği aşağıdakiler gibi birkaç adımı tamamlamanızı ister:

    • Azure kimlik doğrulaması
    • Azure aboneliği seçme
    • Kaynak grubu seçme veya oluşturma
    • Azure IoT Hub seçme veya oluşturma
    • Azure IoT Edge cihazı seçme veya oluşturma

    Komut, geçerli çalışma dizininde classifier adlı modülle yeni bir IoT Edge çözümü oluşturur.

  3. Çözümü Visual Studio Code içinde açın.

Görüntü sınıflandırıcınızı ekleme

Visual Studio Code'daki Python modülü şablonu, IoT Edge test etmek için çalıştırabileceğiniz bazı örnek kodlar içerir. Bu senaryoda bu kodu kullanmayacaksınız. Bunun yerine bu bölümdeki adımları kullanarak örnek kodu daha önceden dışarı aktardığınız görüntü sınıflandırıcı kapsayıcısıyla değiştirin.

  1. Dosya gezgininizde indirip ayıkladığınız Özel Görüntü İşleme Hizmeti paketine göz atın. Ayıklanan paketin içeriğin tamamını kopyalayın. app ve azureml adlı iki klasörün yanı sıra Dockerfile ve README adlı iki dosyanın bulunması gerekir.

  2. Dosya gezgininizde, Visual Studio Code IoT Edge çözümünüzü oluşturmasını istediğiniz dizine göz atın.

  3. Sınıflandırıcı modülü klasörünü açın. Önceki bölümde önerilen adları kullandıysanız klasör yapısı şu şekilde olacaktır: CustomVisionSolution / modules / classifier.

  4. Dosyaları classifier klasörüne yapıştırın.

  5. Visual Studio Code penceresine dönün. Çözüm çalışma alanınızda görüntü sınıflandırıcı dosyaları modül klasöründe görünmelidir.

  6. Özgün Dockerfile.amd64 dosyasını silip özel görüş paketinden Dockerfile dosyasını alarak DockerfileDockerfile.amd64 olarak yeniden adlandırarak değiştirin.

  7. Değişikliklerinizi kaydedin.

Sanal kamera modülü oluşturma

Gerçek bir özel görüntü işleme dağıtımında kamera canlı görüntüler veya video akışları sağlar. Bu senaryo için görüntü sınıflandırıcıya test görüntüsü gönderen bir modül oluşturarak kamera simülasyonu yapabilirsiniz.

Bu bölümde aynı CustomVisionSolution öğesine yeni bir modül ekleyecek ve sanal kamerayı oluşturmak için gerekli kodu sağlayacaksınız.

  1. iotedgedev aracını kullanarak çözüme yeni bir modül ekleyin. komutu çözümünüzün modules klasöründe cameracapture adlı yeni bir klasör oluşturur.

    iotedgedev solution add --template python cameracapture
    
  2. modules / klasöründeki main.py dosyasını açın.

  3. Dosyanın tamamını aşağıdaki kod ile değiştirin. Bu kod örneği, sınıflandırıcı modülünde çalışan görüntü işleme hizmetine POST istekleri gönderir. Bu modül kapsayıcısı, isteklerde kullanabileceğiniz örnek bir görüntüyle sunulmaktadır. Ardından yanıtı bir IoT Hub iletisi olarak paketler ve bir çıkış kuyruğuna gönderir.

    # 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. main.py dosyasını kaydedin.

  5. requirements.txt dosyasını açın.

  6. Kapsayıcıya dahil etmek için yeni bir kitaplık satırı ekleyin.

    requests
    
  7. requirements.txt dosyasını kaydedin.

Kapsayıcıya test görüntüsü ekleme

Bu senaryoda görüntü beslemesi sağlamak için gerçek bir kamera kullanmak yerine tek bir test amaçlı görüntü kullanacağız. Bu öğreticinin önceki bölümlerinde eğitim görüntüleri için indirdiğiniz GitHub deposuna bir test görüntüsü eklenmiştir.

  1. Test görüntüsüne gidin, Cognitive-CustomVision-Windows / Samples / Images / Test konumunda bulunur.

  2. test_image.jpg dosyasını kopyalayın

  3. IoT Edge çözüm dizininize gidin ve test görüntüsünü modules / cameracapture klasörüne yapıştırın. Görüntü önceki bölümde düzenlediğiniz main.py dosyasıyla aynı klasörde olmalıdır.

  4. Visual Studio Code'da cameracapture modülü için Dockerfile.amd64 dosyasını açın.

  5. Çalışma dizinini belirleyen WORKDIR /app satırından sonra şu kod satırını ekleyin:

    ADD ./test_image.jpg .
    
  6. Dockerfile dosyasını kaydedin.

Dağıtım bildirimi hazırlama

Şu ana kadar bu öğreticide, ağaç görüntülerini sınıflandırmak için özel bir görüntü işleme modeli eğitdiniz ve bu modeli IoT Edge modülü olarak paketlediniz. Ardından görüntü sınıflandırma sunucusunu sorgulayan ve sonuçlarını IoT Hub bildiren ikinci bir modül oluşturdunuz. Artık bir IoT Edge cihazına bu iki modülü nasıl başlatıp çalıştıracağını bildiren dağıtım bildirimini oluşturmaya hazırsınız.

Visual Studio Code için IoT Edge uzantısı, her IoT Edge çözümünde bir dağıtım bildirimi oluşturmanıza yardımcı olacak bir şablon sağlar.

  1. Çözüm klasöründeki deployment.template.json dosyasını açın.

  2. Dağıtım bildirimindeki modüllerin kayıt defteri kimlik bilgilerini ayarlayın.

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

    <registryName> değerini Azure kapsayıcı kayıt defterinizin adıyla değiştirin. ve <AcrUsername> ve <AcrPassword> değerini kayıt defterinizin kullanıcı adı ve parolasıyla değiştirin. Bu değerleri Azure portalındaki Azure kapsayıcı kayıt defterinizin Access anahtarları bölümünde bulabilirsiniz.

  3. Üç modül içeren modüller bölümünü bulun: oluşturduğunuz ikisi, sınıflandırıcı ve kamera başlığı ve varsayılan olarak dahil edilen üçüncü modül tempSensor.

  4. TempSensor modülünü tüm parametreleriyle silin. Bu modül test senaryoları için örnek veriler sağlar, ancak bu dağıtımda gerekli değildir.

  5. Görüntü sınıflandırma modülüne classifier dışında bir ad verdiyseniz adı bu adımda kontrol edin ve tamamının küçük harf olduğundan emin olun. Cameracapture modülü, tüm istekleri küçük harfle biçimlendiren bir istek kitaplığı kullanarak sınıflandırıcı modülünü çağırır ve IoT Edge büyük/küçük harfe duyarlıdır.

  6. edgeAgent ve edgeHub sistem modülleri için createOptions değerini dizeli bir sürüm olarak değiştirin. Örneğin:

    "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    
  7. Her sistem modülü edgeAgent ve edgeHub için, görüntü sürümünü en son sürüm 1.6'ya değiştirin. Örneğin:

    "image": "mcr.microsoft.com/azureiotedge-agent:1.6",
    "image": "mcr.microsoft.com/azureiotedge-hub:1.6",
    
  8. Sınıflandırıcı modülü için createOptions parametresini dizeli bir sürüme güncelleştirin. Örneğin:

    "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    
  9. cameracapture modülü için createOptions parametresini aşağıdaki JSON ile güncelleştirin. Bu bilgiler, main.py işleminde alınan ve modül kapsayıcısında oluşturulan ortam değişkenlerini oluşturur. Bu bilgileri dağıtım bildirimine dahil etmek, modül görüntüsünü yeniden oluşturmadan görüntüyü veya uç noktayı değiştirmenize olanak tanır.

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

    Özel Görüntü İşleme Hizmeti modülünüzün adını classifier dışında bir değer olarak belirlediyseniz görüntü işleme uç nokta değerini uygun şekilde güncelleştirin.

    Örneğin, sınıflandırıcı ve kamera yakalama yapılandırması şuna benzer olmalıdır:

    "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. deployment.template.json dosyasını kaydedin.

IoT Edge çözümünüzü derleyip yükleyin

Her iki modülü de oluşturduktan ve dağıtım bildirimi şablonunu yapılandırdıktan sonra kapsayıcı görüntülerini derleyin ve bunları kapsayıcı kayıt defterinize gönderin.

Görüntüler kayıt defterinize eklendikten sonra çözümü IoT Edge bir cihaza dağıtabilirsiniz. IoT Hub aracılığıyla bir cihazda modül ayarlayabilirsiniz. Bu bölümde, IoT Hub erişimi ayarlayıp Azure CLI kullanarak çözümünüzü IoT Edge cihazınıza dağıtacaksınız.

İlk olarak, çözümü oluşturun ve container kayıt defterine gönderin.

  1. View>Terminal'yi seçerek tümleşik Visual Studio Code terminali açın.

  2. Azure kapsayıcı kayıt defterinden kullanıcı adı, parola ve oturum açma sunucusunu kullanarak terminale aşağıdaki komutu girerek Docker'da oturum açın. Bu değerleri Azure portalındaki kayıt defterinizin Access anahtarları bölümünden alabilirsiniz.

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

    kullanılmasını --password-stdinöneren bir güvenlik uyarısı alabilirsiniz. Üretim senaryoları için bu en iyi yöntem önerilir ancak bu öğreticinin kapsamı dışındadır. Daha fazla bilgi için docker oturum açma başvurusuna bakın.

  3. Modül Docker görüntüsünü derlemek ve etiketlemek için modülün Dockerfile dosyasını kullanın.

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

    Örneğin, yerel kayıt defteri veya Azure kapsayıcı kayıt defteri için görüntüyü oluşturmak için aşağıdaki komutları kullanın:

    
    # 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"
    

Gönderme modülü Docker görüntüsü

Kapsayıcı görüntünüzü kayıt defterindeki depolama alanına gönderebilmesi için docker'a kapsayıcı kayıt defteri kimlik bilgilerinizi sağlayın.

  1. Azure Container Registry (ACR) kimlik bilgileriyle Docker'da oturum açın.

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

    kullanılmasını --password-stdinöneren bir güvenlik uyarısı alabilirsiniz. Bu, üretim senaryoları için önerilen en iyi yöntem olsa da, bu öğreticinin kapsamı dışındadır. Daha fazla bilgi için docker oturum açma başvurusuna bakın.

  2. Azure Container Registry için oturum açın. Azure CLI’yi Yüklemeniz Gerekiyoraz komutunu kullanmak için. Bu komut , Ayarlar>Erişim anahtarları'ndaki kapsayıcı kayıt defterinizde bulunan kullanıcı adınızı ve parolanızı ister.

    az acr login -n <AcrRegistryName>
    

    İpucu

    Bu öğreticinin herhangi bir noktasında oturumunuz kapanırsa, devam etmek için Docker ve Azure Container Registry oturum açma adımlarını yineleyin.

  3. Modül görüntünüzü yerel kayıt defterine veya kapsayıcı kayıt defterine gönderin.

    docker push <ImageName>
    

    Örneğin:

    # 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
    

Dağıtım şablonunu güncelleştirme

deployment.template.json dosyasını kapsayıcı kayıt defteri görüntü konumuyla güncelleştirin. Görüntü değerini kayıt defterine iletmiş olduğunuz görüntüyle değiştirin. Örneğin, sınıflandırıcı ve cameracapture modüllerinin < değerlerinde AcrRegistryName> değerini kayıt defteri adınızla değiştirin:

"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\"]}"
        }
    }
}

Son dağıtım bildirimi aşağıdakine benzer:

{
  "$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.6",
              "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.6",
              "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": {
          "classifierToIoTHub": "FROM /messages/modules/classifier/outputs/* INTO $upstream",
          "cameracaptureToIoTHub": "FROM /messages/modules/cameracapture/outputs/* INTO $upstream"
        },
        "storeAndForwardConfiguration": {
          "timeToLiveSecs": 7200
        }
      }
    }
  }
}

Modüller cihaza dağıtılır

Yerleşik kapsayıcı görüntülerinin kapsayıcı kayıt defterinizde depolandığını doğrulayın. Ardından, senaryonuz için hazırlanmış deployment.template.json dağıtım bildirimini kullanarak bunları bir cihaza dağıtın.

modülleri Azure IoT Hub dağıtmak için IoT Edge Azure CLI set-modules komutunu kullanın. Örneğin, deployment.template.json dosyasında tanımlanan modülleri IoT Hub <IotHubName> IoT Edge cihazı için <DeviceName> dağıtmak için aşağıdaki komutu kullanın. hub-name, device-id ve login IoT Hub bağlantı dizesi değerlerini kendi değerlerinizle değiştirin.

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

İpucu

IoT Hub bağlantı dizesini, paylaşılan erişim anahtarı dahil, Azure portalında bulabilirsiniz. IoT Hub >Güvenlik ayarları>Paylaşılan erişim ilkeleri>iothubowner gidin.

IoT Edge cihazınızın çalıştığından emin olun.

Dağıtılan ve çalışan modüllerin listesini görmek için cihazınızın altında Modüller'i genişletin. Yenile düğmesini seçin. Yeni sınıflandırıcı ve kamerayakalama modüllerini, $edgeAgent ve $edgeHub ile birlikte çalışırken görürsünüz.

Tüm modüllerin cihazınızda çalışıp çalışmadığını da kontrol edebilirsiniz. modüllerin durumunu görmek için IoT Edge cihazınızda aşağıdaki komutu çalıştırın.

iotedge list

Modüllerin başlatılması birkaç dakika sürebilir. IoT Edge çalışma zamanı, yeni dağıtım bildirimini almalı, modül görüntülerini kapsayıcı çalışma zamanından indirmeli ve ardından her yeni modülü başlatmalıdır.

Sınıflandırma sonuçlarını görüntüleme

Cihazınızda, gönderilen iletileri görmek ve IoT Hub tarafından alındıklarını onaylamak için kamera başlığı modülünün günlüklerini görüntüleyin.

iotedge logs cameracapture

Örneğin, aşağıdaki gibi bir çıktı görmeniz gerekir:

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

Not

Başlangıçta, dağıtılan ve başlatılan modüller arasındaki gecikme nedeniyle cameracapture modülünün çıkışında bağlantı hataları görebilirsiniz.

Kameracapture modülü, başarılı olana kadar bağlantıyı otomatik olarak yeniden dener. Başarıyla bağlandıktan sonra beklenen görüntü sınıflandırma iletilerini görürsünüz.

Kamerayla görüntü yakalama modülünden ileti olarak gönderilen Özel Görüntüleme modülünün sonuçları, görüntünün hemlock veya kiraz ağacı olma olasılığını içerir. Görüntü hemlock olduğundan olasılığı 1,0 olarak görürsünüz.

Kaynakları temizleme

Bir sonraki önerilen makaleye devam etmek istiyorsanız, oluşturduğunuz kaynakları ve yapılandırmaları koruyun ve yeniden kullanın. Ayrıca test cihazıyla aynı IoT Edge cihazı kullanmaya devam edebilirsiniz.

Aksi takdirde, ücretlerden kaçınmak için bu makalede kullandığınız yerel yapılandırmaları ve Azure kaynaklarını silin.

Azure kaynaklarını silme

Azure kaynakları ve kaynak gruplarını silme işlemini geri alamazsınız. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. IoT Hub tutmak istediğiniz kaynakları içeren mevcut bir kaynak grubunda oluşturduysanız, kaynak grubunu değil yalnızca IoT Hub kaynağı silin.

Kaynakları silmek için:

  1. Azure portalında oturum açın ve ardından Kaynak grupları'i seçin.
  2. IoT Edge test kaynaklarınızı içeren kaynak grubunun adını seçin.
  3. Kaynak grubunuzun içerdiği kaynakların listesini gözden geçirin. Tümünü silmek isterseniz Kaynak grubunu sil'i seçebilirsiniz. Yalnızca bazılarını silmek istiyorsanız, tek tek silmek için her kaynağı seçin.

Sonraki adımlar

Bu öğreticide özel görüntü işleme modelini eğitip bir IoT Edge cihazına modül olarak dağıttınız. Ardından görüntü sınıflandırma hizmetini sorgulayıp sonuçlarını IoT Hub raporlayan bir modül oluşturacaksınız.

Azure IoT Edge uçta verileri iş içgörülerine dönüştürmenize yardımcı olabilecek diğer yöntemler hakkında bilgi edinmek için sonraki öğreticilere geçin.