Aracılığıyla paylaş


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

Şunlar için geçerlidir:IoT Edge 1.5 onay işareti IoT Edge 1.5

Önemli

IoT Edge 1.5 LTS desteklenen sürümdür. IoT Edge 1.4 LTS, 12 Kasım 2024 itibarıyla kullanım ömrü sona erer. Önceki bir sürümdeyseniz bkz. IoT Edge’i güncelleştirme.

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 AI Ö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 cihazında Ö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 Hizmeti ile bir görüntü sınıflandırıcı derleme.
  • 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'a gönderin.

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

Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.

Önkoşullar

İpucu

Bu öğretici, Raspberry Pi 3 örnek projesinde Özel Görüntü İşleme ve Azure IoT Edge'in basitleştirilmiş bir sürümüdür. Bir bulut VM'sinde çalışır ve ioT Edge'de Özel Görüntü İşleme'ye yeni başlayan birine yardımcı olan görüntü sınıflandırıcısını eğitmek ve test etmek için statik görüntüler kullanır. Ö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.

  • Linux kapsayıcı geliştirme ortamınızı düzenlemek için, Visual Studio Code kullanarak IoT Edge modülleri geliştirme adlı öğreticiyi tamamlayarak, tercih edilen Azure IoT Edge Geliştirme Aracı komut satırı (CLI) geliştirme aracını kullanın. Öğreticiyi tamamladıktan sonra geliştirme ortamınızda aşağıdaki önkoşulların sağlandığından emin olun:

  • Özel Görüntü İşleme hizmetiyle bir IoT Edge modülü geliştirmek için geliştirme makinenize aşağıdaki ek önkoşulların yüklendiğinden emin olun:

Özel Görüntü İşleme Hizmeti ile bir görüntü sınıflandırıcı derleme

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 bir IoT Edge cihazına 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 (Oturum aç) öğesini seçin ve Azure kaynaklarına 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
    Veri Akışı 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 karşıya yükleme ve sınıflandırıcınızı eğitme

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. Kopyaladığınız yerel git deposuna gidin ve ilk görüntü klasörünü açın: Cognitive-CustomVision-Windows / Samples / Images / Hemlock. 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. Upload 10 files (10 dosyayı karşıya yükle) öğesini seçin.

    Hemlock etiketli dosyaları Özel Görüntü İşleme karşıya yükleme

  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. İkinci görüntü klasörüne göz atın: Cognitive-CustomVision-Windows / Samples / Images / Japanese Cherry. 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. Upload 10 files (10 dosyayı karşıya yükle) öğesini 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 girişini 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.

Özel Görüntü İşleme Hizmeti 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'a 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 fazla modül geliştirmek ve düzenlemek için kullanabileceğiniz mantıksal bir yoldur. Çözüm, bir veya daha fazla modülün kodunu ve bunların IoT Edge cihazında 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 , IoT Edge Geliştirme Kapsayıcısını Docker ile ç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'da 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

    komutu, geçerli çalışma dizininde sınıflandırıcı adlı bir modülle yeni bir IoT Edge çözümü oluşturur.

  3. Çözümü Visual Studio Code'da açın.

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

Visual Studio Code'daki Python modülü şablonu, IoT Edge'i 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 gezgininde Visual Studio Code'un IoT Edge çözümünüzü oluşturmasını istediğiniz dizine gidin.

  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. Modül 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 deposunda bir test görüntüsü bulunur.

  1. Cognitive-CustomVision-Windows / Samples / Images / Test konumundaki test görüntüsüne gidin.

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

  3. IoT Edge çözüm dizininize göz atın 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

Bu öğreticide şu ana kadar, 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'a bildiren ikinci bir modül oluşturdunuz. Artık 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ı dağıtım bildirimi oluşturmanıza yardımcı olmak için her IoT Edge çözümünde bir şablon oluşturur.

  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> ile <AcrPassword> yerine kayıt defterinizin kullanıcı adı ve parolasını yazın. Bu değerleri Azure portalındaki Azure kapsayıcı kayıt defterinizin Erişim 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. EdgeAgent ve edgeHub sistem modülleri için görüntü sürümünü en son sürüm 1.5 olarak değiştirin. Örneğin:

    "image": "mcr.microsoft.com/azureiotedge-agent:1.5",
    "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
    
  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 modül kapsayıcısında 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ü oluşturma ve gönderme

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üleri kayıt defterinize gönderdikten sonra çözümü bir IoT Edge cihazına dağıtabilirsiniz. IoT Hub aracılığıyla bir cihazda modül ayarlayabilirsiniz. Bu bölümde IoT Hub'ınıza 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. 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 Erişim 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'de oturum açın. komutunu kullanmak için Azure CLI'yiaz yüklemeniz gerekir. 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 kapatılı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.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
        }
      }
    }
  }
}

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'a 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 Edge cihazı <DeviceName> için IoT Hub <IotHubName'e> dağıtmak için aşağıdaki komutu kullanın. Hub-name, device-id ve login IoT Hub bağlantı dizesi değerlerini kendinizle 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

Paylaşılan erişim anahtarı dahil olmak üzere IoT Hub bağlantı dizesi Azure portalında bulabilirsiniz. IoT Hub >Güvenlik ayarları>Paylaşılan erişim ilkeleri>iothubowner'ınıza 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. IoT Edge cihazında modüllerin durumunu görmek için aşağıdaki komutu çalıştırın.

iotedge list

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

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 cameracapture 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. Aynı IoT Edge cihazını test cihazı olarak 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ını ve kaynak gruplarını silme işlemi geri alınamaz. 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ğını silin.

Kaynakları silmek için:

  1. Azure portalında oturum açın ve Kaynak grupları’nı 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, her kaynağı seçerek tek tek silebilirsiniz.

Sonraki adımlar

Bu öğreticide bir Özel Görüntü İşleme Hizmeti modeli eğittiniz ve bunu modül olarak bir IoT Edge cihazına dağıttınız. Ardından görüntü sınıflandırma hizmetini sorgulayıp sonuçlarını IoT Hub'a bildirebilecek bir modül oluşturdunuz.

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