Drone detection using Haar Cascades, Yolov3 in images, videos and webcam.
Projeto desenvolvido para exercitar técnicas de visão computacional, utilizando classificadores treinados em bases de dados não convencionais.
O projeto utiliza a biblioteca OpenCV e classificadores Haar Cascades e Yolov3 personalizados para a detecção de drones em imagens, vídeos ou diretamente da webcam.
*A instalação foi feita em Windows10. Não garanto o funcionamento correto em outros sistemas.
Instale o Anaconda.
Baixe e extraia o repositório do projeto.
Dentro da pasta "yolo-custom" utilize o arquivo url para fazer o download dos pesos da rede na mesma pasta.
Com o Anaconda Prompt aberto, navegue até a pasta do repositório.
Exemplo:
cd E:\Documents\GitHub\yolo-classifier
Para a criação e ativação do ambiente "cvdrone":
conda env create --file environment.yml
conda activate cvdrone
Para rodar os arquivos python, abra o Anaconda Prompt na pasta do repositório e ative o ambiente "cvdrone".
Os argumentos principais dos comandos a seguir são:
- -i : caminho para o arquivo de entrada
- -o : pasta para o arquivo de saída (será salvo com o mesmo nome do arquivo original)
- -y :pasta contendo os arquivos do Yolov3
Haar Cascades para detecção de rostos e drones com webcam.
python cascades_webcam.py
Yolov3 em imagem. Exemplo:
python YOLO_final.py -i data/100.JPEG -o output -y yolo-custom
Yolov3 em vídeo. Exemplo:
python YOLO_final.py -i data/hubsan.mp4 -o output -y yolo-custom
Yolov3 com webcam:
python YOLO_webcam.py -o output -y yolo-custom
Drones ou quadricópteros foram a escolha do objeto de detecção pois eu possuo um drone e posso testar a eficácia da detecção com meus próprios vídeos, além de poder utilizar o sistema para projetos futuros.
Primeiramente foi criado um classificador utilizando Haar Cascades. Para o treinamento, foram utilizadas algumas imagens de drones sem direitos autorais, e milhares de imagens de paisagens retiradas do ImageNet. A classificação usando Haar Cascades é bastante simples de ser implementada.
Depois, uma rede do Yolov3 foi treinada utilizando esta base de dados contendo 2864 imagens de drones e suas respectivas posições rotuladas. Depois de 10,000 iterações, os resultados foram avaliados tanto no conjunto de treino quanto em um conjunto de 24 imagens de teste pertencentes à base de dados, mas que foram rotuladas manualmente.
Para decidir qual conjunto de pesos utilizar, foram gerados os seguintes gráficos:
A classificação utilizando o Yolov3 foi feita com base em um projeto anterior próprio.
Face Detection: https://www.superdatascience.com/pages/computer-vision
Creating your own Haar Cascade OpenCV Python Tutorial: https://pythonprogramming.net/haar-cascade-object-detection-python-opencv-tutorial/
ImageNet: https://image-net.org/
YOLO: Real-Time Object Detection: https://pjreddie.com/darknet/yolo/
YOLO object detection with OpenCV: https://www.pyimagesearch.com/2018/11/12/yolo-object-detection-with-opencv/
Train YOLO to detect a custom object (online with free GPU): https://pysource.com/2020/04/02/train-yolo-to-detect-a-custom-object-online-with-free-gpu/
How to train YOLOv3 using Darknet on Colab 12GB-RAM GPU notebook and speed up load times: http://blog.ibanyez.info/blogs/coding/20190410-run-a-google-colab-notebook-to-train-yolov3-using-darknet-in/
Aksoy, Mehmet Çağrı; Orak, Alp Sezer; Özkan, Hasan Mertcan; Selimoğlu, Bilgin (2019), “Drone Dataset: Amateur Unmanned Air Vehicle Detection”, Mendeley Data, v4. http://dx.doi.org/10.17632/zcsj2g2m4c.4