Tamanho da fonte: + -

Como o Userful ajuda as organizações a integrar câmeras térmicas | Parte 2

Na parte 1 deste blog, descrevemos como as câmeras térmicas e outras novas tecnologias se tornarão uma segunda natureza no mundo pós-COVID. Nesta parte, mostraremos um exemplo de configuração.

Usamos um servidor de gerenciamento de vídeo (VMS) com uma plataforma de software que se integra a câmeras de centenas de diferentes fornecedores - incluindo câmeras que suportam análises na câmera e / ou imagens térmicas. Os usuários podem configurar eventos na plataforma VMS ou no mecanismo de regras de uma câmera inteligente. Esses eventos podem ser gatilhos de distância do objeto (ou seja, detecção de objetos a uma distância menor que 1.5 metro entre eles), gatilhos de contagem de objetos (ou seja, detecção de um certo número de visitantes em um local) ou gatilhos de temperatura (ou seja, detecção de objetos com temperatura acima de 38 graus centígrados).

Qualquer um desses eventos pode acionar uma chamada HTTP para a API Userful, permitindo que o Userful Server altere automaticamente o conteúdo em um video wall, em uma exibição individual ou em um grupo de exibições. Quão simples é implantar? São necessários apenas três etapas:

  1. Configure os eventos no mecanismo de análise embutido da câmera ou na plataforma VMS baseada em software.
  2. Configure um ouvinte HTTP; para monitorar chamadas HTTP recebidas provenientes de sensores externos.
  3. Configure um comutador de origem; um conjunto de instruções de software para a API Userful sobre o conteúdo a ser exibido nas diferentes telas com base no acionador externo. Podem ser avisos de texto, um vídeo de instruções, feeds de câmera ao vivo, um slide do powerpoint ou qualquer outro tipo de conteúdo que o cliente decida exibir.

O resultado final (usando Python) contém 26 linhas de código no aplicativo principal: 

if __name__ == '__main__': # Ligar o soquete à porta sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_address = ('192.168.1.100', 8081) print ('inicializando na porta% s% s '% server_address) sock.bind (server_address) # Ouvir conexões de entrada sock.listen (1) enquanto True: # Esperar por uma conexão vindo do sensor externo print (' esperando por uma conexão ') conexão, client_address = sock.accept () try: print ('connection from', client_address) # Recebe os dados em pequenos pedaços e lê-os enquanto True: data = connection.recv (512) if data: # extrai os dados vindos da chamada HTTP Camera. camera = extract (data) # login no Userful Server para recuperar o cookie de autenticação session_header = login () # determinar o que está sendo reproduzido atualmente nas telas current_source = is_playing (session_header, 'Shop-Floor') # muda o conteúdo das telas para uma pré-configuração source (neste # exemplo, uma mensagem de aviso HTML switch_source (session_header, 'shop-Floor', 'HTML Warning') # aguarde 5 segundos time.sleep (5) # volte para o conteúdo que estava tocando originalmente switch_source (session_header, 'Shop-Floor', current_source) #delete_source (session_header, 'PIP_Dynamic') time.sleep (5) break else: print (sys.stderr, 'no more data from', client_address) break finally: # Limpe a conexão de conexão .fechar()
 

Então, vamos percorrer este projeto passo a passo.

Etapa 1: configurando eventos na câmeraera ou VMS

Neste exemplo, usamos o mecanismo de análise integrado de nossa plataforma VMS de terceiros que recebe e grava os feeds de várias câmeras. Os administradores podem configurar diferentes eventos dentro do mecanismo de regras da câmera ... Esse pode ser um gatilho de movimento ou analítico, pelo qual o software VMS analisa os feeds de vídeo recebidos e detecta eventos para cada câmera, por exemplo:

  1. Uma pessoa que entra em uma área específica da janela gravada.
  2. Uma pessoa cruzando uma linha virtual de A -> B (balcão de visitantes)
  3. Uma pessoa cruzando uma linha virtual de B -> A (balcão de visitantes)
  4. Uma pessoa com temperatura corporal elevada (> 38 graus)

Cada evento tem um plano de ação; por exemplo, um PEDIDO HTTP para nosso ouvinte da Web em 192.168.1.100:8081 com conteúdo de mensagem como o nome da câmera e a qualificação do evento. Um exemplo de regra de evento é mostrado na figura abaixo.

Etapa 2: o ouvinte HTTP

Um servidor da Web HTTP é um processo simples que está sendo executado em sua máquina e faz exatamente duas coisas:

  1. Escuta solicitações HTTP recebidas em um endereço de soquete TCP específico (endereço IP e um número de porta)
  2. Lida com essa solicitação e age quando uma mensagem é recebida no endereço do soquete.

