Snabbstart: Komma igång med Azure Video Analyzer

kantikon
Du kan också läsa avsnitten under Skapa videoprogram i tjänsten.


Den här snabbstarten går igenom stegen för att komma igång med Azure Video Analyzer. Den använder en virtuell Azure-dator som en IoT Edge-enhet och en simulerad livevideoström.

När du har slutfört installationsstegen kan du köra den simulerade direktsänd videoströmmen via en pipeline som identifierar och rapporterar alla rörelser i den strömmen. Följande diagram representerar pipelinen grafiskt.

Identifiera rörelse

Förutsättningar

Tips

När du installerar Azure IoT Tools kan du uppmanas att installera Docker. Du kan ignorera uppmaningen.

Ställa in Azure-resurser

Distribuera till Azure

Distributionsprocessen tar cirka 20 minuter. När det är klart har du vissa Azure-resurser distribuerade i Azure-prenumerationen, inklusive:

  1. Video Analyzer-konto – Den här molntjänsten används för att registrera Video Analyzer Edge-modulen och för att spela upp inspelade video- och videoanalyser.
  2. Storage konto – för lagring av inspelade video- och videoanalyser.
  3. Hanterad identitet – Det här är den användar tilldelade hanterade identiteten som används för att hantera åtkomsten till lagringskontot ovan.
  4. Virtuell dator – Det här är en virtuell dator som fungerar som din simulerade gränsenhet.
  5. IoT Hub – Det här fungerar som en central meddelandehubb för dubbelriktad kommunikation mellan ditt IoT-program, IoT Edge-moduler och de enheter som det hanterar.

Ställt in din utvecklingsmiljö

Hämta IoT Hub anslutningssträng

  1. I Azure Portal du till den IoT Hub som du skapade som en del av ovanstående steg för att konfigurera
  2. Leta efter alternativet Policyer för delad åtkomst i det vänstra navigeringsfönstret och klicka där.
  3. Klicka på principen med namnet iothubowner
  4. Kopiera den primära anslutningssträngen – den ser ut så här HostName=xxx.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX

Anslut till IoT Hub

  1. Öppna Visual Studio Code och välj Visa > utforskaren. Eller välj Ctrl+Skift+E.
  2. I det nedre vänstra hörnet på fliken Explorer väljer du Azure IoT Hub.
  3. Välj ikonen Fler alternativ för att se snabbmenyn. Välj sedan Ange IoT Hub anslutningssträng.
  4. När en indataruta visas anger du IoT Hub anslutningssträngen.
  5. Om cirka 30 sekunder uppdaterar Azure IoT Hub i det nedre vänstra avsnittet. Du bör se gränsenhet avasample-iot-edge-device , som bör ha följande moduler distribuerade:
    • Video Analyzer Edge-modul (modulnamnet avaedge)
    • RTSP-simulator (modulnamn rtspsim)

Expandera noden Moduler

Tips

Om du har distribuerat Video Analyzer manuellt på en gränsenhet (till exempel en ARM64-enhet) visas modulen under den enheten under Azure IoT Hub. Du kan välja den modulen och följa resten av stegen nedan.

Förbereda för att övervaka modulerna

När du använder kör den här snabbstarten skickas händelser till IoT Hub. Följ dessa steg om du vill se dessa händelser:

  1. I Visual Studio Code öppnar du fliken Tillägg (eller trycker på Ctrl+Skift+X) och söker efter Azure IoT Hub.

  2. Högerklicka och välj Extension Inställningar.

    Välj Inställningar

  3. Sök och aktivera "Visa utförligt meddelande".

    Visa utförligt meddelande

  4. Öppna Explorer-fönstret i Visual Studio Code och leta efter Azure IoT Hub i det nedre vänstra hörnet.

  5. Expandera noden Enheter.

  6. Högerklicka på och avasample-iot-edge-device välj Starta övervakning av inbyggd händelseslutpunkt.

    Anteckning

    Du kan bli ombedd att ange inbyggd slutpunktsinformation för IoT Hub. För att få den informationen går Azure Portal till ditt IoT Hub och letar efter alternativet Inbyggda slutpunkter i det vänstra navigeringsfönstret. Klicka där och leta efter den Event Hub-kompatibla slutpunkten under avsnittet Event Hub compatible endpoint (Händelsehubbkompatibel slutpunkt). Kopiera och använd texten i rutan. Slutpunkten ser ut ungefär så här: Endpoint=sb://iothub-ns-xxx.servicebus.windows.net/;SharedAccessKeyName=iothubowner;SharedAccessKey=XXX;EntityPath=<IoT Hub name>

