Os motores de inferência de IA estão se tornando cada vez mais populares na borda. Encontramos algoritmos de aprendizado de máquina e até modelos de linguagem de grande porte sendo transferidos para sistemas embarcados nos espaços de hobbistas e comerciais. Neste projeto, estaremos construindo um detector de rosto em tempo real usando um Orange Pi 5 alimentado pelo processador Rockchip 3588. Isso significa que vamos, em tempo real, detectar rostos humanos a partir do nosso fluxo de vídeo da webcam.
Para começar, vamos usar um Orange Pi 5, uma webcam USB e o código no meu repositório público. Você pode consultar Como Iniciar com o Orange Pi 5 e o Processador Rockchip RK3588 sobre como configurar seu Orange Pi 5. O que é ótimo sobre este exemplo é que ele também pode ser executado em um PC ou qualquer outro dispositivo embarcado de alta potência rodando Linux (por exemplo, Raspberry Pi 5). Depois de ter configurado e iniciado seu Orange Pi 5 (ou outro dispositivo), precisaremos instalar algumas bibliotecas. Este exemplo é projetado em torno do Linux (especificamente rodando Ubuntu), então vamos assumir que você tem acesso ao gerenciador de pacotes Debian. A partir de um terminal, execute o seguinte comando:
sudo apt update -y && sudo apt install -y python3 python3-pip libopencv-dev python3-opencv v4l-utils
Isso instalará todos os pacotes necessários para executar a demonstração. Instale também o pacote Python OpenCV usando pip:
pip3 install opencv-python
Você também pode consultar o README para mais etapas para validar sua configuração.
Em AI Vision com o Kria KV260 Vision AI Starter Kit, demonstramos como construir um motor de inferência de IA para detecção de rostos usando um FPGA, mas o nível de complexidade era extremamente alto. Neste exemplo, vamos explorar uma maneira significativamente mais fácil de fazer a mesma coisa. Isso é mais fácil porque transferimos a complexidade para CPUs ou GPUs, ambos os quais exploraremos neste artigo. A verdadeira beleza é o quão bem otimizado o OpenCV está para nossos computadores. Usar a biblioteca abstrai completamente todas as complexidades de aprendizado de máquina que experimentamos ao tentar construir nossa própria rede neural em um FPGA.
O código é bastante simples. Podemos dividi-lo em algumas etapas:
A verdadeira mágica aqui está no "Classificador em Cascata" que estamos aproveitando com o OpenCV. Este é uma ferramenta baseada em aprendizado de máquina para detecção de objetos que funciona através de uma série de estágios progressivamente complexos (similar ao conceito de rede neural). Pense nisso como uma linha de montagem finamente ajustada, onde cada estágio tem um trabalho: detectar características específicas como bordas, cantos ou formas. Se uma região da imagem passar por todos esses pontos de inspeção, então é marcada como um objeto detectado. Se não, é descartada cedo para economizar tempo e poder de processamento.
Um classificador em cascata é tudo sobre velocidade e eficiência. Ele usa características pré-definidas (ou seja, padrões como bordas ou contrastes) e as processa em etapas, tornando-o perfeito para tarefas em tempo real em dispositivos com capacidades de processamento limitadas. As redes neurais, por outro lado, jogam em uma liga diferente. Elas aprendem automaticamente características diretamente dos dados, então podem lidar com cenários mais complexos e variados. Esse poder, no entanto, tem um preço: as redes neurais exigem muito mais recursos computacionais e tempo. Classificadores em cascata são rápidos e leves, mas menos flexíveis, enquanto redes neurais são robustas, mas consomem muitos recursos. É tudo sobre a ferramenta certa para o trabalho.
No nosso caso, conseguimos usar um modelo pré-treinado, o Detector de Face Frontal Haar (na forma de um arquivo XML), que sabe exatamente o que procurar em um rosto e o que filtrar. Falando praticamente, isso é bom o suficiente como um exemplo simples que estamos explorando. Como mencionado acima, não será tão preciso, mas ainda é bom o suficiente para a maioria dos exemplos simples de detecção de rosto.
Para executar o código, tudo o que você precisa fazer é:
python3 face_detection.py --use-gpu
Ou ignore a flag --use-gpu se você não tem uma GPU no seu dispositivo (ou seja, não está usando um Orange Pi 5). Neste ponto, uma pequena janela deve aparecer, e uma caixa azul deve surgir sobre o seu rosto. No meu caso, uma apareceu imediatamente:
Este projeto demonstra quão acessível se tornou a detecção de rosto em tempo real com ferramentas como o OpenCV e dispositivos como o Orange Pi 5. Ao aproveitar o Classificador em Cascata leve e eficiente (por meio do carregamento de um arquivo XML pré-treinado), construímos um exemplo funcional sem as complexidades das redes neurais ou programação FPGA. Embora esta abordagem tenha suas limitações, como lidar com iluminação variada ou ângulos, é um ponto de entrada perfeito para experimentar com IA de borda.
Com apenas algumas bibliotecas e uma configuração mínima, você pode replicar este projeto em um dispositivo embarcado ou até mesmo em um PC padrão. À medida que os motores de inferência de IA continuam a melhorar, espere ver modelos mais sofisticados rodando em dispositivos com recursos limitados, tornando a IA avançada mais acessível a todos. Para visualizar o repositório contendo todo o código para começar, visite https://gitlab.com/ai-examples/orange-pi-face-detection.