O código disponibilizado aqui faz a contagem de pessoas usando YOLO. As detecções são enviadas para um servidor Thingsboard.
A solução é ideal para captura em uma sala. O código supõe o uso de uma câmera anexada ao equipamento de captura, bem como um servidor Thingsboard em funcionamento.
O código é baseado no trabalho desenvolvido por Nimbus
- Web Cam ou Raspberry Pi Cam
- Caso executando em uma Raspberry Pi, utilizar o modelo versão 4 ou superior
- Acesso a um servidor Thingsboard
Instale as dependências usando pip install -r requirements.txt
Renomeie o arquivo config-exemplo.yaml
para config.yaml
.
Adicione ao arquivo o host
do Thingsboard que será usado para envio das informações e o Token de Acesso do dispositivo criado no respectivo servidor do Thingsboard. Por favor, verifique a documentação do Thingsboard para detalhes sobre a criação de serviços e configuração de dispositivos.
O arquivo dashboard.json
é um exemplo de dashboard. Para usá-lo basta importar o arquivo no servidor Thingsboard. Após isso, deve-se configurar cada widget selecionando o dispositivo criado para receber a telemetria.
Atenção: Caso esteja usando o servidor de demonstração do Thingsboard, o envio de imagens pode não funcionar devido a uma limitação deste servidor quanto ao tamanho do JSON de telemetria enviado. Neste caso, recomendamos usar uma versão on premises do Thingsboard.
No config.yaml
escolha o modo de operação dentre as opções disponíveis:
dev
neste modo não ocorre o envio de dados ao Thinsgboard e a frequência de captura é bastante intensa (ideal para ambientes de desenvolvimento)cv2
é o modo que assume o uso de uma câmera USBpi
é o modo para uso com uma câmera Raspberry Pi Cam em uma Raspberry Pi
Por padrão a captura no modo cv2
é feita a cada 4 segundos e o número de pessoas detectadas pelo modelo YOLO é armazenada. Uma média do número de pessoas detectadas é enviada a cada 60 segundos. Desta forma, suaviza-se os efeitos da variação de detecção causados pela movimentação no ambiente.
No modo pi
a captura é feita, por padrão, a cada 30 segundos e os envios a cada 60 segundos. Os tempos de captura e envio, exceto no modo dev
, podem ser modificados. Para isso, modifique o arquivo config.yaml
.
O código permite o envio da última imagem adquirida pela câmera para o Thingsboard. Para uso desta funcionalidade use a opção sendImage
como true
no arquivo de configuração.
python3 main.py