- Preparando o DVR para RTSP Streaming
- Preparando seu Raspberry Pi
- Instalando OpenCV e outras bibliotecas no Raspberry Pi
- Programando Raspberry Pi para streaming de vídeo RTSP de CCTV
- Testando o Raspberry Pi CCTV Viewer
Grande parte dos prédios comerciais e locais de trabalho hoje possui sistema de vigilância CFTV instalado para monitorar as atividades. Mas, muitas vezes, é difícil para a autoridade em questão ou para o pessoal de segurança monitorar continuamente a transmissão ao vivo de todas as câmeras em busca de atividades suspeitas. Com a visão computacional e o aprendizado de máquina avançando em uma fase rápida, é hora de tornar nossos sistemas de CFTV mais inteligentes. Neste artigo, discutiremos como obter o feed de vídeo de um DVR existente (como Hikvision DVR) por meio de streaming RTSP com Raspberry pi usando Python e OpenCV. Assim que conseguirmos isso, poderemos aproveitar o poder do OpenCV nesses feeds de vídeo para detectar um objeto específico, ler a placa do veículo, reconhecer o rosto e tudo o mais!
Por causa deste tutorial, estarei usando um Hikvision 4 canais CCTV DVR que já está instalado no prédio. Estaremos transmitindo todas as 4 telas da câmera para o Raspberry e exibindo-as em uma tela de toque de 5 polegadas, onde o usuário pode alternar entre cada canal conforme necessário. Não sei muito disso, considerando o poder do OpenCV e tenho planos de aumentá-lo com detecção de movimento, alerta de vídeo bugler, rastreamento de pessoa, etc., mas vamos deixar tudo isso para outro tutorial.
Preparando o DVR para RTSP Streaming
Antes de nos aprofundarmos no hardware raspberry pi e no código python, é importante verificar se o DVR suporta RTSP e como acessá-lo. Passei a maior parte do meu tempo preso aqui porque o procedimento parece ser diferente para cada tipo de DVR e você tem que fazer um monte de acessos e tentativas. Mas, uma vez que você descubra isso, funciona como um encanto todas as vezes.
Em primeiro lugar, verifique se você sabe o nome de usuário e a senha do seu sistema DVR e se ele está conectado à Internet. Também neste tutorial, estarei transmitindo o RTSP apenas de uma rede local, se você tiver um IP estático, pode fazer o encaminhamento de porta e seguir o mesmo para outras redes. Mas no que se refere a este tutorial, estaremos fazendo tudo dentro da rede local.
Etapa 1: Encontre o endereço IP do seu DVR. Assim que o DVR estiver conectado à Internet, ele receberá seu próprio endereço IP. Você pode encontrar este endereço IP na página de configuração do roteador ou na própria tela do DVR (supondo que você tenha um monitor conectado ao DVR). O endereço IP do meu roteador era http://192.168.11.110/ (alterado por razões de segurança)
Etapa 2: Abra qualquer navegador da web de sua escolha e digite o endereço IP e pressione Enter. Você será levado à página de login do DVR. Onde você deve inserir o nome de usuário (o meu foi alterado) e a senha do seu DVR. O nome de usuário padrão será admin, mas você precisa saber a senha. Minha tela de login para DVR é mostrada abaixo, sua aparência pode ser diferente.
Etapa 3: Após um login bem-sucedido, procure o número da porta RTSP em seu DVR; na maioria das vezes, o valor padrão será 554, mas pode mudar. Enquanto você estiver aqui, brinque com as configurações para verificar se há uma opção para habilitar o RTSP, caso contrário, você pode ignorá-la. Você tem que passar algum tempo aqui, pois o procedimento é diferente com base no DVR.
Etapa 4: Prepare seu link RTSP, o link RTSP básico estará no seguinte formato-
rtsp: //
Novamente, depende do tipo de DVR, você pode usar o google para encontrar o que funcionará para você. Aquele que funcionou tinha o formato abaixo, você também pode tentar com este
rtsp: //
Onde
rtsp: // admin: [email protected]: 554 / Streaming / Channels / 202 /
Etapa 5: reproduza a transmissão no VLC para verificar se a conexão RTSP está funcionando. Instale o VLC em um computador conectado à mesma rede do DVR, inicie-o e pressione Ctrl + N para streaming de rede. Insira o URL conforme mostrado abaixo e pressione ok.
Se o link RTSP estiver funcionando como deveria, você deverá ver uma transmissão ao vivo de seu CCTV no player VLC, conforme mostrado abaixo. Se ele gerar um erro, será necessário descobrir o link correto.
Feito isso, não precisamos mais falar sobre o nosso DVR, vamos continuar com o nosso Raspberry pi.
Preparando seu Raspberry Pi
Em seguida, precisamos configurar nosso pi framboesa com a tela de 5 polegadas. Não vou entrar em detalhes sobre isso, já que já cobrimos isso muitas vezes. Você pode ler os seguintes artigos para orientação-
- Primeiros passos com Raspberry Pi
- Interface de exibição de 5 polegadas com Raspberry Pi
Estamos usando um Raspberry Pi 3 B + com o Debian Buster OS rodando nele. Também pode ser uma boa ideia usar o Pi 4 se você puder e também adicionar algumas opções de resfriamento como um dissipador de calor ou ventilador, pois notei que a temperatura atingiu quase 70 ° C. Eu não segui nenhum procedimento de resfriamento até agora, e minha configuração está assim-
Instalando OpenCV e outras bibliotecas no Raspberry Pi
O próximo passo é instalar o OpenCV no Raspberry Pi. Já discutimos como compilar o OpenCV no Raspberry pi.
- Instalando OpenCV no Raspberry Pi
- Introdução ao OpenCV
Você pode seguir o link acima e compilar o OpenCV usando o Cmake ou apenas instalá-lo com um método apt-get. Eu recomendaria o último caso você não goste muito de programação OpenCV. Usei os seguintes comandos para instalar o OpenCV.
sudo apt update sudo apt install python3-opencv
Em nosso programa, também faremos uso da biblioteca “cvui” para criar uma IU básica com dois botões que nos permitem navegar entre as quatro telas. Para instalar o cvui, siga o comando abaixo.
Python3 pip install cvui
Com ambos os pacotes instalados, podemos entrar no programa principal. Certifique-se de que ambos os pacotes instalados estejam funcionando, mas tente importá-los do terminal de comando do Pi.
Programando Raspberry Pi para streaming de vídeo RTSP de CCTV
O programa completo deste projeto pode ser encontrado no final desta página. A explicação do mesmo é a seguinte. Começamos o programa incluindo os arquivos de cabeçalho necessários.
import cv2 import cvui
A próxima parte do programa requer algumas edições. Você deve inserir o nome de usuário e a senha do seu DVR. Para uma tela de 5 polegadas, a largura e a altura são 800 e 480 respectivamente, portanto, inserimos o mesmo.
rtsp_username = "admin" rtsp_password = "aswinth347653" largura = 800 altura = 480 cam_no = 1
Seguindo em frente, temos uma função chamada criar uma câmera que será usada toda vez que mudarmos o número da câmera que deve ser visualizada.
def create_camera (channel): rtsp = "rtsp: //" + rtsp_username + ":" + rtsp_password + "@ 192.168.29.100: 554 / Streaming / channels /" + channel + "02" cap = cv2.VideoCapture () cap.open (rtsp) cap.set (3, 640) # número de ID para largura é 3 cap.set (4, 480) # número de ID para altura é 480 cap.set (10, 100) # número de ID para brilho é 10qq tampa de retorno
Dentro do loop while principal, temos nosso programa para ler um quadro do dispositivo de captura e convertê-lo para tela inteira. A janela de exibição em nosso programa será chamada como uma tela.
sucesso, current_cam = cam.read () dim = (largura, altura) Full_frame = cv2.resize (current_cam, dim, interpolation = cv2.INTER_AREA) cv2.namedWindow ('screen', cv2.WINDOW_NORMAL) cv2.setWindowProperty ('screen ', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
Em seguida, temos o código para dois botões que serão colocados na tela. O comando cvui.button é usado para colocar o botão em um local necessário e o comando cvui.mouse é usado para detectar o clique do mouse. Temos duas instruções if para dois botões, se o botão for clicado, a instrução if respectiva será executada.
if (cvui.button (Full_frame, width - 100, height - 40, "Next") e cvui.mouse (cvui.CLICK)): print ("Next Button Pressed") cvui.init ('screen') cam_no = cam_no +1 if (cam_no> 4): cam_no = 1 del cam cam = create_camera (str (cam_no)) if (cvui.button (Full_frame, width - 200, height - 40, "Previous") e cvui.mouse (cvui. CLICK)): print ("Botão anterior pressionado") cvui.init ('screen') cam_no = cam_no - 1 if (cam_no <1): cam_no = 4 del cam cam = create_camera (str (cam_no))
Dentro da instrução if , com base no botão, aumentamos ou diminuímos a contagem cam_no e, em seguida, excluímos a came existente e criamos uma nova came usando a função que discutimos acima. Além disso, observe que cvui.init deve sempre chamar para atualizar a tela da IU.
A parte final do código é exibir o quadro como saída e para sair da tela de saída quando q é pressionado. Apenas esperamos por um pressionamento de tecla e se a tecla for 'q', destruiremos todas as janelas.
cv2.imshow ('screen', Full_frame) if cv2.waitKey (1) & 0xFF == ord ('q'): cv2.destroyAllWindows () break
Testando o Raspberry Pi CCTV Viewer
Testar o código é bastante simples, ligue o pi e inicie o código python fornecido no final desta página. Verifique se você inseriu as credenciais corretas para o link RTSP funcionar. Se você quiser ficar do lado seguro, também pode tentar usar o VLC player no Pi, que vem pré-instalado no buster OS.
Se funcionar no VLC, podemos ter certeza de que nosso pi está conectado à mesma rede e o link RTSP está funcionando como deveria. Em seguida, abra o programa fornecido na parte inferior desta página e execute-o usando qualquer IDE Python. Se as credenciais forem inseridas corretamente, você verá a tela a seguir. Que mostra a imagem da câmera ao vivo com dois botões na parte inferior.
Como a tela tem uma tela de toque TFT, você pode simplesmente tocar nos botões “anterior” e “próximo” para mover para a próxima câmera. O programa foi escrito para fazer um loop entre as primeiras quatro câmeras, você pode modificá-lo facilmente se houver mais de 4 câmeras conectadas ao seu DVR.
O funcionamento completo deste projeto pode ser encontrado no vídeo no link abaixo. Espero que você tenha gostado do tutorial e aprendido algo útil se tiver alguma dúvida, deixe-as na seção de comentários ou você também pode usar nossos fóruns para postar suas outras perguntas. Além disso, estou planejando adicionar detecção de movimento e recurso de salvamento de vídeo a esta configuração, portanto, fique atento para isso também.