1. 程式人生 > >win10中Anaconda(Python3.6)配置OpenCV3.3+深度神經網路實現

win10中Anaconda(Python3.6)配置OpenCV3.3+深度神經網路實現

OpenCV3.3的釋出帶來的深度學習dnn模組的支援,模組支援

  • Caffe
  • Tensorflow
  • Torch

等多個深度學習框架,並且有多個網路API介面

  • GoogleLeNet
  • AlexNet
  • SqueezeNet
  • VGGNet
  • ResNet

等等。貢獻者Rynikov Alexander對專案的詳細介紹可以點選:這裡檢視。但是是用俄語寫的,可以谷歌翻譯來看。以下是不同網路的效能對比(翻譯的不太好),另有官方連結,有很詳細的功能說明和程式碼解釋。
不同網咯的效能對比
廢話不多說,以下是我Anaconda(Python3.6)中配置OpenCV3.3的過程,以及深度神經網路示例程式的實現。

一、Anaconda安裝

windows中安裝十分簡單,下載對應版本,根據官網指南安裝即可,不再贅述。

二、opencv3.3安裝

要在Anaconda中安裝opencv3.3需要先下載安裝包,然後啟動Anaconda虛擬環境,利用pip命令即可安裝。

  • 選擇相應版本,我根據系統選擇64位python3.6的
    opencv3.3
  • 剛才已經安裝好了Anaconda,現在在win程式啟動處開啟Anaconda Navigatro
    開啟
  • 建立一個執行環境,選擇python對應版本,起名opencv,我這裡選擇python3.6
    這裡寫圖片描述
  • 在新建的opencv環境中開啟一個命令終端
    這裡寫圖片描述
  • 在新開啟的終端中,進入下載的opencv安裝檔案,執行pip安裝,安裝成功,沒有什麼問題

    這裡寫圖片描述
  • 接下來要安裝numpy和matplotlib,分別執行下列程式碼進行安裝
     
    pip install numpy
    pip install matplotlib

    這裡寫圖片描述
  • 目前位置,已經完成了Anaconda的opencv3.3的安裝,在終端中執行測試,可以看出,連結庫成功,打印出了3.3版本
     
    import cv2

    這裡寫圖片描述
    注:這種安裝方式,只能在剛才建立的名為opencv的Anaconda環境中能使用,在普通cmd命令視窗不能使用opencv,原因是要另外配置環境變數,因為我的電腦裡已經有一個opencv2.4.13了,為了避免兩者混淆,我只在這個環境裡使用。

三、深度神經網路的實現

官網給出了示例程式碼,下載下來,跑一跑。

  • 在頁面最下面填寫郵箱地址,根據提示步驟可以直接獲取示例程式原始碼
  • 獲取原始碼以後,解壓,可以看到裡面有寫好的示例程式和測試圖片
  • 開啟新建的名為opencv的環境裡的終端,進入剛才下載的資料夾內,執行以下命令:
python deep_learning_with_opencv.py --image images/vending_machine.png --prototxt bvlc_googlenet.prototxt --model bvlc_googlenet.caffemodel --labels synset_words.txt
  • 可以看到,終端上輸出了對物體識別的得分情況,並且在圖片上打上了識別效果。
    這裡寫圖片描述
    這裡寫圖片描述

  • 我在網上下載了一個圖片,放在資料夾裡面,再進行一波測試

python deep_learning_with_opencv.py --image images/dog.png --prototxt bvlc_googlenet.prototxt --model bvlc_googlenet.caffemodel --labels synset_words.txt
  • 可見竟然將這隻狗識別成了狼,輸出的第二排名才是狗。
    這裡寫圖片描述
  • 再試一波:
    這裡寫圖片描述
    這裡寫圖片描述
    這裡寫圖片描述
    這裡寫圖片描述

可見,有些識別的效果有點不忍直視,但是有些結果還是很不錯了。而且速度也很快,這次識別所用的是googlelenet的caffe模型,也只能用跑好的網路來forward,想用opencv來訓練估計還是不太行。總之,opencv提供的這個介面算是給全民ai做了不小貢獻呢!

四、函式框架簡介

  • 在dnn中從磁碟載入圖片:
    cv2.dnn.blobFromImage
    cv2.dnn.blobFromImages
  • 用“create”方法直接從各種框架中匯出模型:
    cv2.dnn.createCaffeImporter
    cv2.dnn.createTensorFlowImporter
    cv2.dnn.createTorchImporter
  • 使用“讀取”方法從磁碟直接載入序列化模型:
    cv2.dnn.readNetFromCaffe
    cv2.dnn.readNetFromTensorFlow
    cv2.dnn.readNetFromTorch
    cv2.dnn.readhTorchBlob

從磁碟載入完模型之後,可以用.forward方法來向前傳播我們的影象,獲取分類結果

參考: