Hızlı Başlangıç: Kullanmaya başlayın Çözümleyicisi ile çalışma

kenar simgesi
Alternatif olarak, Hizmette video uygulamaları oluşturma altındaki konulara göz atabilirsiniz.


Bu hızlı başlangıçta Azure Video Çözümleyicisi'ne başlama adımları adım adım gösterilir. IoT Edge cihazı olarak bir Azure sanal makinesi ve canlı video akış simülasyonu kullanır.

Kurulum adımlarını tamamladıktan sonra, simülasyon canlı video akışını bu akışta herhangi bir hareket algılayan ve raporlayan bir işlem hattı üzerinden çalıştırabilirsiniz. Aşağıdaki diyagram bu işlem hattını grafiksel olarak temsil eder.

Hareket algılama

Önkoşullar

İpucu

Azure IoT Tools uzantısını yüklerken docker 'ı yüklemeniz istenebilir. İstemi yok saymaktan çekinmeyin.

Azure kaynakları ayarlama

Azure’a dağıtın

Dağıtım işlemi yaklaşık 20 dakika sürer. İşlem tamamlandıktan sonra Azure aboneliğinde aşağıdakiler dahil olmak üzere belirli Azure kaynaklarınız dağıtılır:

  1. Video Analyzer hesabı - Bu bulut hizmeti Video Analyzer uç modülünü kaydetmek ve kaydedilen video ve video analizini kayıttan kaydetmek için kullanılır.
  2. Depolama hesabı - Kayıtlı video ve video analizini depolamak için.
  3. Yönetilen Kimlik - Bu, yukarıdaki depolama hesabına erişimi yönetmek için kullanılan kullanıcı tarafından atanan yönetilen kimliktir.
  4. Sanal makine - Bu sanal uç cihazınız olarak görev yapacak bir sanal makinedir.
  5. IoT Hub - Bu, IoT uygulamanız, modülleriniz ve yönettikleri cihazlar arasında çift yönlü iletişim için IoT Edge bir ileti hub'ı olarak hareket eder.

Geliştirme ortamınızı kurma

Bağlantı IoT Hub dizenizi alma

  1. Aşağıdaki Azure portal, yukarıdaki IoT Hub parçası olarak oluşturduğunuz kümeye gidin
  2. Sol gezinti bölmesinde Paylaşılan erişim ilkeleri seçeneğini belirleyin ve buraya tıklayın.
  3. iothubowner adlı ilkeye tıklayın
  4. Birincil bağlantı dizesini kopyalayın; şuna benzer: HostName=xxx.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX

Bağlan'e IoT Hub

  1. Görünüm Visual Studio Code Gezgini'ni > seçin. Veya Ctrl+Shift+E tuşlarını da seçin.
  2. Gezgin sekmesinin sol alt köşesinden Azure IoT Hub.
  3. Bağlam menüsünü görmek için Diğer Seçenekler simgesini seçin. Ardından Bağlantı Dizesini IoT Hub'yi seçin.
  4. Bir giriş kutusu görüntülendiğinde, bağlantı dizenizi IoT Hub girin.
  5. Yaklaşık 30 saniye içinde sol Azure IoT Hub bölümünde yenileyin. Aşağıdaki modüllerin dağıtılmış avasample-iot-edge-device olması gereken uç cihazı görüyorsanız:
    • Video Analyzer uç modülü (modül adı avaedge)
    • RTSP simülatörü (modül adı rtspsim)

Modüller düğümünü genişletme

İpucu

Video Analyzer'ı bir uç cihaza (ARM64 cihazı gibi) el ile dağıttıysanız modülün söz konusu cihazın altında, cihaz altında, cihaz Azure IoT Hub. Bu modülü seçin ve aşağıdaki adımların geri kalanını izleyin.

Modülleri izlemek için hazırlanma

Bu hızlı başlangıç çalıştırmayı kullanırken olaylar IoT Hub. Bu olayları görmek için şu adımları izleyin:

  1. Bu Visual Studio Code Uzantılar sekmesini açın (veya Ctrl+Shift+X tuşlarına basın) ve Azure IoT Hub.

  2. Sağ tıklayın ve Uzantı ekle'yi Ayarlar.

    Uzantı Seçme Ayarlar

  3. "Ayrıntılı İletiyi Göster" araması ve etkinleştirmesi.

    Ayrıntılı İleti Göster

  4. Gezgin bölmesini Visual Studio Code açın ve sol Azure IoT Hub üst köşedeki bölmeyi seçin.

  5. Cihazlar düğümünü genişletin.

  6. seçeneğine sağ tıklayın avasample-iot-edge-device ve Yerleşik Olay Uç Noktasını İzlemeye Başla'yı seçin.

    Not

    Bu hizmet için yerleşik uç nokta bilgilerini IoT Hub. Bu bilgileri almak için Azure portal uygulamanıza IoT Hub sol gezinti bölmesinde Yerleşik uç noktalar seçeneğini belirleyin. Buraya tıklayın ve Olay Hub'ı ile uyumlu uç nokta bölümünün altında Event Hub ile uyumlu uç noktayı arama. Metinleri kopyalayıp kutuya yazın. Uç nokta şuna benzer: Endpoint=sb://iothub-ns-xxx.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX;EntityPath=<IoT Hub name>

Doğrudan yöntem çağrılarını kullanma

Artık Video Analyzer uç modülü tarafından ortaya çıkacak doğrudan yöntemleri kullanarak canlı video akışlarını analiz yapabilirsiniz. Modül tarafından sağlanan tüm doğrudan yöntemleri incelemek için Video Analyzer doğrudan yöntemleri makalelerini okuyun. Doğrudan yöntemlerin şeması burada bulunabilir.

İşlem hattı topolojilerini numarala

Bu adım modülde tüm işlem hattı topolojilerini numaralar.

  1. "Avaedge" modülüne sağ tıklayın ve bağlam menüsünden Modül Doğrudan Yöntemini Çağır'ı seçin.
  2. Düzenleme penceresinin orta üst kısmında bir düzenleme kutusu Visual Studio Code görüntülenir. Düzenleme pipelineTopologyList kutusuna yazın ve Enter tuşuna basın.
  3. Ardından, aşağıdaki JSON yükünü kopyalayıp düzenleme kutusuna yapıştırın ve Enter tuşuna basın.
{
    "@apiVersion" : "1.1"
}

Birkaç saniye içinde OUTPUT penceresinde aşağıdaki yanıtı görebilirsiniz:

[DirectMethod] Invoking Direct Method [pipelineTopologyList] to [avasample-iot-edge-device/avaedge] ...
[DirectMethod] Response from [avasample-iot-edge-device/avaedge]:
{
  "status": 200,
  "payload": {
    "value": []
  }
}

Yukarıdaki yanıt beklenir, işlem hattı topolojisi oluşturulmaz.

İşlem hattı topolojisi ayarlama

Yukarıdaki adımların aynısını kullanarak, yük olarak aşağıdaki JSON'u kullanarak bir işlem hattı pipelineTopologySet topolojisi ayarlamak için çağırabilirsiniz. "MotionDetection" adlı bir işlem hattı topolojisi oluşturacağız.

