Implementar Azure Live Video Analytics em Azure Stack Edge

Nota

Para obter a versão mais recente do serviço, consulte o Azure Video Analyzer.

Este artigo lista os passos que o ajudarão a implementar o Live Video Analytics no seu Azure Stack Edge. Depois de o dispositivo ter sido configurado e ativado, está pronto para a implementação do Live Video Analytics.

Para o Live Video Analytics, vamos implementar via IoT Hub, mas os recursos do Azure Stack Edge expõem uma API Kubernetes, que permite ao cliente implementar soluções adicionais não-IoT Hub que possam interagir com o Live Video Analytics.

Dica

A utilização da API de Kubernetes (K8s) para implantação personalizada é um caso avançado. Recomenda-se que o cliente crie módulos de borda e implemente através do IoT Hub para cada recurso Azure Stack Edge em vez de utilizar a API de Kubernetes. Neste artigo, vamos mostrar-lhe os passos de implantação do módulo Live Video Analytics usando o IoT Hub.

Pré-requisitos

  • Assinatura Azure para a qual tem privilégios de proprietário.

  • Um recurso Azure Stack Edge

  • Um Hub IoT

  • Um diretor de serviço para o módulo Live Video Analytics.

    Utilize uma dessas regiões onde o IoT Hub está disponível: East US 2, Central EUA, North Central US, Japan East, West US 2, West Central US, Canadá East, UK South, France Central, France South, Switzerland North, Switzerland West e Japan West.

  • Conta de armazenamento

    Recomenda-se que utilize contas de armazenamento v2 (GPv2) para fins gerais.
    Saiba mais sobre uma conta de armazenamento v2 para fins gerais.

  • Código de estúdio visual na sua máquina de desenvolvimento. Certifique-se de que tem a extensão Azure IoT Tools.

  • Certifique-se de que a rede de que a sua máquina de desenvolvimento está ligada permite o Protocolo avançado de fila de mensagens sobre a porta 5671. Esta configuração permite que as ferramentas Azure IoT se comuniquem com o Azure IoT Hub.

Configurar Azure Stack Edge para usar vídeo ao vivo Analytics

Azure Stack Edge é uma solução hardware-as-a-Service e um dispositivo de computação de borda ativado por IA com capacidades de transferência de dados de rede. Leia mais sobre a Azure Stack Edge e instruções detalhadas de configuração. Para começar, siga as instruções nos links abaixo:

Ativar os pré-requisitos computo no Azure Stack Edge Local UI

Antes de continuar, certifique-se de que:

  • Ativou o seu recurso Azure Stack Edge.

  • Tem acesso a um sistema de clientes Windows que executa o PowerShell 5.0 ou mais tarde para aceder ao recurso Azure Stack Edge.

  • Para implementar um cluster Kubernetes, é necessário configurar o seu recurso Azure Stack Edge através da sua UI web local.

    • Ligar e configurar:

      1. Ligar
      2. Rede de configuração
      3. Dispositivo de configuração
      4. Configurar os certificados
      5. Ativar
    • Para ativar o cálculo, na UI web local do seu dispositivo, aceda à página compute.

      • Selecione uma interface de rede que deseja ativar para calcular. Selecione Ativar. Permitir a computação resulta na criação de um interruptor virtual no seu dispositivo nessa interface de rede.
      • Deixe os IPs de teste de Kubernetes e os IPs dos serviços externos Kubernetes em branco.
      • Selecione Aplicar - Esta operação deve demorar cerca de 2 minutos.

       Requisitos pré-requisitos de cálculo na UI local Azure Stack Edge

      • Se o DNS não estiver configurado para o recurso API e Azure Stack Edge da Kubernetes, pode atualizar o ficheiro de anfitrião da janela.

        • Abrir um editor de texto como administrador
        • Abrir o ficheiro 'a C:\Windows\System32\drivers\etc\anfitriões
        • Adicione o nome do dispositivo API de Kubernetes IPv4 e nome de anfitrião ao ficheiro. (Esta informação pode ser encontrada no Portal Azure Stack Edge sob a secção dispositivos.)
        • Guardar e fechar

Implementar módulo Live Video Analytics Edge utilizando o portal Azure