Använda direkta metod-anrop

Nu kan du analysera livevideoströmmar genom att använda direktmetoder som exponeras av Video Analyzer Edge-modulen. Läs Video Analyzer-direktmetoder för att undersöka alla direktmetoder som tillhandahålls av modulen. Schemat för direktmetoderna finns här.

Räkna upp pipeline-topologier

Det här steget räknar upp alla pipeline-topologier i modulen.

  1. Högerklicka på "avaedge"-modulen och välj Invoke Module Direct Method (Anropa direktmetod för modul) på snabbmenyn.
  2. En redigeringsruta visas längst upp i mitten av Visual Studio Kod. Ange pipelineTopologyList i redigeringsrutan och tryck på Retur.
  3. Kopiera och klistra in JSON-nyttolasten nedan i redigeringsrutan och tryck på Retur.
{
    "@apiVersion" : "1.1"
}

Inom några sekunder visas följande svar i fönstret UTDATA:

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

Ovanstående svar förväntas eftersom inga pipeline-topologier har skapats.

Ange en pipelinetopologi

Med samma steg som ovan kan du anropa för att ange en pipelinetopologi med hjälp pipelineTopologySet av följande JSON som nyttolast. Du kommer att skapa en pipelinetopologi med namnet "MotionDetection".

{
    "@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"
                    }
                ]
            }
        ]
    }
}

Den här JSON-nyttolasten skapar en topologi som definierar tre parametrar, där två av dem har standardvärden. Topologin har en källnod(RTSP-källa),en processornod (rörelseidentifieringsprocessor och en IoT Hubmottagare). Den visuella representationen av topologin visas ovan.

Inom några sekunder ser du följande svar i fönstret UTDATA.

{
  "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": []
            }
          ]
        }
      ]
    }
  }
}

Den returnerade statusen är 201. Den här statusen anger att en ny topologi har skapats.

Prova följande nästa steg:

  1. Anropa pipelineTopologySet igen. Den returnerade statuskoden är 200. Den här koden anger att en befintlig topologi har uppdaterats.
  2. Anropa pipelineTopologySet igen, men ändra beskrivningssträngen. Den returnerade statuskoden är 200 och beskrivningen uppdateras till det nya värdet.
  3. Anropa pipelineTopologyList enligt beskrivningen i föregående avsnitt. Nu kan du se Topologin "MotionDetection" i den returnerade nyttolasten.

Läs pipelinetopologin

Anropa pipelineTopologyGet med hjälp av följande nyttolast.

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

Inom några sekunder ser du följande svar i fönstret UTDATA:

{
  "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": []
            }
          ]
        }
      ]
    }
  }
}

Lägg märke till följande information i svarsnyttolasten:

  • Statuskoden är 200, vilket indikerar att det lyckades.
  • Nyttolasten innehåller createdAt tidsstämpeln och lastModifiedAt tidsstämpeln.

Skapa en live-pipeline med topologin

Skapa sedan en live-pipeline som refererar till ovanstående pipelinetopologi. Anropa livePipelineSet direktmetoden med följande nyttolast:

{
    "@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"
            }
        ]
    }
}

Observera att den här nyttolasten:

  • Nyttolasten ovan anger topologin ("MotionDetection") som ska användas av den direktsända pipelinen.
  • Nyttolasten innehåller parametervärdet rtspUrl för , som inte hade något standardvärde i topologins nyttolast. Det här värdet är en länk till exempelvideon nedan:

Inom några sekunder ser du följande svar i fönstret UTDATA:

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

Observera följande i svarsnyttolasten:

  • Statuskoden är 201, vilket indikerar att en ny live-pipeline har skapats.
  • Tillståndet är "Inaktiv", vilket anger att den aktiva pipelinen skapades men inte aktiverades. Mer information finns i pipeline-tillstånd.