{
    "@apiVersion": "1.1",
    "name": "MotionDetection",
    "properties": {
        "description": "Analyzing live video to detect motion and emit events",
        "parameters": [
            {
                "name": "rtspUrl",
                "type": "string",
                "description&quot;: &quot;rtspUrl"
            },
            {
                "name": "rtspUserName",
                "type": "string",
                "description": "rtspUserName",
                "default&quot;: &quot;dummyUserName"
            },
            {
                "name": "rtspPassword",
                "type": "string",
                "description": "rtspPassword",
                "default&quot;: &quot;dummypw"
            }
        ],
        "sources": [
            {
                "@type": "#Microsoft.VideoAnalyzer.RtspSource",
                "name": "rtspSource",
                "transport": "tcp",
                "endpoint": {
                    "@type": "#Microsoft.VideoAnalyzer.UnsecuredEndpoint",
                    "credentials": {
                        "@type": "#Microsoft.VideoAnalyzer.UsernamePasswordCredentials",
                        "username": "${rtspUserName}",
                        "password&quot;: &quot;${rtspPassword}"
                    },
                    "url&quot;: &quot;${rtspUrl}"
                }
            }
        ],
        "processors": [
            {
                "@type": "#Microsoft.VideoAnalyzer.MotionDetectionProcessor",
                "sensitivity": "medium",
                "name": "motionDetection",
                "inputs": [
                    {
                        "nodeName": "rtspSource",
                        "outputSelectors": []
                    }
                ]
            }
        ],
        "sinks": [
            {
                "hubOutputName": "inferenceOutput",
                "@type": "#Microsoft.VideoAnalyzer.IotHubMessageSink",
                "name": "iotHubSink",
                "inputs": [
                    {
                        "nodeName&quot;: &quot;motionDetection"
                    }
                ]
            }
        ]
    }
}

