Preterido. Biblioteca de clientes do Edge do Analisador de Vídeo do Azure para .NET

Preterido. Estamos desativando o serviço de visualização do Analisador de Vídeo do Azure. Aconselhamos que você faça a transição de seus aplicativos do Analisador de Vídeo até 01 de dezembro de 2022. Esse SDK não é mais mantido.

O Analisador de Vídeo do Azure é um Serviço de IA Aplicada do Azure que fornece uma plataforma para você criar aplicativos de vídeo inteligentes que podem abranger infraestruturas de borda e de nuvem. A plataforma oferece a capacidade de capturar, gravar e analisar vídeos ao vivo, juntamente com a publicação dos resultados, da análise de vídeo e vídeo, nos serviços do Azure na borda ou na nuvem. Ele foi projetado para ser uma plataforma extensível, permitindo que você conecte diferentes módulos de borda de inferência de vídeo, como módulos de serviços cognitivos, ou módulos de inferência personalizados que foram treinados com seus próprios dados usando o aprendizado de máquina de software livre ou o Azure Machine Learning.

Use a biblioteca de clientes do Analisador de Vídeo edge para:

Documentação do produto | Métodos diretos | Pipelines | Código-fonte | Amostras

Introdução

Este é um SDK somente para modelos. Todas as operações de cliente são feitas usando os SDKs de IoT do Microsoft Azure. Esse SDK fornece modelos que você pode usar para interagir com os SDKs de IoT do Azure.

Autenticar o cliente

O cliente vem do SDK do IoT do Azure. Você precisará obter uma cadeia de conexão de dispositivo IoT para autenticar o SDK do IoT do Azure. Para obter mais informações, visite: https://github.com/Azure/azure-iot-sdk-csharp.

string connectionString = System.Environment.GetEnvironmentVariable("iothub_connectionstring", EnvironmentVariableTarget.User);
var serviceClient = ServiceClient.CreateFromConnectionString(connectionString);

Instalar o pacote

Instale a biblioteca de clientes do Analisador de Vídeo do Edge para .NET com o NuGet:

dotnet add package Azure.Media.VideoAnalyzer.Edge --prerelease

Instale o SDk do Hub IoT do Azure para .NET com o NuGet:

dotnet add package Microsoft.Azure.Devices

Pré-requisitos

  • Você precisa de uma assinatura ativa do Azure e uma cadeia de conexão de dispositivo IoT para usar esse pacote.

  • Você precisará usar a versão do SDK que corresponde à versão do módulo de Borda do Analisador de Vídeo que você está usando.

    . Módulo de borda do Analisador de Vídeo
    1.0.0-beta.5 1,1
    1.0.0-beta.4 1.0
    1.0.0-beta.3 1.0
    1.0.0-beta.2 1.0
    1.0.0-beta.1 1.0

Criar uma topologia de pipeline e fazer solicitações

Visite os Exemplos de código inicial.

Principais conceitos

Topologia de pipeline versus pipeline ao vivo

Uma topologia de pipeline é um blueprint ou modelo para instanciar pipelines ao vivo. Ele define os parâmetros do pipeline usando espaços reservados como valores para eles. Um pipeline ao vivo faz referência a uma topologia de pipeline e especifica os parâmetros. Dessa forma, você pode ter vários pipelines dinâmicos referenciando a mesma topologia, mas com valores diferentes para parâmetros. Para obter mais informações, visite topologias de pipeline e pipelines ao vivo.

CloudToDeviceMethod

O CloudToDeviceMethod faz parte do SDk azure-iot-hub. Esse método permite que você comunique notificações unidirecionais a um dispositivo no hub IoT. Em nosso caso, queremos comunicar vários métodos, como PipelineTopologySetRequest e PipelineTopologyGetRequest. Para usar CloudToDeviceMethod , você precisa passar um parâmetro: MethodName e, em seguida, definir o conteúdo JSON desse método.

O parâmetro MethodName é o nome da solicitação que você está enviando. Use a propriedade predefinida MethodName de cada método. Por exemplo, PipelineTopologySetRequest.MethodName.

Para definir o conteúdo Json do método de nuvem, use a função do método de solicitação de GetPayloadAsJson() pipeline. Por exemplo, directCloudMethod.SetPayloadJson(PipelineTopologySetRequest.GetPayloadAsJson())

