DNN é o módulo de Deep Neural Network da OpenCV que está disponivel a partir da versão 3.3 na instalação padrão da OpenCV.
Trata-se de um módulo para realizar a infêrncias através de redes neurais pré-treinadas de imagens e videos. Tenha em mente que não é possivel realizar treinamento usando esse módulo, se o objetivo é realizar treinamento de uma rede neural, use frameworks como TensorFlow ou Pytorch.
Tem suporte para os principais frameworks:
- Caffe
- TensorFlow
- Torch
- Darknet
- Formato ONNX
Com relação as funcionalidades, permite trabalhar com:
- Classificação de Imagens
- Detecção de Objetos
- Segmentação de Imagem
- Detecção e reconhecimento de Texto
- Pose e Depth estimation
- entre outros...
A tabela abaixo exibe alguns exemplos possiveis, vale a pena explorar outras combinações de arquiteturas pre-treinadas. Uma lista mais completa é encontrada na wiki da OpenCV.
Classificação de Imagens | Detecção de Objetos | Segmentação de Imagem | Detecção e reconhecimento de Texto | Human Pose estimation | Detecção de face e pessoas |
---|---|---|---|---|---|
Alexnet | MobileNet | SSD | DeepLab | Easy OCR | Open Pose |
GoogLeNet | VGG SSD | UNet | CRNN | Alpha Pose | Torchreid |
VGG | Faster R-CNN | FCN | Mobile FaceNet | ||
ResNet | EfficientDet | OpenCVFaceDetector | |||
SqueezeNet | |||||
DenseNet | |||||
ShuffleNet | |||||
EfficientNet |
Para rodar o módulo DNN vamos seguir um passo-a-passo, uma "receita de bolo":
- Carregar o arquivo com o nome das classes da rede pre-treinada, esse arquivo deve ser baixado previamente do repositório da rede.
- Carregar o arquivo com os pesos da rede pre-treinada, esse arquivo tambem deve ser baixado previamente do repositório da rede.
- Carregar a imagem e preparar no formato correto para passar na entrada rede.
- Realizar a progragação na rede e obter a saida da rede.
Alguns notebooks de exemplo:
O download dos modelos pre-treinados da rede podems ser baixados nos links: