Öğ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 IoT Edge 1.4 onay işareti IoT Edge 1.4

Önemli

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

Azure IoT Edge, iş yüklerini buluttan uca taşıyarak IoT çözümünüzü daha verimli hale getirmenizi sağlayabilir. 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 tüm verileri aktarmak zorunda kalmadan görüntülerden veya video akışlarından içgörü elde etmenizi sağlar. Özel Görüntü İşleme Hizmeti, içgörü oluşturmak için bir görüntüyü eğitilmiş modelle karşılaştıran bir sınıflandırıcı sunar.

Örneğin bir IoT Edge cihazı üzerinde çalışan Özel Görüntü İşleme Hizmeti bir otoyoldaki trafik yoğunluğunun beklenenden daha yüksek veya düşük olduğunu veya bir otoparkta yeterli yer bulunup bulunmadığı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.
  • Cihazınızdaki Özel Görüntü İşleme Hizmeti web sunucusunu sorgulayan bir IoT Edge modülü dağıtma.
  • Görüntü sınıflandırıcı sonuçlarını IoT Hub'a gönderme.

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

Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı 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. Bu öğretici, bulut VM'sinde çalışacak şekilde tasarlanmıştır ve ioT Edge'de Özel Görüntü İşleme değerlendirmeye yeni başlayan biri için yararlı 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 bir canlı kamera akışı ayarlar. Bu, daha ayrıntılı bir gerçek yaşam senaryosu denemek isteyen kişiler için yararlıdır.

  • Öğretici: Visual Studio Code kullanarak IoT Edge modülleri geliştirme'yi tamamlayarak ortamınızı Linux kapsayıcı geliştirme için yapılandırın. Öğreticiyi tamamladıktan sonra geliştirme ortamınızda aşağıdaki önkoşullara sahip olmanız gerekir:

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

Ö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ı derlemek için bir Özel Görüntü İşleme Hizmeti projesi oluşturmanız ve eğitim amaçlı görüntü sağlamanız gerekir. 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ıyı derleyip eğittikten sonra Docker kapsayıcısı olarak dışarı aktarabilir ve bir IoT Edge cihazına dağıtabilirsiniz.

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üyü ve ardından Open (Aç) öğesini seçin.

  4. Bu görüntü grubuna hemlock etiketini ekleyin ve Enter tuşuna basarak etiketi uygulayı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. İki görüntü kümesini de etiketleyip yükledikten sonra sınıflandırıcıyı eğitmek için Train (Eğit) öğesini 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.

    Linux kapsayıcılarla DockerFile olarak dışarı aktarma

  5. Dışarı aktarma işlemi tamamlandıktan sonra Download (İndir) öğesini seçin ve .zip paketini bilgisayarınıza 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ırsınız.

Ö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ü için gerekli dosyalara sahipsiniz. Bu bölümde görüntü sınıflandırıcı kapsayıcısını IoT Edge modülü olarak çalıştıracak şekilde yapılandıracaksınız. Ayrıca görüntü sınıflandırıcısı ile birlikte dağıtılan ikinci bir modül de oluşturursunuz. İkinci modül istekleri sınıflandırıcıya, sonuçları da ileti olarak IoT Hub'a gönderir.

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.

  1. Visual Studio Code'da Komut Paletini Görüntüle'yi>seçerek Visual Studio Code komut paletini açın.

  2. Komut paletinde Azure IoT Edge: New IoT Edge solution komutunu girin ve çalıştırın. Komut paletinde çözümünüzü oluşturmak için aşağıdaki bilgileri girin:

    Alan Değer
    Klasör seçin Çözüm dosyalarını oluşturmak için Visual Studio Code geliştirme makinenizde konumu seçin.
    Çözüm adı sağlayın Çözümünüz için CustomVisionSolution gibi açıklayıcı bir ad girin veya varsayılan değeri kabul edin.
    Modül şablonunu seçin Python Modülü'nü seçin.
    Modül adı sağlayın Modülünüze classifier adını verin.

    Bu modül adının küçük harf olması önemlidir. IoT Edge, modüllere başvururken büyük/küçük harfe duyarlıdır ve bu çözümde tüm istekleri küçük harf ile biçimlendiren bir kitaplık kullanılmaktadır.
    Modül için Docker görüntü deposunu sağlama Görüntü deposu, kapsayıcı kayıt defterinizin adını ve kapsayıcı görüntünüzün adını içerir. Kapsayıcı görüntünüz bir önceki adımdaki değerle önceden doldurulur. localhost:5000 değerini Azure kapsayıcı kayıt defterinizdeki Oturum açma sunucusu değeriyle değiştirin. Oturum açma sunucusunu Azure portalındaki kapsayıcı kayıt defterinizin Genel Bakış sayfasından alabilirsiniz.

    Son dize kayıt defteri adı.azurecr.io/classifier> gibi <görünür.

    Docker görüntü deposunu sağlama

