Snabbstart: Komma igång med Azure Video Analyzer
![]()
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.
Förutsättningar
Ett Azure-konto som har en aktiv prenumeration. Skapa ett konto kostnadsfritt om du inte redan har ett.
Anteckning
Du behöver en Azure-prenumeration där du har åtkomst till både rollen Deltagare och Administratör för användaråtkomst. Om du inte har rätt behörigheter kan du kontakta din kontoadministratör för att ge dig dessa behörigheter.
Visual Studio kodmed följande tillägg:
Tips
När du installerar Azure IoT Tools kan du uppmanas att installera Docker. Du kan ignorera uppmaningen.
Ställa in Azure-resurser
Distributionsprocessen tar cirka 20 minuter. När det är klart har du vissa Azure-resurser distribuerade i Azure-prenumerationen, inklusive:
- 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.
- Storage konto – för lagring av inspelade video- och videoanalyser.
- Hanterad identitet – Det här är den användar tilldelade hanterade identiteten som används för att hantera åtkomsten till lagringskontot ovan.
- Virtuell dator – Det här är en virtuell dator som fungerar som din simulerade gränsenhet.
- 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
- I Azure Portal du till den IoT Hub som du skapade som en del av ovanstående steg för att konfigurera
- Leta efter alternativet Policyer för delad åtkomst i det vänstra navigeringsfönstret och klicka där.
- Klicka på principen med namnet iothubowner
- 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
- Öppna Visual Studio Code och välj Visa > utforskaren. Eller välj Ctrl+Skift+E.
- I det nedre vänstra hörnet på fliken Explorer väljer du Azure IoT Hub.
- Välj ikonen Fler alternativ för att se snabbmenyn. Välj sedan Ange IoT Hub anslutningssträng.
- När en indataruta visas anger du IoT Hub anslutningssträngen.
- 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)
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:
I Visual Studio Code öppnar du fliken Tillägg (eller trycker på Ctrl+Skift+X) och söker efter Azure IoT Hub.
Högerklicka och välj Extension Inställningar.
Sök och aktivera "Visa utförligt meddelande".
Öppna Explorer-fönstret i Visual Studio Code och leta efter Azure IoT Hub i det nedre vänstra hörnet.
Expandera noden Enheter.
Högerklicka på och
avasample-iot-edge-devicevä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.
- Högerklicka på "avaedge"-modulen och välj Invoke Module Direct Method (Anropa direktmetod för modul) på snabbmenyn.
- En redigeringsruta visas längst upp i mitten av Visual Studio Kod. Ange
pipelineTopologyListi redigeringsrutan och tryck på Retur. - 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": "rtspUrl"
},
{
"name": "rtspUserName",
"type": "string",
"description": "rtspUserName",
"default": "dummyUserName"
},
{
"name": "rtspPassword",
"type": "string",
"description": "rtspPassword",
"default": "dummypw"
}
],
"sources": [
{
"@type": "#Microsoft.VideoAnalyzer.RtspSource",
"name": "rtspSource",
"transport": "tcp",
"endpoint": {
"@type": "#Microsoft.VideoAnalyzer.UnsecuredEndpoint",
"credentials": {
"@type": "#Microsoft.VideoAnalyzer.UsernamePasswordCredentials",
"username": "${rtspUserName}",
"password": "${rtspPassword}"
},
"url": "${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": "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:
- Anropa
pipelineTopologySetigen. Den returnerade statuskoden är 200. Den här koden anger att en befintlig topologi har uppdaterats. - Anropa
pipelineTopologySetigen, men ändra beskrivningssträngen. Den returnerade statuskoden är 200 och beskrivningen uppdateras till det nya värdet. - Anropa
pipelineTopologyListenligt 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
createdAttidsstämpeln ochlastModifiedAttidsstä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
rtspUrlfö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
livePipelineSetigen 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
livePipelineSetatt live-pipelinen har uppdaterats. - Anropa
livePipelineSet, men ändra namnet till "mdpipeline2" och tillrtspUrl"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.