Acesso thread-safe

Garantimos que todos os métodos de instância do cliente sejam thread-safe e independentes uns dos outros (diretriz). Isso garante que a recomendação de reutilize instâncias de cliente seja sempre segura, mesmo entre threads.

Conceitos adicionais

Opções do | cliente Acessando a resposta | Operações de execução longa | Tratamento de falhas | Diagnostics | Zombando | Tempo de vida do cliente

Exemplos

Criando uma topologia de pipeline

Para criar uma topologia de pipeline, você precisa definir fontes e coletores.

Definir parâmetros

pipelineTopologyProperties.Parameters.Add(new ParameterDeclaration("rtspUserName", ParameterType.String)
{
    Description = "rtsp source user name.",
    Default = "exampleUserName"
});
pipelineTopologyProperties.Parameters.Add(new ParameterDeclaration("rtspPassword", ParameterType.SecretString)
{
    Description = "rtsp source password.",
    Default = "examplePassword"
});
pipelineTopologyProperties.Parameters.Add(new ParameterDeclaration("rtspUrl", ParameterType.String)
{
    Description = "rtsp Url"
});

Definir uma origem

pipelineTopologyProps.Sources.Add(new RtspSource("rtspSource", new UnsecuredEndpoint("${rtspUrl}")
{
    Credentials = new UsernamePasswordCredentials("${rtspUserName}", "${rtspPassword}")
})
);

Definir um coletor

var nodeInput = new List<NodeInput>
{
    new NodeInput("rtspSource")
};
pipelineTopologyProps.Sinks.Add(new VideoSink("videoSink", nodeInput, "video", "/var/lib/videoanalyzer/tmp/", "1024"));

Definir as propriedades da topologia e criar uma topologia

var pipelineTopologyProps = new PipelineTopologyProperties
{
    Description = "Continuous video recording to a Video Analyzer video",
};
SetParameters(pipelineTopologyProps);
SetSources(pipelineTopologyProps);
SetSinks(pipelineTopologyProps);
return new PipelineTopology("ContinuousRecording")
{
    Properties = pipelineTopologyProps
};

Criando um pipeline ao vivo

Para criar um pipeline ao vivo, você precisa ter uma topologia de pipeline existente.

var livePipelineProps = new LivePipelineProperties
{
    Description = "Sample description",
    TopologyName = topologyName,
};

livePipelineProps.Parameters.Add(new ParameterDefinition("rtspUrl", "rtsp://sample.com"));

return new LivePipeline("livePIpeline")
{
    Properties = livePipelineProps
};

Invocando um método direto

Para invocar um método direto em seu dispositivo, primeiro você precisa definir a solicitação usando o SDK do Edge do Analisador de Vídeo e, em seguida, enviar essa solicitação de método usando o do SDK do CloudToDeviceMethodIoT.

var setPipelineTopRequest = new PipelineTopologySetRequest(pipelineTopology);

var directMethod = new CloudToDeviceMethod(setPipelineTopRequest.MethodName);
directMethod.SetPayloadJson(setPipelineTopRequest.GetPayloadAsJson());

var setPipelineTopResponse = await _serviceClient.InvokeDeviceMethodAsync(_deviceId, _moduleId, directMethod);

Para experimentar topologias de pipeline diferentes com o SDK, consulte os Exemplos oficiais.

Solução de problemas

  • Ao enviar uma solicitação de método usando o Hub IoT lembre-se de CloudToDeviceMethod não digitar diretamente o nome da solicitação do método. Em vez disso, use MethodRequestName.MethodName

Próximas etapas

Contribuição

Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder, e de fato concede, os direitos de usar sua contribuição. Para obter detalhes, visite https://cla.microsoft.com.

Se você encontrar problemas, abra um problema em nosso Github.

Quando você envia uma solicitação de pull, um bot do CLA determina automaticamente se você precisa fornecer um CLA e preencher a PR corretamente (por exemplo, rótulo, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que usam nosso CLA.

Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para obter mais informações, confira as Perguntas frequentes sobre o código de conduta ou entre em contato com opencode@microsoft.com para enviar outras perguntas ou comentários.

Impressões