Ardından Visual Studio Code penceresi IoT Edge çözümü çalışma alanınızı yükler.

Kayıt defteri kimlik bilgilerinizi ekleme

Ortam dosyası, kapsayıcı kayıt defterinizin kimlik bilgilerini depolar ve bu bilgileri IoT Edge çalışma zamanı ile paylaşır. Çalışma zamanı, özel görüntülerinizi IoT Edge cihazına çekmek için bu kimlik bilgilerine ihtiyaç duyar.

IoT Edge uzantısı, kapsayıcı kayıt defteri kimlik bilgilerinizi Azure'dan çekmeye çalışır ve bunları ortam dosyasına doldurur. Kimlik bilgilerinizin zaten dahil olup olmadığını denetleyin. Yoksa, şimdi ekleyin:

  1. Visual Studio Code gezgininde .env dosyasını açın.
  2. Alanları Azure kapsayıcı kayıt defterinizden kopyaladığınız kullanıcı adı ve parola değerleriyle güncelleştirin.
  3. Bu dosyayı kaydedin.

Not

Bu öğreticide, geliştirme ve test senaryoları için uygun olan Azure Container Registry için yönetici oturum açma kimlik bilgileri kullanılır. Üretim senaryolarına hazır olduğunuzda, hizmet sorumluları gibi en az ayrıcalıklı bir kimlik doğrulama seçeneği öneririz. Daha fazla bilgi için bkz . Kapsayıcı kayıt defterinize erişimi yönetme.

Hedef mimarinizi seçin

Visual Studio Code şu anda Linux AMD64 ve Linux ARM32v7 cihazları için modüller geliştirebilir. Kapsayıcı her mimari türü için farklı şekilde oluşturulduğundan ve çalıştırıldığından, her çözümle hedeflediğiniz mimariyi seçmeniz gerekir. Varsayılan değer, bu öğretici için kullandığımız Linux AMD64'dür.

  1. Komut paletini açın ve Azure IoT Edge: Edge Çözümü için Varsayılan Hedef Platformu Ayarla'yı arayın veya pencerenin alt kısmındaki yan çubuktaki kısayol simgesini seçin.

  2. Komut paletinde, seçenekler listesinden hedef mimariyi seçin. Bu öğreticide IoT Edge cihazı olarak bir Ubuntu sanal makinesi kullanıyoruz, dolayısıyla varsayılan amd64'ü kullanmaya devam edin.

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.

    Görüntü sınıflandırıcı dosyalarını gösteren çözüm çalışma alanı

  6. Sınıflandırıcı klasöründeki module.json dosyasını açın.

  7. Platformlar parametresini, eklediğiniz yeni Dockerfile'a işaret etmek için güncelleştirin ve bu öğreticide kullanmakta olduğumuz tek mimari olan AMD64'in yanındaki tüm seçenekleri kaldırın.

    "platforms": {
        "amd64": "./Dockerfile"
    }
    
  8. Değişikliklerinizi kaydedin.

Sanal kamera modülü oluşturma

Gerçek bir Özel Görüntü İşleme Hizmeti dağıtımında canlı görüntü veya video akışı sağlayan bir kameranız olacaktır. 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.

