Python實戰案例,影象識別技術OpenCV,Python實現貓臉檢測
前言:
利用Python+OpenCV實現貓臉檢測。
讓我們愉快地開始吧~~~
開發工具
Python版本:3.6.4
相關模組:
cv2模組;
以及一些Python自帶的模組。
環境搭建
安裝Python並新增到環境變數,pip安裝需要的相關模組即可。
原理簡介
簡單地講一講Haar分類器,也就是Viola-Jones識別器。
詳細的原理說明可參考相關檔案中的兩篇論文:
Rapid Object Detection using a Boosted Cascade of Simple Features;
Robust Real-Time Face Detection.
(1)Haar-like特徵
Haar-like矩形特徵是用於物體檢測的數字影象特徵,由兩個或者多個相鄰的黑白矩形組合而成,矩形的特徵值是白色矩形的灰度值之和減去黑色矩形的灰度值之和。一般地,我們認為矩形特徵對一些簡單的圖形結構(線段、邊緣)等較為敏感:
具體到貓臉檢測而言,我們認為把這樣的矩形放到一個非貓臉區域後獲得的特徵值與放到一個貓臉區域後獲得的特徵值是不同的。
利用上述基於特徵的檢測演算法,不僅能夠編碼特定區域的狀態,而且效率高於基於畫素的檢測演算法。
(2)積分圖
下面我們來考慮一下如何計算矩形的特徵值。對影象中的任意一點A(x, y),定義該點的積分圖為其左上角的所有畫素值之和,即:
因此,要計算矩形模板的特徵值,也就是計算兩個區域之間的畫素和之差,只需要用特徵區域端點的積分圖來進行簡單的加減運算就可以了:
(3)Haar分類器
Haar分類器是一個監督學習分類器,要進行目標檢測,首先要對影象進行直方圖均衡化和歸一化處理,然後檢測裡面是否包含要檢測的物體。
流程框架圖為(Haar分類器本質上由Haar特徵提取器、離散強分類器以及強分類級聯器組成):
Haar分類器使用Adaboost演算法,但是把它組織為了篩選式的級聯分類器,在任意一級計算中,一旦獲得輸入內容不在檢測類中的結論,便終止計算,只有通過所有級別的分類器,才可認為檢測到了目標物體,以此來提高檢測效率。
關於AdaBoost演算法,我就不展開介紹了,有興趣的同學可以自己查詢相關資料進行學習。以後有時間我再對其進行詳細的介紹。
(4)適用範圍
適用於“基本剛性”的物體檢測,如臉、汽車、人體和自行車等等。
(5)總結
Viola-Jones目標檢測框架的核心思想是通過滑動視窗掃描影象(多尺度的掃描),然後將每個視窗的Haar特徵值輸入到篩選式的級聯分類器中來判斷該視窗內是否含有目標物體以實現目標檢測。
具體實現
OpenCV中內建了基於Viola-Jones目標檢測框架的Haar分類器,並提供了貓臉檢測預訓練好的模型。因此實現起來十分簡單。
具體實現過程詳見相關檔案中的原始碼。
效果演示
使用方式:
修改原始碼中的圖片名為自己需要檢測的圖片:
在cmd視窗執行DetectCatFace.py檔案即可。
效果:
原圖1:
檢測結果1:
原圖2:
檢測結果2(並不能很好地區分狗狗和貓咪):
文章到這裡就結束了,感謝你的觀看,關注我每天分享Python案例系列,下篇文章分享分析個人音樂收藏。
為了感謝讀者們,我想把我最近收藏的一些程式設計乾貨分享給大家,回饋每一個讀者,希望能幫到你們。
乾貨主要有:
① 2000多本Python電子書(主流和經典的書籍應該都有了)
② Python標準庫資料(最全中文版)
③ 專案原始碼(四五十個有趣且經典的練手專案及原始碼)
④ Python基礎入門、爬蟲、web開發、大資料分析方面的視訊(適合小白學習)
⑤ Python學習路線圖(告別不入流的學習)
All done~完整原始碼+乾貨詳見個人簡介或者私信獲取相關檔案。。