Neste exemplo; nosso ouvinte está ouvindo a porta 8081 em sua interface Ethernet externa no endereço IP 192.168.1.100. Se as conexões de entrada forem detectadas, os dados recebidos na mensagem HTTP são coletados e processados ​​em um rotina. Esta é a rotina que instrui o servidor Userful sobre o que fazer.Digite seu texto aqui ...

# Ligar o socket à porta import socket sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server_address = ('192.168.1.100', 8081) print ('iniciando na porta% s% s'% server_address) sock .bind (server_address) # Ouvir conexões de entrada sock.listen (1) enquanto True: # Esperar por uma conexão vindo de um sensor externo print ('esperando por uma conexão') connection, client_address = sock.accept () try: print ('conexão de', client_address) # Recebe os dados em pequenos pedaços e lê-os enquanto True: data = connection.recv (512) if data: else: print (sys.stderr, 'sem mais dados de', client_address) break finally: # Limpe a conexão connection.close ()
 

Antes de mudarmos nossa fonte nas telas, verificamos qual fonte está sendo reproduzida atualmente em uma zona (ou seja, grupo de telas). Dessa forma, podemos retornar ao conteúdo original após a passagem de um evento. O código abaixo detectará o nome da fonte atualmente em reprodução (por exemplo, nome do jogador de sinalização ou outro). Ao chamar essa função, repassamos nosso cookie de autenticação e nome da zona.

def is_playing (session_header, zone): get_url = api_url_base + '/ api / zones / byname /' + zone response = requests.get (url = get_url, headers = session_header) if response.status_code == 200: data = response.content dict = json.loads (data) sourceID = dict ['playingSourceId'] sourceName = get_source_info (session_header, sourceID) print (sourceName, 'is playing') else: print (response.status_code) return sourceName def get_source_info (session_header, sourceID) : get_url = api_url_base + '/ api / sources /' + sourceID response = requests.get (url = get_url, headers = session_header) if response.status_code == 200: data = response.content dict = json.loads (data) else : print (response.status_code) return dict ['sourceName'] 

Agora que determinamos o nome da fonte atualmente sendo reproduzida, podemos alterar a fonte dessa zona:

def switch_source (session_header, zone_name, source_name): post_url = api_url_base + '/ api / zones / byname /' + zone_name + '/ switch? destinationSourceName =' + source_name response = requests.put (url = post_url, headers = session_header) valor = False if response.status_code == 200: data = response.content value = json.loads (data) ["isPlaying"] print ('Source Switched') else: print (response.status_code) valor de retorno 

E é isso…. o em nosso HTTP Listener torna-se: (1) recuperar o cookie AUTH para o Userful Server, (2) Detectar a fonte atual reproduzida em uma zona específica, (3) Mudar o conteúdo das telas para uma mensagem de 'Aviso HTML' armazenada no local servidor (4) Pausa por algum tempo, (5) Volte para a fonte original.

# faça login no Userful Server para recuperar o cookie de autenticação session_header = login () # determine o que está sendo reproduzido atualmente nas telas source = is_playing (session_header, 'Zone-3') # muda o conteúdo das telas para uma fonte pré-configurada (neste exemplo, um Mensagem de aviso HTML switch_source (session_header, 'Zone-3', 'HTML Warning') # aguarde 5 segundos time.sleep (5) # volte para o conteúdo que estava originalmente reproduzindo switch_source (session_header, 'Zone-3', source ) #delete_source (session_header, 'PIP_Dynamic') time.sleep (5) break 

Podemos expandir esse script observando realmente os dados que foram recebidos na chamada HTTP provenientes da câmera ou da plataforma VMS. Esses dados podem conter informações sobre a câmera e / ou a fonte de disparo e essas informações podem ser usadas para exibir diferentes tipos de conteúdo. Pense em feeds da câmera ao vivo ou - se a câmera estiver contando pessoas - exibindo quantos clientes estão na loja e quantos clientes adicionais podem entrar na loja.

Com a simplicidade da API REST, os clientes e os integradores de sistemas podem implantar soluções simples em alguns recursos tecnicamente impressionantes. Não há necessidade de soluções pontuais de diferentes fornecedores. Apenas um pouco de imaginação combinada com habilidades limitadas de codificação pode levá-lo longe. Espero que tenhamos despertado seu interesse e estamos ansiosos para participar de mais trocas de idéias e exemplos.


Robert Huijsmans

Vice-Presidente de Engenharia de Soluções

Userful Corporation, INC. 


Assista ao webinar sob demanda para saber mais sobre como usar a API do Userful

Impacto do COVID-19 nas operações comerciais
Como o Userful ajuda as organizações a integrar ...
O comentário para esta postagem foi bloqueado pelo administrador.
 

Comentários

Ao aceitar, você acessará um serviço fornecido por terceiros externos a https://userful.com/