Yeni modül ekleme ve yapılandırma

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. Aynı Visual Studio Code penceresinde komut paletini kullanarak Azure IoT Edge: Add IoT Edge Module komutunu çalıştırın. Komut paletinde yeni modülünüz için aşağıdaki bilgileri girin:

    İstem Değer
    Dağıtım şablonu dosyasını seçin CustomVisionSolution klasöründeki deployment.template.json dosyasını seçin.
    Modül şablonunu seçin Python Modülü'nü seçin
    Modül adı sağlayın Modülünüze cameraCapture adını verin
    Modül için Docker görüntü deposunu sağlama localhost:5000 değerini Azure kapsayıcı kayıt defterinizin Oturum açma sunucusu değeriyle değiştirin.

    Dizenin son hali <registryname>.azurecr.io/cameracapture ifadesine benzer olmalıdır.

    Visual Studio Code penceresi, çözüm çalışma alanında yeni modülünüzü yükler ve deployment.template.json dosyasını güncelleştirir. Bu noktada iki modül klasörü görmeniz gerekir: classifier ve cameraCapture.

  2. modules / cameraCapture 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ünüzün dizinine 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ünün 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 bu noktaya kadar ağaç görüntülerini sınıflandırmak için bir Özel Görüntü İşleme Hizmeti modeli eğittiniz ve bu modeli bir IoT Edge modülü olarak paketlediniz. Ardından görüntü sınıflandırma sunucusunu sorgulayıp sonuçlarını IoT Hub'a bildirebilecek ikinci bir modül oluşturdunuz. Artık bir IoT Edge cihazına bu iki modülü birlikte başlatma ve çalıştırma sürecini anlatacak 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. Üç modül içermesi gereken modüller bölümünü bulun: oluşturduğunuz ikisi, sınıflandırıcı ve cameraCapture ve varsayılan olarak dahil edilen üçüncüsü SimulatedTemperatureSensor.

  3. SimulatedTemperatureSensor modülünü tüm parametreleriyle silin. Bu modül, test senaryoları için örnek veri sağlamak için eklenmiştir ancak bu dağıtımda ihtiyacınız yoktur.

  4. 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ü, classifier modülünü tüm istekleri küçük harf olarak biçimlendiren istek kitaplığını kullanarak çağırır ve IoT Edge büyük/küçük harfe duyarlıdır.

  5. cameraCapture modülünün createOptions parametresini aşağıdaki JSON koduyla 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 ekleyerek modül görüntüsünü yeniden derlemek zorunda kalmadan görüntüyü veya uç noktayı değiştirebilirsiniz.

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

  6. Dosyanın en altındaki $edgeHub modülünün routes parametresini güncelleştirin. Tahmin sonuçlarının cameraCapture kaynağından IoT Hub'a yönlendirilmesini istersiniz.

        "routes": {
          "cameraCaptureToIoTHub": "FROM /messages/modules/cameraCapture/outputs/* INTO $upstream"
        },
    

    İkinci modülün adını cameraCapture dışında bir değer olarak belirlediyseniz yönlendirme değerini uygun şekilde güncelleştirin.

  7. deployment.template.json dosyasını kaydedin.

IoT Edge çözümünüzü oluşturma ve gönderme

İki modülü de oluşturduğunuza ve dağıtım bildirimi şablonunu yapılandırdığınıza göre kapsayıcı görüntülerini oluşturmaya ve kapsayıcı kayıt defterinize göndermeye hazırsınız.

Görüntüleri kayıt defterinize gönderdikten sonra çözümü bir IoT Edge cihazına dağıtabilirsiniz. IoT Hub üzerinden bir cihazda modül ayarlayabilirsiniz ancak IoT Hub ve cihazlara Visual Studio Code aracılığıyla da erişebilirsiniz. Bu bölümde IoT Hub'ınıza erişimi ayarlayıp Visual Studio Code kullanarak çözümünüzü IoT Edge cihazınıza dağıtacaksınız.

