OpenCV之使用Haar Cascade進行對象檢測

OpenCV之使用Haar Cascade進行對象檢測

Haar Cascade經常使用來作人臉檢測,其實它能夠檢測任何對象。OpenCV項目源碼中有不少訓練好的Haar分類器。html

OpenCV之使用Haar Cascade進行對象檢測OpenCV自帶的haarcascade文件

本帖開始先了解怎麼使用這些現成的分類器,最後再訓練本身的Haar分類器。若是你要檢測什麼物體,先Google,也許已經有訓練好的Haar分類器了(像汽車、貓,狗之類的)。python

若是你沒有安裝OpenCV,參考:Ubuntu編譯安裝OpenCV 3.1(Python)sublime-text

使用OpenCV自帶的Haar分類器檢測臉和眼睛,代碼:api

 

OpenCV之使用Haar Cascade進行對象檢測

使用攝像頭作爲輸入,實時檢測:多線程

上面咱們使用的是訓練好的分類器文件,若是你要檢測的物體沒有現成的Haar分類器,咱們只能本身訓練了,其中最費事的部分就是製做訓練樣本。ide

訓練Haar分類器的主要步驟:工具

  1. 蒐集製做成千上萬張」消極」圖像,什麼圖片都行,可是確保要檢測的對象不在圖像中
  2. 蒐集製做成千上萬張」積極」圖像,確保這些圖像中包含要檢測的對象
  3. http://image-net.org是不錯的圖像資源站
  4. 建立」積極」向量文件
  5. 使用OpenCV訓練Haar分類器

爲了簡單,我使用一張圖片製做」積極」圖像:測試

OpenCV之使用Haar Cascade進行對象識別作一個能檢測我鼠標的Haar分類器

這是個人鼠標,我就使用這一張圖片製做」積極」圖像,沒錯,最後訓練出來的Haar分類器只能識別這個特定鼠標。若是你想要識別各類各樣的鼠標,你須要蒐集整理包含各類鼠標的圖片(標記出圖片中鼠標所在位置-ROI),即便有工具的幫助,這個工做也是至關痛苦的。url

下載」消極」圖像spa

找點和鼠標不想幹的圖片:image-net

OpenCV之使用Haar Cascade進行對象識別

Downloads中包含圖像地址:

OpenCV之使用Haar Cascade進行對象識別

寫一個簡單的Python腳本下載圖片:

 

  • 不少url被牆,你可能須要使用代理。(參考:使用Tor的匿名Python爬蟲)
  • 下載的文件不少,爲了提速,你能夠把上面代碼改成多線程。

OpenCV之使用Haar Cascade進行對象識別

建立消極圖片列表:

建立的neg.txt內容以下:

OpenCV之使用Haar Cascade進行對象識別我下載了2000+圖片

製做」積極」圖像

我使用OpenCV提供的opencv_createsamples命令建立pos.txt文件。它會把要識別的圖片嵌入到消極圖像中,容許咱們快速建立」積極」圖像:

生成的pos.txt文件:

OpenCV之使用Haar Cascade進行對象識別第一列表明「積極」圖像路徑;後面數字表明圖像中有幾個要識別對象和對象所在位置

你能夠看看生成的「積極」圖像,這些圖像中嵌入了要識別的鼠標。

上面的」積極圖像」是自動生成的,這要是手工製做,那工做量可想而知。

建立向量文件

無論你用什麼方法制做」積極」圖像,都須要把它轉換爲向量格式:

開始訓練

大概須要幾個小時,我電腦不給力,上面參數設置的都比較小。

OpenCV之使用Haar Cascade進行對象識別

訓練完成以後生成的haar分類器(cascade.xml)保存在data目錄。

測試生成的haar分類器

OpenCV之使用Haar Cascade進行對象識別

相關文章
相關標籤/搜索