1. 程式人生 > >python使用opencv基於GoogLeNet 模型識別圖片!

python使用opencv基於GoogLeNet 模型識別圖片!

2017年8月釋出的OpenCV 3.3正式帶來了高度改進的深度學習dnn模組。 該模組現在持許多深度學習框架,包括Caffe,TensorFlow和Torch/PyTorch。該API可C ++可在Python中呼叫,很容易磁碟載入模型;預處理輸入影象;通過網路傳遞影象並獲取輸出分類。

python使用opencv基於GoogLeNet 模型識別圖片!

 

python使用opencv基於GoogLeNet 模型識別圖片!

 

本文演示如何在ImageNet資料集上使用預先訓練的深度學習網路並將其應用於輸入影象。

使用OpenCV進行深度學習

我們將使用OpenCV和GoogleLeNet(在ImageNet上預先訓練)來對影象進行分類。

OpenCV 3.3中的深度學習

自版本v3.1起,OpenCV的dnn模組已成為opencv_contrib庫的一部分。在OpenCV 3.3中,它包含在主庫中。使用OpenCV 3.3,我們可以利用流行的深度學習框架預先訓練好的網路。與OpenCV 3.3相容的流行網路架構包括:GoogleLeNet、AlexNet、SqueezeNet和VGGNet、RESNET。

參考:

https://github.com/opencv/opencv/tree/master/modules/dnn

釋出文件 https://habr.com/company/intel/blog/333612/ 俄語

模型下載: https://itbooks.pipipan.com/fs/18113597-326734543

  • python測試開發專案實戰-目錄
  • python工具書籍下載-持續更新
  • python 3.7極速入門教程 - 目錄

OpenCV深度學習功能和框架

OpenCV 3.3支援 Caffe, TensorFlow和 Torch/PyTorch

框架。目前不支援Keras(因為Keras實際上是TensorFlow和Theano等包裝器),但是由於深度學習庫的普及,Keras 直接支援只是時間問題。

使用OpenCV 3.3,我們可以使用dnn中的以下函式從磁碟載入影象:

  • cv2.dnn.blobFromImage
  • cv2.dnn.blobFromImages

我們可以通過create方法直接從各種框架匯入模型:

  • cv2.dnn.createCaffeImporter
  • cv2.dnn.createTensorFlowImporter
  • cv2.dnn.createTorchImporter

使用read方法直接從磁碟載入序列化模型更容易:

  • cv2.dnn.readNetFromCaffe
  • cv2.dnn.readNetFromTensorFlow
  • cv2.dnn.readNetFromTorch
  • cv2.dnn.readhTorchBlob

載入模型後,.forward方法用於向前傳播我們的影象並獲得實際的分類。

使用深度學習和OpenCV對影象進行分類

GoogLeNet 的參考: Going deeper with convolutions

載入預先訓練好的Caffe模型,並使用它來使用OpenCV對影象進行分類。

程式碼參見: https://github.com/china-testing/python-api-tesing/blob/master/practices/cv/deep_learning_with_opencv.py

執行示例

$ python deep_learning_with_opencv.py --image images/jemma.png 
 --prototxt bvlc_googlenet.prototxt 
 --model bvlc_googlenet.caffemodel --labels synset_words.txt
[INFO] loading model...
[INFO] classification took 0.075035 seconds
[INFO] 1. label: beagle, probability: 0.81137
[INFO] 2. label: Labrador retriever, probability: 0.031416
[INFO] 3. label: bluetick, probability: 0.023929
[INFO] 4. label: EntleBucher, probability: 0.017507
[INFO] 5. label: Greater Swiss Mountain dog, probability: 0.0144

python使用opencv基於GoogLeNet 模型識別圖片!

 

圖片.png

$ python deep_learning_with_opencv.py --image images/traffic_light.png 
 --prototxt bvlc_googlenet.prototxt 
 --model bvlc_googlenet.caffemodel --labels synset_words.txt
[INFO] loading model...
[INFO] classification took 0.080521 seconds
[INFO] 1. label: traffic light, probability: 1.0
[INFO] 2. label: pole, probability: 4.9961e-07
[INFO] 3. label: spotlight, probability: 3.4974e-08
[INFO] 4. label: street sign, probability: 3.3623e-08
[INFO] 5. label: loudspeaker, probability: 2.0235e-08

python使用opencv基於GoogLeNet 模型識別圖片!

 

圖片.png

$ python deep_learning_with_opencv.py --image images/eagle.png
 --prototxt bvlc_googlenet.prototxt 
 --model bvlc_googlenet.caffemodel --labels synset_words.txt
[INFO] loading model...
[INFO] classification took 0.087207 seconds
[INFO] 1. label: bald eagle, probability: 0.96768
[INFO] 2. label: kite, probability: 0.031964
[INFO] 3. label: vulture, probability: 0.00023595
[INFO] 4. label: albatross, probability: 6.3653e-05
[INFO] 5. label: black grouse, probability: 1.6147e-05

python使用opencv基於GoogLeNet 模型識別圖片!

 

圖片.png

$ python deep_learning_with_opencv.py --image images/vending_machine.png
 --prototxt bvlc_googlenet.prototxt 
 --model bvlc_googlenet.caffemodel --labels synset_words.txt
[INFO] loading model...
[INFO] classification took 0.099602 seconds
[INFO] 1. label: vending machine, probability: 0.99269
[INFO] 2. label: cash machine, probability: 0.0023691
[INFO] 3. label: pay-phone, probability: 0.00097005
[INFO] 4. label: ashcan, probability: 0.00092097
[INFO] 5. label: mailbox, probability: 0.00061188

python使用opencv基於GoogLeNet 模型識別圖片!