İlk olarak çözümünüzü oluşturun ve kapsayıcı kayıt defterinize gönderin.

  1. Terminali Görüntüle'yi>seçerek Visual Studio Code tümleşik terminalini açın.

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

    docker login -u <ACR username> -p <ACR password> <ACR login server>
    

    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. Visual Studio Code gezgininde deployment.template.json dosyasına sağ tıklayın ve IoT Edge çözümü oluştur ve gönder'i seçin.

    Derleme ve gönderme komutu üç işlem başlatır. İlk olarak, çözümde, dağıtım şablonundaki ve diğer çözüm dosyalarındaki bilgilerle oluşturulmuş olan tam dağıtım bildirimini tutan yapılandırma adlı yeni bir klasör oluşturur. İkincisi, hedef mimariniz için uygun dockerfile'ı temel alarak kapsayıcı görüntüsünü derlemek için çalışır docker build . Ardından, görüntü deposunu kapsayıcı kayıt defterinize göndermek için çalışır docker push .

    Bu işlem ilk kez birkaç dakika sürebilir, ancak komutları bir sonraki çalıştırmanızda daha hızlıdır.

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

Modül projesini IoT Edge cihazınıza dağıtmak için Visual Studio Code gezginini ve Azure IoT Edge uzantısını kullanın. Yapılandırma klasöründeki deployment.amd64.json dosyası olan senaryonuz için hazırlanmış bir dağıtım bildiriminiz zaten var. Tek yapmanız gereken dağıtımı almak üzere bir cihaz seçmek.

IoT Edge cihazınızın çalışır durumda olduğundan emin olun.

  1. Visual Studio Code gezginindeki Azure IoT Hub bölümünün altında, IoT cihazları listenizi görmek için Cihazlar'ı genişletin.

  2. IoT Edge cihazınızın adına sağ tıklayıp Create Deployment for Single Device (Tek bir cihaz için dağıtım oluştur) öğesini seçin.

  3. Yapılandırma klasöründeki deployment.amd64.json dosyasını ve ardından Edge Dağıtım Bildirimi'ni seçin. deployment.template.json dosyasını kullanmayın.

  4. 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. $edgeAgent ve $edgeHub ile birlikte çalışan yeni sınıflandırıcı ve cameraCapture modüllerini görmeniz gerekir.

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

Modüllerinizin sonuçlarını görüntülemek için kullanabileceğiniz iki yöntem vardır. Bunu iletiler gönderilip alındıkça cihazın üzerinden veya iletiler IoT Hub'a ulaştıkça Visual Studio Code'dan gerçekleştirebilirsiniz.

Cihazdan cameraCapture modülü günlüklerini görüntüleyerek iletilerin gönderildiğini ve IoT Hub tarafından alındığına dair onay verildiğini görebilirsiniz.

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

İletileri Visual Studio Code'dan da görüntüleyebilirsiniz. IoT Edge cihazınızın adına sağ tıklayın ve Yerleşik Olay Uç Noktasını İzlemeyi Başlat'ı seçin.

[IoTHubMonitor] [2:43:36 PM] Message received from [vision-device/cameraCapture]:
{
  "created": "2023-07-13T21:43:35.697782",
  "id": "",
  "iteration": "",
  "predictions": [
    {
      "boundingBox": null,
      "probability": 1,
      "tagId": "",
      "tagName": "hemlock"
    }
  ],
  "project": ""
}

Not

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

cameraCapture modülü, başarılı olana kadar bağlantıyı otomatik olarak yeniden oluşturur. Bağlantı başarılı olduktan sonra beklenen görüntü sınıflandırma iletilerini görürsünüz.

cameraCapture 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ü köknar ağacına ait olduğundan olasılık değeri 1.0 olmalıdır.

Kaynakları temizleme

Bir sonraki önerilen makaleye geçmeyi planlıyorsanız, oluşturduğunuz kaynaklarla yapılandırmaları tutabilir ve yeniden kullanabilirsiniz. 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ı silebilirsiniz.

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'ını tutmak istediğiniz kaynakların yer aldığı 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 grubunuzda bulunan kaynakların listesini gözden geçirin. Tümünü silmek isterseniz Kaynak grubunu sil'i seçebilirsiniz. Kaynakların yalnızca bazılarını silmek istiyorsanız tek tek tıklayarak 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.