Para isso, só vamos tomar medidas específicas a partir da implementação do Live Video Analytics via IoT Hub.

  1. Ignore os passos de criação do utilizador e do grupo e vá para implementar o módulo Deploy Live Video Analytics Edge. Siga os passos aí mencionados.

  2. Nas Opções de Criação de Contentores não é necessário definir variáveis ambientais. Então, salta este passo.

  3. Abra o separador Opções de Criação de Recipientes.

    • Copiar e colar o seguinte JSON na caixa, para limitar o tamanho dos ficheiros de registo produzidos pelo módulo.

         "HostConfig": {
                     "LogConfig": {
                         "Type": "",
                         "Config": {
                         "max-size": "10m",
                         "max-file": "10"
                         }
                     },
                     "Binds": [
                         "/var/media/:/var/media/",
                         "/var/lib/azuremediaservices:/var/lib/azuremediaservices"
                     ]
                     }
      

      Nota

      Se utilizar o protocolo gRPC com transferência de memória partilhada, utilize o modo Anfitrião IPC para acesso à memória partilhada entre soluções live video analytics e inferência.

           "HostConfig": {
                         "LogConfig": {
                             "Type": "",
                             "Config": {
                             "max-size": "10m",
                             "max-file": "10"`
                             }
                         },
                         "Binds": [
                             "/var/media/:/var/media/",
                             "/var/lib/azuremediaservices:/var/lib/azuremediaservices"
                         ],
                         "IpcMode": "host",
                         "ShmSize": 1536870912
                     }
      

      Nota

      A secção "Ligações" no JSON tem 2 entradas. Os diretórios mencionados na secção de ligação acima serão automaticamente criados pela LVA.
      Sinta-se à vontade para atualizar o dispositivo de borda, mas se o fizer, certifique-se de que esses diretórios existem no dispositivo.

    • "/var/lib/azuremediaservices:/var/lib/azuremediaservices": Isto é usado para ligar os dados persistentes de configuração da aplicação do recipiente e armazená-lo no dispositivo de borda.

    • "/var/media:/var/media": Isto liga as pastas de mídia entre o dispositivo de borda e o recipiente. Isto é usado para armazenar as gravações de vídeo quando você executar uma topologia de gráficos de mídia que suporta o armazenamento de clips de vídeo no dispositivo de borda.

  4. Continue os passos no doc e preencha as Definições Twin do Módulo.

  5. Selecione Seguinte: Rotas para continuar até à secção de rotas. Especifique rotas.

    Mantenha as rotas predefinidos e selecione Seguinte: Revisão + criar para continuar na secção de revisão.

  6. Reveja e verifique a sua implementação

(Opcional) Montagem de volume de docker de configuração

Se pretender visualizar os dados nos diretórios de trabalho, siga estes passos para configurar os Conjuntos de Volume Docker antes de ser implantado.

Estes passos abrangem a criação de um utilizador Gateway e a criação de partilhas de ficheiros para visualizar o conteúdo do diretório de trabalho live video analytics e da pasta de mídia Live Video Analytics.

Nota

Os suportes de ligação são suportados, mas os suportes de volume permitem que os dados sejam visualizados e se desejarem copiados remotamente. É possível utilizar tanto os suportes bind como os volumes, mas não podem apontar para o mesmo caminho do contentor.

  1. Abra o portal Azure e vá ao recurso Azure Stack Edge.

  2. Crie um Utilizador Gateway que possa aceder a partilhas.

    1. No painel de navegação esquerdo, clique no gateway de armazenamento cloud.
    2. Clique nos Utilizadores no painel de navegação esquerdo.
    3. Clique em ião + Adicione o utilizador ao conjunto do nome de utilizador e da palavra-passe. (Recomendado: lvauser ).
    4. Clique em Adicionar.
  3. Crie uma partilha local para persistência de vídeo sonoro ao vivo.

    1. Clique em Cloud storage gateway->Shares.
    2. Clique em + Adicionar Ações.
    3. Desafete um nome de ações. (Recomendado: lva ).
    4. Mantenha o tipo de partilha como SMB.
    5. Certifique-se de que a partilha com o cálculo Edge é verificada.
    6. Certifique-se de que a Configure à medida que a partilha local edge é verificada.
    7. Em Detalhes do Utilizador, dê acesso à partilha ao utilizador recentemente criado.
    8. Clique em Criar.

    Partilha local

    Dica

    Utilizando o seu cliente Windows ligado ao seu Azure Stack Edge, ligue-se às ações SMB seguindo os passos mencionados neste documento.

  4. Crie uma Partilha Remota para armazenamento de sincronização de ficheiros.

    1. Primeiro crie uma conta de armazenamento de bolhas na mesma região clicando nas contas de armazenamento em nuvem de >armazenamento .
    2. Clique em Cloud storage gateway->Shares.
    3. Clique em + Adicionar Ações.
    4. Desafete um nome de ações. (Recomendado: media).
    5. Mantenha o tipo de partilha como SMB.
    6. Certifique-se de que a partilha com o cálculo Edge é verificada.
    7. Certifique-se de que a Configure, uma vez que a participação local edge não é verificada.
    8. Selecione a conta de armazenamento recentemente criada.
    9. Definir um nome de recipiente.
    10. Descreva o tipo de armazenamento para Block Blob.
    11. Em Detalhes do Utilizador, dê acesso à partilha ao utilizador recentemente criado.
    12. Clique em Criar.

    Partilha remota

  5. Atualize as opções de criação do módulo Live Video Analytics Edge (ver ponto 4 no documento de módulos adicionais) para utilizar os suportes de volume.

       "createOptions": 
          {
              "HostConfig": 
              {
                  "Binds": 
                  [
                      "/var/lib/azuremediaservices:/var/lib/azuremediaservices"
                  ],
                  "Mounts": 
                  [
                      {
                          "Target": "/var/media",
                          "Source": "media",
                          "Type": "volume"
                      }
                  ]
              }
          }
    

Verifique se o módulo está em funcionamento

O passo final é garantir que o módulo está conectado e funcionando como esperado. O estado de tempo de funcionamento do módulo deve estar a funcionar para o seu dispositivo IoT Edge no recurso IoT Hub.

Para verificar se o módulo está em funcionamento, faça o seguinte:

  1. No portal Azure, volte ao recurso Azure Stack Edge

  2. Selecione o azulejo dos Módulos. Isto leva-te à lâmina dos Módulos. Na lista de módulos, identifique o módulo que implementou. O estado de funcionamento do módulo que adicionou deve estar a funcionar.

    Módulo personalizado

Configure a extensão Azure IoT Tools

Siga estas instruções para ligar ao seu hub IoT utilizando a extensão Azure IoT Tools.

  1. No Código do Estúdio Visual, selecione Ver > Explorer. Ou selecione Ctrl+Shift+E.

  2. No canto inferior esquerdo do separador Explorer, selecione Azure IoT Hub.

  3. Selecione o ícone Mais Opções para ver o menu de contexto. Em seguida, selecione set IoT Hub Connection String.

  4. Quando aparecer uma caixa de entrada, introduza a sua cadeia de ligação IoT Hub.

    • Para obter a cadeia de ligação, vá ao seu IoT Hub no portal Azure e clique nas políticas de acesso compartilhados no painel de navegação à esquerda.
    • Clique em iothubowner obter as teclas de acesso partilhadas.
    • Copie a Cadeia de Ligação – tecla primária e cole-a na caixa de entrada do VSCode.

    A cadeia de ligação será como:
    HostName=xxx.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=xxx

    Se a ligação for bem sucedida, aparece a lista de dispositivos de borda. Devias ver o teu Azure Stack Edge. Agora pode gerir os seus dispositivos IoT Edge e interagir com o Azure IoT Hub através do menu de contexto. Para visualizar os módulos implantados no dispositivo de borda, sob o dispositivo Azure Stack, expanda o nó de Módulos.

Resolução de problemas

  • Kubernetes API Access (kubectl)

    • Siga a documentação para configurar a sua máquina para acesso ao cluster Kubernetes.
    • Todos os módulos IoT Edge implantados utilizam o espaço de iotedge nome. Certifique-se de que inclui isso quando utilizar kubectl.
  • Registos de módulos

    A iotedge ferramenta não está acessível para obter registos. Tem de utilizar registos de kubectl para visualizar os troncos ou o tubo num ficheiro. Exemplo:
    kubectl logs deployments/mediaedge -n iotedge --all-containers

  • Métricas de pod e nó

    Use a parte superior de kubectl para ver as métricas do vagem e do nó.
    kubectl top pods -n iotedge

  • Rede de módulos
    Para a descoberta do Módulo no Azure Stack Edge é necessário que o módulo tenha a ligação da porta hospedeira no createOptions. O módulo será então endereçada. moduleName:hostport

    "createOptions": {
        "HostConfig": {
            "PortBindings": {
                "8554/tcp": [ { "HostPort": "8554" } ]
            }
        }
    }
    
  • Montagem de volume

    Um módulo não arrancará se o recipiente estiver a tentar montar um volume num diretório existente e não vazio.

  • Memória partilhada ao utilizar o gRPC

    A memória partilhada nos recursos do Azure Stack Edge é suportada através de cápsulas em qualquer espaço de nome, utilizando o Anfitrião IPC. Configurar a memória partilhada num módulo de borda para implantação via IoT Hub.

    ...
    "createOptions": {
        "HostConfig": {
            "IpcMode": "host"
        }
    ...
    
    //(Advanced) Configuring shared memory on a K8s Pod or Deployment manifest for deployment via K8s API
    spec:
        ...
        template:
        spec:
            hostIPC: true
        ...
    
  • (Avançado) Co-localização do pod

    Ao utilizar k8s para implementar soluções de inferência personalizadas que comunicam com o Live Video Analytics via gRPC, é necessário garantir que as cápsulas são implantadas nos mesmos nós que os módulos Live Video Analytics.

    • Opção 1 - Utilize a Affinity nó e incorporada em etiquetas nó para co-localização.

    Atualmente, a configuração personalizada nodeSelector não parece ser uma opção, uma vez que os utilizadores não têm acesso a etiquetas definidas nos Nós. No entanto, dependendo das convenções de topologia e nomeação do cliente, poderão utilizar etiquetas de nó incorporados. Uma secção de nodeAffinity que refere os recursos do Azure Stack Edge com Live Video Analytics pode ser adicionada ao manifesto do casulo de inferência para alcançar a co-localização.

    • Opção 2 - Utilize a Affinity do Pod para co-localização (recomendado). Kubernetes tem suporte para Pod Affinity que pode agendar pods no mesmo nó. Uma secção de podAffinity referente ao módulo Live Video Analytics pode ser adicionada ao manifesto do casulo de inferência para obter a co-localização.
    // Example Live Video Analytics module deployment match labels
    selector:
      matchLabels:
        net.azure-devices.edge.deviceid: dev-ase-1-edge
        net.azure-devices.edge.module: mediaedge
    
    // Example Inference deployment manifest pod affinity
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: net.azure-devices.edge.module
                operator: In
                values:
                - mediaedge
            topologyKey: "kubernetes.io/hostname"
    
  • Código de erro 404 ao utilizar rtspsim o módulo
    O recipiente irá ler vídeos de uma pasta dentro do recipiente. Se mapear/ligar uma pasta externa à que já existe dentro da imagem do recipiente, o estivador esconderá os ficheiros presentes na imagem do recipiente.

    Por exemplo, sem encadernações, o recipiente pode ter estes ficheiros:

    root@rtspsim# ls /live/mediaServer/media  
    /live/mediaServer/media/camera-300s.mkv  
    /live/mediaServer/media/win10.mkv  
    

    E o seu anfitrião pode ter estes ficheiros:

    C:\MyTestVideos> dir
    Test1.mkv
    Test2.mkv
    

    Mas quando a seguinte ligação é adicionada no ficheiro manifesto de implantação, o Docker substituirá o conteúdo de /live/mediaServer/media para corresponder ao que está no anfitrião. C:\MyTestVideos:/live/mediaServer/media

    root@rtspsim# ls /live/mediaServer/media
    /live/mediaServer/media/Test1.mkv
    /live/mediaServer/media/Test2.mkv
    

Passos seguintes

Pode utilizar o módulo para analisar streams de vídeo ao vivo invocando métodos diretos. Invoque os métodos diretos no módulo.