- Componentes necessários
- Instalando OpenCV no Raspberry Pi
- Instalando outros pacotes necessários
- Configuração ThingSpeak para contagem de pessoas
- Configuração de hardware
- Explicação do programa Python para contador de pessoas
- Testando o
No mundo atual de tecnologias de ponta, o processamento digital de imagens está crescendo muito rápido e se tornou uma parte importante de muitos dispositivos digitais, como celulares, câmeras de segurança, laptops, etc.
As aplicações mais comuns de Processamento Digital de Imagens são detecção de objetos, Reconhecimento facial e contador de pessoas. Portanto, neste tutorial, vamos construir uma contagem de multidão OpenCV usando Raspberry Pi e ThingSpeak. Aqui, o módulo de câmera pi será usado para capturar continuamente os quadros e, em seguida, esses quadros serão processados com HOG (descritor de objeto orientado por histograma) para detectar os objetos na imagem. Depois disso, esses frames serão comparados com o modelo pré-treinado do OpenCV para detecção de pessoas. A contagem de pessoas será exibida no canal ThingSpeak que pode ser monitorado de qualquer lugar do mundo.
Componentes necessários
Hardware
- Raspberry Pi 3 (qualquer versão)
- Câmera pi
Software e serviços online
- ThingSpeak
- Python3.0
- OpenCV3.0
Instalando OpenCV no Raspberry Pi
Aqui, a biblioteca OpenCV será usada para detectar a multidão. Para instalar o OpenCV, primeiro atualize o Raspberry Pi.
sudo apt-get update
Em seguida, instale as dependências necessárias para instalar o OpenCV em seu Raspberry Pi.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
Depois disso, instale o OpenCV no Raspberry Pi usando o comando abaixo.
pip3 install opencv-contrib-python == 4.1.0.25
Anteriormente, usamos o OpenCV com Raspberry pi e criamos muitos tutoriais sobre ele.
- Instalando OpenCV no Raspberry Pi usando CMake
- Reconhecimento facial em tempo real com Raspberry Pi e OpenCV
- Reconhecimento de matrículas usando Raspberry Pi e OpenCV
Também criamos uma série de tutoriais OpenCV começando no nível iniciante.
Instalando outros pacotes necessários
Antes de programar o Raspberry Pi para contagem de multidões, vamos instalar os outros pacotes necessários.
Instalando imutils : o imutils é usado para executar algumas funções de processamento de imagem necessárias, como tradução, rotação, redimensionamento, esqueletização e exibição de imagens Matplotlib mais facilmente com OpenCV. Portanto, instale o imutils usando o comando abaixo:
pip3 install imutils
matplotlib : Depois disso, instale abiblioteca matplotlib. Matplotlib é uma biblioteca abrangente para a criação de visualizações estáticas, animadas e interativas em Python.
pip3 install matplotlib
Configuração ThingSpeak para contagem de pessoas
ThingSpeak é uma plataforma de IoT muito popular e, usando a plataforma ThingSpeak, podemos monitorar nossos dados pela Internet de qualquer lugar. Ele também é usado para controlar o sistema pela Internet, usando os canais e páginas da web fornecidos por ThingSpeak. Anteriormente, usamos ThingSpeak para construir muitos projetos baseados em IoT.
Para criar um canal no ThingSpeak primeiro, primeiro inscreva-se no ThingSpeak. No caso de você já ter uma conta no ThingSpeak, faça o login usando seu ID e senha.
Clique em Inscreva-se e insira seus dados.
Depois disso, verifique o seu id de e-mail e clique em continuar.
Agora, após o login, crie um novo canal clicando no botão “ Novo Canal ”.
Após clicar em “ Novo Canal”, digite o Nome e a Descrição dos dados que deseja enviar neste canal. Aqui criamos um campo denominado Pessoas . Vários campos podem ser criados de acordo com os requisitos.
Depois disso, clique no botão Salvar canal para salvar os detalhes.
Para enviar dados para ThingSpeak, insira a chave API e o ID do canal no script Python, então copie a chave API e o ID do canal.
Configuração de hardware
Aqui, exigimos apenas a câmera Raspberry Pi e Pi para este projeto de contagem humana OpenCV e você só precisa conectar o conector de fita da câmera no slot da câmera fornecido no Raspberry pi
A câmera Pi pode ser usada para construir vários projetos interessantes como câmera de vigilância Raspberry Pi, sistema de monitoramento de visitantes, sistema de segurança residencial, etc.
Explicação do programa Python para contador de pessoas
O código python completo para este projeto OpenCV de contagem de multidões é fornecido no final da página. Aqui estamos explicando as seções importantes do código para uma melhor explicação.
Portanto, no início do código, importe todas as bibliotecas necessárias que serão usadas neste projeto.
import cv2 import imutils from imutils.object_detection import non_max_suppression import numpy as solicitações de importação np importar tempo importar base64 de matplotlib importar pyplot como plt de urllib.request importar urlopen
Depois de importar as bibliotecas, insira o ID do canal ThingSpeak e escreva uma chave API que você copiou anteriormente.
channel_id = 812060 # COLOQUE A ID DO CANAL AQUI WRITE_API = 'X5AQ3EGIKMBYW31H' # COLOQUE SUA CHAVE DE ESCRITA AQUI BASE_URL = "https://api.thingspeak.com/update?api_key= {}". formato (WRITE_API)
Agora, inicialize o HOG (descritor de objeto orientado por histograma). HOG é uma das técnicas mais populares para detecção de objetos e tem sido usada em diversas aplicações. cv2.HOGDescriptor_getDefaultPeopleDetector () usado para chamar um modelo pré-treinado de OpenCV para detecção de pessoas. Explicamos anteriormente o HOG em detalhes no tutorial anterior do OpenCV.
hog = cv2.HOGDescriptor () hog.setSVMDetector (cv2.HOGDescriptor_getDefaultPeopleDetector ())
Dentro do detector (), Pi recebe uma imagem RGB dividida em três canais de cores. Depois disso, redimensiona a imagem usando imutils . Em seguida, ele chama o método detectMultiScale () para analisar a imagem para saber se uma pessoa existe usando o resultado da classificação do modelo SVM.
detector de def (imagem): imagem = imutils.resize (imagem, largura = min (400, imagem.shape)) clone = imagem.copy () rects, pesos = hog.detectMultiScale (image, winStride = (4, 4), preenchimento = (8, 8), escala = 1,05)
Às vezes, as caixas de captura se sobrepõem e geram falsos positivos ou erros de detecção, então o código abaixo aplica supressão não máxima de imutils para caixas sobrepostas iniciais .
para (x, y, w, h) em retângulos: cv2.rectângulo (imagem, (x, y), (x + w, y + h), (0, 0, 255), 2) retângulo = np.matriz (para (x, y, w, h) em retos]) resultado = não_max_supressão (retos, probs = Nenhum, overlapThresh = 0,7) resultado de retorno
Dentro da função record () , ele recupera a imagem diretamente da câmera Pi usando o método VideoCapture () do OpenCV, redimensiona usando o imultis e envia os resultados para ThingSpeak.
def record (sample_time = 5): camera = cv2.VideoCapture (0) frame = imutils.resize (frame, width = min (400, frame.shape)) result = detector (frame.copy ()) thingspeakHttp = BASE_URL + " & campo1 = {} ". formato (resultado1)
Testando o
Antes de iniciar o script python, primeiro, verifique se sua câmera PI está funcionando ou não. Depois de revisar a câmera, inicie o script Python emitindo o seguinte comando:
Então você encontrará uma janela aparecendo com o seu feed de vídeo nela. Pi pegará o primeiro quadro e o processará usando o OpenCV para detectar o número de pessoas. Se ele detectar as pessoas, você encontrará uma caixa ao redor como esta:
Agora verifique seu canal ThingSpeak, onde você pode monitorar o tamanho da multidão de qualquer lugar do mundo.
É assim que você pode fazer a contagem de multidão no OpenCV usando o Raspberry Pi. O vídeo de trabalho e o código são fornecidos no final da página.