Neste artigo, gostaria de compartilhar minha própria experiência no desenvolvimento de uma câmera inteligente para ciclistas com um algoritmo avançado de visão computacional para detectar perigos potenciais na estrada e evitar colisões. Descrevi brevemente todo o processo de prototipagem e coleta de dados de vídeo do zero abaixo. Pode ser interessante para engenheiros de Embedded e Machine Learning. Um pequeno spoiler antes de começarmos: o conjunto de dados coletado posteriormente era de código aberto.
Sou um ciclista ávido com 30 anos de experiência, 20 deles em vias públicas. Uma vez sofri um acidente de trânsito na estrada: um carro atropelou minha bicicleta pela lateral. Felizmente, escapei com um leve hematoma e entorse. Então, eu entendo especialmente os problemas de segurança que os ciclistas enfrentam nas vias públicas.
Uma das soluções para o problema é usar câmeras de bicicleta para capturar incidentes. Andar de bicicleta na estrada, como sabemos, torna-se mais seguro quando equipado com uma câmera que captura seu ponto de vista. Em uma briga com um motorista, a filmagem pode servir como uma camada protetora adicional. Sem provas, um motorista antiético pode negar a responsabilidade, mas ter uma câmera para ciclistas pode salvar vidas em tal situação. No Reino Unido, existe até um site chamado Nextbase que facilita o envio de filmagens de câmeras de ação para a polícia, agilizando o processo e reduzindo complicações.
Em outras palavras, você pode capturar o acidente na câmera, mas deve admitir que é sempre melhor evitar uma situação perigosa. Quando iniciei o projeto não havia soluções proativas para prevenir situações perigosas nas estradas. Então decidi criar minha retroiluminação de bicicleta inteligente com uma câmera. A missão do projeto era diminuir as mortes e lesões entre os ciclistas.
Originalmente, o dispositivo foi planejado para ser configurado com um algoritmo avançado de visão computacional, muitas vezes referido como "inteligência artificial" na mídia, que pode detectar perigos potenciais na estrada para os ciclistas. Deixe-me explicar o conceito em palavras simples: se o software detecta perigo, o dispositivo emite uma luz intermitente para chamar a atenção dos motoristas. Além disso, o sistema de segurança emite um som alto para o veículo que vem atrás antes de uma colisão, ajudando a evitá-la.
Para treinar minha rede neural de detecção de objetos (parte do algoritmo de visão computacional, usado para percepção), precisei encontrar um grande conjunto de dados de diferentes cenários de vias públicas capturados por câmeras retrovisoras. Infelizmente, esses conjuntos de dados de código aberto não estavam disponíveis na web quando comecei.
Em sua totalidade, os estudos do comportamento de direção são extremamente úteis na engenharia de transporte, atendendo a vários propósitos, como coleta de dados para análise estatística, identificação de modelos de direção e estimativa de parâmetros de modelagem. Os dados e modelos podem ser aplicados em diversas áreas, incluindo análise de segurança rodoviária, modelos microscópicos para simulação de tráfego, previsão e controle e lógica de controle para sistemas avançados de assistência à direção.
Seguindo em frente, deve-se dizer que, enquanto trabalhava neste projeto, criei o conjunto de dados das vias públicas ucranianas capturadas por câmeras retrovisoras dos primeiros usuários do MVP em 2021.\
Compreendendo totalmente a importância pública e social de ter tais conjuntos de dados em domínio público, carreguei os resultados do meu trabalho aqui .
Para ensinar a rede neural a prever acidentes, tive que coletar muitos dados. Para este caso, eu precisava desenvolver protótipos de câmeras para dar aos meus primeiros testadores beta para gravar seus passeios. Felizmente, minha rede comunitária de ciclismo inclui muitos ativistas de segurança nas estradas. A única coisa que faltava fazer era montar alguns dispositivos para entregá-los aos meus primeiros usuários.
Deixe-me descrever brevemente o processo de desenvolvimento e explicar a lógica da escolha de soluções técnicas específicas abaixo.
A configuração do hardware: a caixa foi impressa em 3D. O módulo de computador Raspberry Pi 3B+ foi escolhido como plataforma e PCBs personalizados foram feitos para manter o gabinete compacto e leve.
Usei um sensor Raspberry Pi IMX219 padrão para a câmera, mas empreguei uma lente de 120 graus. Luzes LED de alta potência e uma lente vermelha (também impressa em 3D) foram adicionadas para melhor visibilidade na estrada.
Utilizei o Google Coral Edge TPU (fotos incluídas), um acelerador neural de 4 TOPs potente e de baixo custo, para rodar redes neurais no dispositivo. O TPU foi conectado via USB. \
Todos esses componentes eletrônicos consumiram 7-8W na carga máxima (gravação de vídeo, operação de rede neural em tempo real e LED piscando). Uma bateria de íons de lítio de 8Ah (fotografias do interior da caixa incluídas) foi usada para garantir 4-5 horas de operação.
Para o sistema operacional, usei o Raspbian padrão, pois é melhor suportado e todos os drivers necessários foram facilmente instalados sem problemas. O código principal que decidi escrever após inicializar o sistema operacional estava em C++.
Não recomendo começar com isso - para fins de experimentação, acredito que o Python pode ser uma opção melhor para iniciantes. No entanto, se você deseja controlar com eficácia e precisão todos os recursos limitados do Raspberry Pi com o máximo de recursos de hardware, vale a pena escrever em C/C++.
Uma das soluções mais interessantes que fiz neste projeto é o mecanismo OTA (over-the-air update) e o mecanismo para coletar gravações de vídeo de dispositivos.
O processo ficou assim: quando um usuário termina um passeio e chega em casa, ele insere um adaptador USB WiFi, que se conecta ao Wi-FI doméstico, e o dispositivo inicia a sincronização.
Todos os vídeos foram sincronizados via Google Drive - criei uma conta do Google separada para cada dispositivo. O Google Drive tem muitas vantagens no meu caso: pude assistir aos vídeos instantaneamente por meio da interface da web do Google Drive, é fácil excluir manualmente ou adicionar novos arquivos e, por último, mas não menos importante, era gratuito para meus experimentos ( até 20GB para cada conta). ( Google , por favor, não seja mau, havia apenas quatro MVPs na minha startup recém-nascida).
O uso da codificação de vídeo H.264 ajuda a manter centenas de vídeos em um Google Drive sem esgotar a capacidade.
Deixe-me descrever o processo OTA: depois de compilar um novo firmware, carrego-o em uma unidade do Google. Na próxima vez durante a sincronização com o Google Drive, um dispositivo baixa a versão de firmware mais recente e substitui a antiga.
Eu usei um utilitário gdrive simples para isso. Aqui está o código que eu uso para carregar um novo arquivo de firmware:
gdrive upload -p “gdrive folder id” “file”
Abaixo, dou uma linha de código para carregar um novo firmware em um dispositivo:
gdrive update “id” “file”
Depois de verificar a versão do firmware, a sincronização do vídeo acontece e todas as novas gravações são carregadas no Google Drive.
É assim que os vídeos baixam para o disco de um dispositivo:
gdrive sync upload “local folder” “gdrive folder id”
Uma vez por dia, eu executava um script em meu servidor para sincronizar todos os Google Drives com minhas pastas locais e baixava todos os novos vídeos.
gdrive sync download “gdrive folder id” “local folder”
Assim, após vários meses de trabalho, meus dispositivos coletaram mais de 200 vídeos prontos para rotulagem.
Depois de coletar o vídeo, processei, filtrei e criei o conjunto de dados. Então reuni uma pequena equipe para rotulagem manual. A equipe incluiu 4 pessoas que rotularam todas as fotos.
Eventualmente, como foi mencionado antes, dei o conjunto de dados para código aberto. Você pode encontrá-lo através do link: link do GitHub.
Acredito que os conjuntos de dados de código aberto são um recurso valioso para a comunidade de pesquisa e podem contribuir muito para o desenvolvimento de novos algoritmos e modelos no campo da segurança no trânsito.