Prova följande direktmetoder som nästa steg:

  • Anropa livePipelineSet igen med samma nyttolast och observera att den returnerade statuskoden nu är 200.
  • Anropa igen men med en annan beskrivning och anteckna den uppdaterade beskrivningen i svarsnyttolasten, vilket indikerar livePipelineSet att live-pipelinen har uppdaterats.
  • Anropa livePipelineSet , men ändra namnet till "mdpipeline2" och till rtspUrl "rtsp://rtspsim:554/media/lots_015.mkv". Lägg märke till den nyligen skapade live-pipelinen (det vill säga statuskod 201) i svarsnyttolasten.

    Anteckning

    Enligt förklaringen i Pipeline-topologierkan du skapa flera live-pipelines för att analysera livevideoströmmar från många kameror med samma pipelinetopologi. Om du skapar ytterligare live-pipelines bör du vara noga med att ta bort dem under rensningssteget.

Aktivera live-pipelinen

Därefter kan du aktivera live-pipelinen – som startar flödet av (simulerad) live-video via pipelinen. Anropa direktmetoden livePipelineActivate med följande nyttolast:

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

Inom några sekunder visas följande svar i utdatafönstret.

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

Statuskoden 200 anger att live-pipelinen har aktiverats.

Kontrollera tillståndet för live-pipelinen

Anropa nu livePipelineGet direktmetoden med följande nyttolast:

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

Inom några sekunder visas följande svar i utdatafönstret.

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

Observera följande information i svarsnyttolasten:

  • Statuskoden är 200, vilket indikerar att det lyckades.
  • Tillståndet är "Aktiv", vilket indikerar att live-pipelinen nu är aktiv.

Observera resultat

Live-pipelinen som du skapade och aktiverade ovan använder noden för rörelseidentifieringsprocessorn för att identifiera rörelse i den inkommande direktsänd videoströmmen och skickar händelser till IoT Hub mottagare. Dessa händelser vidarebefordras sedan till IoT Hub som meddelanden, som nu kan observeras. Du ser meddelanden i utdatafönstret som har följande "brödtext":

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

Lägg märke till den här detaljen:

  • Inferensavsnittet anger att typen är rörelse. Den ger ytterligare data om rörelsehändelsen och tillhandahåller en begränsningsruta för regionen för videoramen (vid den angivna tidsstämpeln) där rörelse identifierades.

Anropa ytterligare direkta metod-anrop för att rensa

Därefter kan du anropa direktmetoder för att inaktivera och ta bort live-pipelinen (i den ordningen).

Inaktivera live-pipelinen

Anropa livePipelineDeactivate direktmetoden med följande nyttolast:

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

Inom några sekunder visas följande svar i utdatafönstret:

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

Statuskoden 200 anger att live-pipelinen har inaktiverats.

Försök sedan att anropa enligt livePipelineGet vad som angavs tidigare i den här artikeln. Observera tillståndsvärdet.

Ta bort live-pipelinen

Anropa direktmetoden livePipelineDelete med följande nyttolast

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

Inom några sekunder visas följande svar i utdatafönstret:

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

Statuskoden 200 anger att live-pipelinen har tagits bort.

Om du även har skapat pipelinen med namnet "mdpipeline2" kan du inte ta bort pipelinetopologin utan att även ta bort den här ytterligare pipelinen. Anropa direktmetoden livePipelineDelete igen med hjälp av följande nyttolast:

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

Inom några sekunder visas följande svar i utdatafönstret:

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

Statuskoden 200 anger att live-pipelinen har tagits bort.

Du kan anropa livePipelineList med hjälp av samma nyttolast som pipelineTopologyList . Observera att inga live-pipelines räknas upp.

Ta bort pipelinetopologin

När alla live-pipelines har tagits bort kan du anropa pipelineTopologyDelete direktmetoden med följande nyttolast:

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

Inom några sekunder visas följande svar i utdatafönstret.

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

Statuskoden 200 anger att topologin har tagits bort.

Du kan försöka anropa pipelineTopologyList och observera att modulen inte innehåller några topologier.

Rensa resurser

Om du vill prova andra snabbstarter eller självstudier behåller du de resurser som du har skapat. Annars går du till Azure Portal, går till dina resursgrupper, väljer den resursgrupp där du körde den här snabbstarten och tar bort alla resurser.

Nästa steg