Robô de classificação de reciclagem com Google Coral
Você sabia que a taxa média de contaminação em comunidades e empresas chega a 25%? Isso significa que uma em cada quatro peças de reciclagem que você joga fora não é reciclada. Isso é causado por erro humano em centros de reciclagem. Tradicionalmente, os trabalhadores separam o lixo em diferentes lixeiras, dependendo do material. Os humanos cometem erros e acabam não separando o lixo de maneira adequada, levando à contaminação. À medida que a poluição e as mudanças climáticas se tornam ainda mais significativas na sociedade de hoje, a reciclagem desempenha um papel importante na proteção do nosso planeta. Ao usar robôs para separar o lixo, as taxas de contaminação diminuirão drasticamente, sem falar que serão muito mais baratas e sustentáveis. Para resolver isso, criei um robô de triagem de reciclagem que usa aprendizado de máquina para classificar entre diferentes materiais de reciclagem.
Demonstração:
Código:
Clone meu repositório GitHub para acompanhar este tutorial.
Etapa 1, obtendo os dados:
Para treinar o modelo de detecção de objetos que pode detectar e reconhecer diferentes materiais de reciclagem, usei o conjunto de dados trashnet que inclui 2527 imagens:
- 501 vidro
- 594 papel
- 403 papelão
- 482 plástico
- 410 metal
- 137 lixo
Aqui está uma imagem de exemplo:
Este conjunto de dados é muito pequeno para treinar um modelo de detecção de objetos. Existem apenas cerca de 100 imagens de lixo que são muito pequenas para treinar um modelo preciso, então decidi deixá-las de fora.
Você pode usar esta pasta do Google Drive para baixar o conjunto de dados. Certifique-se de baixar o arquivo dataset-resized.zip. Ele contém o conjunto de imagens que já foram redimensionadas para um tamanho menor para permitir um treinamento mais rápido. Se desejar redimensionar as imagens brutas de acordo com sua preferência, fique à vontade para baixar o arquivo dataset-original.zip.
Etapa 2, Rotulagem das imagens:
Em seguida, precisamos rotular várias imagens de diferentes materiais de reciclagem para que possamos treinar o modelo de detecção de objetos. Para fazer isso, usei o labelImg, software gratuito que permite rotular caixas delimitadoras de objetos em imagens.
Rotule cada imagem com o rótulo adequado. Este tutorial mostra como. Certifique-se de fazer cada caixa delimitadora o mais próximo possível da borda de cada objeto para garantir que o modelo de detecção seja o mais preciso possível. Salve todos os arquivos .xml em uma pasta.
Veja como rotular suas imagens:
Esta é uma experiência muito entediante e entorpecente. Ainda bem que já etiquetei todas as imagens! Você pode encontrá-lo aqui.
Etapa 3, treinamento:
Em termos de treinamento, decidi usar a aprendizagem por transferência usando o Tensorflow. Isso nos permite treinar um modelo decentemente preciso sem uma grande quantidade de dados.
Existem algumas maneiras de fazermos isso. Podemos fazer isso em nossa máquina desktop local na nuvem. O treinamento em nossa máquina local levará muito tempo dependendo da potência do seu computador e se você tiver uma GPU potente. Esta é provavelmente a maneira mais fácil na minha opinião, mas novamente com o lado negativo da velocidade.
Existem alguns pontos importantes a serem observados sobre a aprendizagem por transferência. Você precisa se certificar de que o modelo pré-treinado usado para o treinamento é compatível com o TPU Coral Edge. Você pode encontrar modelos compatíveis aqui. Usei o modelo MobileNet SSD v2 (COCO). Sinta-se à vontade para experimentar com outras pessoas também.
Para treinar em sua máquina local, eu recomendaria seguir o tutorial do Google ou o tutorial do EdjeElectronics se estiver executando no Windows 10. Pessoalmente, testei o tutorial do EdjeElectroncs e tive sucesso no meu desktop. Não posso confirmar se o tutorial do Google funcionará, mas ficaria surpreso se não funcionasse.
Para treinar na nuvem, você pode usar AWS ou GCP. Encontrei este tutorial que você pode experimentar. Ele usa a nuvem TPU do Google, que pode treinar seu modelo de detecção de objetos de forma super rápida. Sinta-se à vontade para usar a AWS também.
Independentemente de você treinar em sua máquina local ou na nuvem, você deve acabar com um modelo de tensorflow treinado.
Etapa 4, Compilando o modelo treinado:
Para que seu modelo treinado funcione com o Coral Edge TPU, você precisa compilá-lo.
Aqui está um diagrama para o fluxo de trabalho:
Após o treinamento, você precisa salvá-lo como um gráfico congelado (arquivo .pb). Em seguida, você precisa convertê-lo em um modelo Tensorflow Lite. Observe como diz “Quantização pós-treinamento”. Se você usou os modelos pré-treinados compatíveis ao usar a aprendizagem por transferência, não é necessário fazer isso. Dê uma olhada na documentação completa sobre compatibilidade aqui.
Com o modelo Tensorflow Lite, você precisa compilá-lo em um modelo Edge TPU. Veja os detalhes de como fazer isso aqui.
Modelo de detecção de reciclagem:
Se você não quiser passar pelo aborrecimento de treinar, converter e compilar o modelo de detecção de objetos, verifique meu modelo de detecção de reciclagem aqui.
Etapa 5, implantar o modelo:
A próxima etapa é configurar o Raspberry Pi (RPI) e o Edge TPU para executar o modelo de detecção de objeto treinado.
Primeiro, configure o RPI usando este tutorial.
Em seguida, configure o Edge TPU seguindo este tutorial.
Finalmente, conecte o módulo da câmera RPI ao raspberry pi.
Agora você está pronto para testar seu modelo de detecção de objetos!
Se você já clonou meu repositório, navegue até o diretório RPI e execute o arquivo test_detection.py:
python test_detection.py --model recycle_ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03 / detect_edgetpu.tflite --labels recycle_ssd_mobilenet_v2_quantized_300x300_coco_2019_03_03> / labels
Uma pequena janela deve aparecer e se você colocar uma garrafa de água de plástico ou outro material de reciclagem, ela deve detectá-lo assim:
Pressione a letra “q” no teclado para encerrar o programa.
Etapa 6, construir o braço robótico:
O braço robótico é um braço impresso em 3D que encontrei aqui. Basta seguir o tutorial de configuração.
É assim que meu braço ficou:
Certifique-se de conectar os pinos do servo aos pinos de E / S do Arduino em meu código. Conecte os servos de baixo para cima do braço nesta ordem:3, 11, 10, 9, 6, 5. Não conectá-los nesta ordem fará com que o braço mova o servo errado!
Teste para ver o funcionamento navegando até o diretório Arduino e executando o arquivo basicMovement.ino. Isso simplesmente agarrará um objeto que você colocar na frente do braço e o deixará cair para trás.
Etapa 7, Conectando o RPI e o braço robótico:
Primeiro precisamos montar o módulo da câmera na parte inferior da garra:
Tente alinhar a câmera o mais reto possível para minimizar erros ao pegar o material reciclado reconhecido. Você precisará usar o cabo longo de fita do módulo da câmera, conforme visto na lista de materiais.
Em seguida, você precisa fazer o upload do arquivo roboticArm.ino para a placa Arduino.
Finalmente, só precisamos conectar um cabo USB entre a porta USB do RPI e a porta USB do Arduino. Isso permitirá que eles se comuniquem via serial. Siga este tutorial sobre como configurar isso.
Etapa 8, toques finais:
Esta etapa é totalmente opcional, mas gosto de colocar todos os meus componentes em uma pequena caixa de projeto agradável.
É assim que parece:
Fonte:Robot Sorting Recycle With Google Coral
Processo de manufatura
- Model Train
- Python / MicroPython Sensor Logger com Planilhas Google
- Um robô móvel com prevenção de obstáculos baseada na visão
- Robô controlado pela Web Raspberry Pi com vídeo
- Desinfecção do robô com luz ultravioleta
- Obstáculos para evitar o robô com servo motor
- Controle de um robô Roomba com Arduino e dispositivo Android
- Dispositivos Bluetooth controlados por voz com OK Google
- Controle PID da Garra do Robô em Matlab / Simulink
- Centro de giro equipado com braço robótico