Bu JSON yükü, iki parametrenin varsayılan değerlere sahip olduğu üç parametreyi tanımlayan bir topoloji oluşturur. Topolojide bir kaynak düğüm (RTSPkaynağı), bir işlemci düğümü (hareket algılamaişlemcisi ve bir havuz düğümü (ileti IoT Hub vardır). Topolojinin görsel gösterimi yukarıda gösterilmiştir.

Birkaç saniye içinde OUTPUT penceresinde aşağıdaki yanıtı görebilirsiniz.

{
  "status": 201,
  "payload": {
    "systemData": {
      "createdAt": "2021-03-21T18:16:46.491Z",
      "lastModifiedAt": "2021-03-21T18:16:46.491Z"
    },
    "name": "MotionDetection",
    "properties": {
      "description": "Analyzing live video to detect motion and emit events",
      "parameters": [
        {
          "name": "rtspPassword",
          "type": "string",
          "description": "rtspPassword",
          "default": "dummypw"
        },
        {
          "name": "rtspUrl",
          "type": "string",
          "description": "rtspUrl"
        },
        {
          "name": "rtspUserName",
          "type": "string",
          "description": "rtspUserName",
          "default": "dummyUserName"
        }
      ],
      "sources": [
        {
          "@type": "#Microsoft.VideoAnalyzer.RtspSource",
          "name": "rtspSource",
          "transport": "tcp",
          "endpoint": {
            "@type": "#Microsoft.VideoAnalyzer.UnsecuredEndpoint",
            "url": "${rtspUrl}",
            "credentials": {
              "@type": "#Microsoft.VideoAnalyzer.UsernamePasswordCredentials",
              "username": "${rtspUserName}",
              "password": "${rtspPassword}"
            }
          }
        }
      ],
      "processors": [
        {
          "@type": "#Microsoft.VideoAnalyzer.MotionDetectionProcessor",
          "sensitivity": "medium",
          "eventAggregationWindow": "PT1S",
          "name": "motionDetection",
          "inputs": [
            {
              "nodeName": "rtspSource",
              "outputSelectors": []
            }
          ]
        }
      ],
      "sinks": [
        {
          "@type": "#Microsoft.VideoAnalyzer.IotHubMessageSink",
          "hubOutputName": "inferenceOutput",
          "name": "iotHubSink",
          "inputs": [
            {
              "nodeName": "motionDetection",
              "outputSelectors": []
            }
          ]
        }
      ]
    }
  }
}

Döndürülen durum 201'tir. Bu durum, yeni bir topolojinin oluşturulmuş olduğunu gösterir.

Aşağıdaki adımları deneyin:

  1. Yeniden pipelineTopologySet çağır. Döndürülen durum kodu 200'tir. Bu kod, mevcut bir topolojinin başarıyla güncelleştirilmiş olduğunu gösterir.
  2. Yeniden pipelineTopologySet çağır, ancak açıklama dizesini değiştir. Döndürülen durum kodu 200'tir ve açıklama yeni değere güncelleştirilir.
  3. Önceki pipelineTopologyList bölümde özetlenen şekilde çağırma. Artık döndürülen yükte "MotionDetection" topolojisini görüyorsunuz.

İşlem hattı topolojisi okuma

Aşağıdaki pipelineTopologyGet yükü kullanarak çağrı yapın.

{
    "@apiVersion" : "1.1",
    "name" : "MotionDetection"
}

Birkaç saniye içinde OUTPUT penceresinde aşağıdaki yanıtı görebilirsiniz:

{
  "status": 200,
  "payload": {
    "systemData": {
      "createdAt": "2021-03-21T18:16:46.491Z",
      "lastModifiedAt": "2021-03-21T18:16:46.491Z"
    },
    "name": "MotionDetection",
    "properties": {
      "description": "Analyzing live video to detect motion and emit events",
      "parameters": [
        {
          "name": "rtspPassword",
          "type": "string",
          "description": "rtspPassword",
          "default": "dummypw"
        },
        {
          "name": "rtspUrl",
          "type": "string",
          "description": "rtspUrl"
        },
        {
          "name": "rtspUserName",
          "type": "string",
          "description": "rtspUserName",
          "default": "dummyUserName"
        }
      ],
      "sources": [
        {
          "@type": "#Microsoft.VideoAnalyzer.RtspSource",
          "name": "rtspSource",
          "transport": "tcp",
          "endpoint": {
            "@type": "#Microsoft.VideoAnalyzer.UnsecuredEndpoint",
            "url": "${rtspUrl}",
            "credentials": {
              "@type": "#Microsoft.VideoAnalyzer.UsernamePasswordCredentials",
              "username": "${rtspUserName}",
              "password": "${rtspPassword}"
            }
          }
        }
      ],
      "processors": [
        {
          "@type": "#Microsoft.VideoAnalyzer.MotionDetectionProcessor",
          "sensitivity": "medium",
          "eventAggregationWindow": "PT1S",
          "name": "motionDetection",
          "inputs": [
            {
              "nodeName": "rtspSource",
              "outputSelectors": []
            }
          ]
        }
      ],
      "sinks": [
        {
          "@type": "#Microsoft.VideoAnalyzer.IotHubMessageSink",
          "hubOutputName": "inferenceOutput",
          "name": "iotHubSink",
          "inputs": [
            {
              "nodeName": "motionDetection",
              "outputSelectors": []
            }
          ]
        }
      ]
    }
  }
}

Yanıt yükünde şu ayrıntılara dikkat edin:

  • Durum kodu 200'dır ve başarılı olduğunu gösterir.
  • Yük, zaman createdAt damgasını ve zaman lastModifiedAt damgasını içerir.

Topolojiyi kullanarak canlı işlem hattı oluşturma

Ardından, yukarıdaki işlem hattı topolojisi ile ilgili canlı bir işlem hattı oluşturun. Aşağıdaki livePipelineSet yük ile doğrudan yöntemi çağırma:

{
    "@apiVersion" : "1.1",
    "name": "mdpipeline1",
    "properties": {
        "topologyName": "MotionDetection",
        "description": "Sample pipeline description",
        "parameters": [
            {
                "name": "rtspUrl",
                "value": "rtsp://rtspsim:554/media/camera-300s.mkv"
            },
            {
                "name": "rtspUserName",
                "value": "testuser"
            },
            {
                "name": "rtspPassword",
                "value": "testpassword"
            }
        ]
    }
}

Bu yükün:

  • Yukarıdaki yük, canlı işlem hattı tarafından kullanılacak topolojiyi ("MotionDetection") belirtir.
  • Yük, rtspUrl topoloji yükünde varsayılan değere sahip olan parametresi değerini içerir. Bu değer, aşağıdaki örnek videonun bağlantısıdır:

BIRKAÇ saniye içinde OUTPUT penceresinde aşağıdaki yanıtı görebilirsiniz:

{
  "status": 201,
  "payload": {
    "systemData": {
      "createdAt": "2021-03-21T18:27:41.639Z",
      "lastModifiedAt": "2021-03-21T18:27:41.639Z"
    },
    "name": "mdpipeline1",
    "properties": {
      "state": "Inactive",
      "description": "Sample pipeline description",
      "topologyName": "MotionDetection",
      "parameters": [
        {
          "name": "rtspPassword",
          "value": "testpassword"
        },
        {
          "name": "rtspUrl",
          "value": "rtsp://rtspsim:554/media/camera-300s.mkv"
        },
        {
          "name": "rtspUserName",
          "value": "testuser"
        }
      ]
    }
  }
}

Yanıt yükünde aşağıdakilere dikkat değiştirilebilir:

  • Durum kodu 201'tir ve yeni bir canlı işlem hattının oluşturulmuş olduğunu gösterir.
  • Durum , canlı işlem hattının oluşturularak etkinleştirilmedi olarak işaret eden "Etkin değil" şeklindedir. Daha fazla bilgi için bkz. işlem hattı durumları.

Sonraki adımlar için aşağıdaki doğrudan yöntemleri deneyin:

  • livePipelineSetAynı yük ile yeniden çağırın ve döndürülen durum kodunun artık 200 olduğunu unutmayın.
  • livePipelineSetYeniden çağırın, ancak farklı bir açıklama ile yanıt yükünde güncelleştirilmiş açıklamayı, canlı işlem hattının başarıyla güncelleştirildiğini belirten bir yere unutmayın.
  • Çağırın livePipelineSet , ancak adı "mdpipeline2" ve rtspUrl "RTSP://rtspsim:554/Media/lots_015.MKV" olarak değiştirin. Yanıt yükünde, yeni oluşturulan canlı işlem hattına (durum kodu 201) dikkat edin.

    Not

    Ardışık düzen topolojileribölümünde açıklandığı gibi, aynı işlem hattı topolojisini kullanarak birçok kameradan canlı video akışlarını çözümlemek için birden çok canlı işlem hattı oluşturabilirsiniz. Ek canlı işlem hatları oluşturursanız, temizleme adımı sırasında bunları silmek için dikkatli olmanız gerekir.

Canlı ardışık düzeni etkinleştirin

Sonra, işlem hattı aracılığıyla canlı videonun akışını başlatan canlı ardışık düzeni etkinleştirebilirsiniz. livePipelineActivateAşağıdaki yük ile doğrudan yöntemi çağırın:

{
    "@apiVersion" : "1.1",
    "name" : "mdpipeline1"
}

Birkaç saniye içinde çıkış penceresinde aşağıdaki yanıtı görürsünüz.

{
  "status": 200,
  "payload": null
}

200 durum kodu, canlı işlem hattının başarıyla etkinleştirildiğini gösterir.

Canlı işlem hattının durumunu denetleyin

Şimdi livePipelineGet aşağıdaki yük ile doğrudan yöntemi çağırın:

{
    "@apiVersion" : "1.1",
    "name" : "mdpipeline1"
}

Birkaç saniye içinde çıkış penceresinde aşağıdaki yanıtı görürsünüz.

{
  "status": 200,
  "payload": {
    "systemData": {
      "createdAt": "2021-03-21T18:27:41.639Z",
      "lastModifiedAt": "2021-03-21T18:27:41.639Z"
    },
    "name": "mdpipeline1",
    "properties": {
      "state": "Active",
      "description": "Sample pipeline description",
      "topologyName": "MotionDetection",
      "parameters": [
        {
          "name": "rtspPassword",
          "value": "testpassword"
        },
        {
          "name": "rtspUrl",
          "value": "rtsp://rtspsim:554/media/camera-300s.mkv"
        },
        {
          "name": "rtspUserName",
          "value": "testuser"
        }
      ]
    }
  }
}

Yanıt yükünde aşağıdaki ayrıntılara dikkat edin:

  • Durum kodu, başarıyı belirten 200 ' dir.
  • Durum, canlı işlem hattının etkin olduğunu gösteren "etkin" olur.

Sonuçları gözlemleyin

Yukarıda oluşturduğunuz ve etkinleştirdiğiniz canlı işlem hattı, gelen canlı video akışındaki hareketi algılamak ve IoT Hub havuza olay göndermek için hareket algılama işlemcisi düğümünü kullanır. Daha sonra bu olaylar, daha sonra gözlemlenebilir iletiler olarak IoT Hub. İletileri çıkış penceresinde şu "gövdeye" sahip olacak şekilde görürsünüz:

{
  "timestamp": 145471641211899,
  "inferences": [
    {
      "type": "motion",
      "motion": {
        "box": {
          "l": 0.514644,
          "t": 0.574627,
          "w": 0.3375,
          "h": 0.096296
        }
      }
    }
  ]
}

Bu ayrıntılara dikkat edin:

  • Inbu bölümü, türün hareket olduğunu gösterir. Hareket olayı hakkında ek veriler sağlar ve ekran çerçevesinin bölgesi (belirtilen zaman damgasında) için hareketin algılandığı bir sınırlayıcı kutu sağlar.

Temizlemek için ek doğrudan Yöntem çağrıları çağırma

Ardından, etkin işlem hattını devre dışı bırakmak ve silmek için doğrudan yöntemleri çağırabilirsiniz (Bu sırada).

Canlı ardışık düzeni devre dışı bırakın

livePipelineDeactivateAşağıdaki yük ile doğrudan yöntemi çağırın:

{
    "@apiVersion" : "1.1",
    "name" : "mdpipeline1"
}

Birkaç saniye içinde Çıkış penceresinde aşağıdaki yanıtı görürsünüz:

{
  "status": 200,
  "payload": null
}

200 durum kodu, canlı işlem hattının başarıyla devre dışı bırakıldığını gösterir.

Ardından, livePipelineGet Bu makalede daha önce belirtildiği gibi çağırma yapmayı deneyin. Durum değerini gözlemleyin.

Canlı ardışık düzeni silme

Doğrudan yöntemi livePipelineDelete aşağıdaki yük ile çağır

{
    "@apiVersion" : "1.1",
    "name" : "mdpipeline1"
}

Birkaç saniye içinde Çıkış penceresinde aşağıdaki yanıtı görürsünüz:

{
  "status": 200,
  "payload": null
}

200 durum kodu, canlı işlem hattının başarıyla silindiğini gösterir.

"Mdpipeline2" adlı işlem hattını de oluşturduysanız, işlem hattı topolojisini Ayrıca bu ek işlem hattını silmeksizin silemezsiniz. livePipelineDeleteAşağıdaki yükü kullanarak doğrudan yöntemi yeniden çağırın:

{
    "@apiVersion" : "1.1",
    "name" : "mdpipeline2"
}

Birkaç saniye içinde çıkış penceresinde aşağıdaki yanıtı görürsünüz:

{
  "status": 200,
  "payload": null
}

200 durum kodu, canlı işlem hattının başarıyla silindiğini gösterir.

livePipelineListAynı yükü ile çağırabilirsiniz pipelineTopologyList . Canlı bir işlem hattı numaralandırılmıyor ' i gözlemleyin.

İşlem hattı topolojisini silme

Tüm canlı işlem hatları silindikten sonra, pipelineTopologyDelete doğrudan yöntemi aşağıdaki yük ile çağırabilirsiniz:

{
    "@apiVersion" : "1.1",
    "name" : "MotionDetection"
}

Birkaç saniye içinde Çıkış penceresinde aşağıdaki yanıtı görürsünüz.

{
  "status": 200,
  "payload": null
}

200 durum kodu, topolojinin başarıyla silindiğini gösterir.

pipelineTopologyList' İ çağırmayı ve modülün hiçbir topoloji içerdiğini gözlemleyebilirsiniz.

Kaynakları temizleme

Diğer hızlı başlangıçları veya öğreticileri denemek için oluşturduğunuz kaynakları kullanın. Aksi takdirde, Azure portal, kaynak gruplarınıza gidin, bu hızlı başlangıç için kaynak grubunu seçin ve tüm kaynakları silin.

Sonraki adımlar