OpenCV-Python(1)在Python中使用OpenCV進行人臉檢測

OpenCV是現在最流行的計算機視覺庫,而咱們今天就是要學習如何安裝使用OpenCV,以及如何去訪問咱們的攝像頭。而後咱們一塊兒來看看寫一我的臉檢測程序是如何地簡單,簡單到只須要幾行代碼。html

在開始以前,我假設你已經對Python有必定的瞭解。固然,若是你以爲你還未入流,這裏有推薦一些學習Python的電子書,你能夠先學習下Python,如此可讓你更好地理解接下來的步驟。另外,這裏還推薦一本電子書來學習OpenCV。python

好,不浪費時間,開始吧。ide

To setup opencv in python environment you will need these things ready ( match the versions to follow along with this tutorial),
首先咱們須要先準備好這些環境(版本記得配好):函數

  • Python 2.x
  • OpenCV 3 (2也行,同理
  • Numpy庫 (這個能夠在稍後用pip下載)

首先,對於下載Python,咱們能夠先到官網上下對應的版本,若是是Windows就多是msi格式的版本,若是是Mac就多是pkg格式的安裝包,若是是Linux則多是源碼包。學習

安裝和Python後打開命令行就可使用pip命令進行Python包的安裝了,如:測試

因爲OpenCV使用Numpy庫,所以先經過命令pip install numpy安裝Numpy庫。安裝完後,嘗試導入,沒有報錯則ok:this

而後進入OpenCV官網下對應的版本並安裝,嘗試導入:spa

嘗試人臉檢測命令行

萬事俱備,只欠東風。咱們來寫代碼檢測人臉吧,來一發OpenCV的Hello world。code

在這裏咱們準備使用pre-trained的XML文件,這些XML文件都較難訓練,可是咱們不須要擔憂,所以OpenCV已經爲咱們提供了不少人臉檢測相關的pre-trained分類器。

想要使用這寫分類器,咱們須要將分類器的XML文件haarcascade_frontalface_default.xmlopencv文件夾/sources/data/haarcascades/下複製到咱們的項目目錄下,就是咱們將要寫程序的目錄下。若是沒有opencv文件夾/sources/data/haarcascades/這個目錄,能夠嘗試找一下opencv文件夾/share/OpenCV/haarcascades/。只要找到以下文件便可:

而後若是咱們要加載這個分類器的話,如此就好:

detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

而後接下來咱們先來測試一下攝像頭吧,

cap = cv2.VideoCapture(0) ret, img = cap.read() cv2.imshow('windowname', img) cv2.waitKey(0) # 釋放攝像頭資源 cap.release()

以上的代碼是調用你電腦的0號攝像頭,並展現出來。固然,若是你有多個攝像頭,那麼你也能夠試試別的id,修改VideoCapture函數的參數便可。

其中cap.read()就是從攝像頭獲取到圖像,這個函數返回了兩個變量,第一個爲布爾值表示成功與否,以及第二個是圖像。

而後程序經過imshow()展現圖片,其第一個傳入的參數爲窗口的名稱,而第二個就是要展現的圖片,以上代碼傳入的就是咱們的自拍。

而waitKey是用來停在圖片的展現界面,讓你看清楚,參數能夠是十、100、1000等,單位是毫秒,這裏填0就是一直停着。注意了,若是停留的時間不夠久,就可能看不見imshow的照片了。

運行了這段代碼,你將會看到攝像頭所拍攝的畫面,通常來講就是你本身了。

接下來咱們將圖片先轉換爲灰度圖片,

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

而後就開始了人臉檢測之旅:

faces = detector.detectMultiScale(gray, 1.3, 5)

以上的這句代碼會等到一串list,list中的每一個都有x, y, height, width四個變量。其中list表示檢測到的人臉,即list的size就是人臉的個數,而每一個人臉在圖片中的位置是(x, y, height, width)。

爲了能讓咱們更直觀地看出來檢測結果,咱們將這些人臉框出來:

for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

更進一步

如今咱們已經經過攝像頭檢測到人臉了,可是咱們真正須要的是否是一張靜態的圖片,咱們須要的是一個能檢測的實時動態視頻流。所以咱們加一個循環,而後不斷的檢測,最終在顯示在新窗口中。

detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') cap = cv2.VideoCapture(0) while True: ret, img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = detector.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.imshow('frame', img) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()

須要注意的是,結尾用了waitKey和ord實現了按q退出的功能,就是每一毫秒都在檢測鍵盤有沒有按下了q,要是按下了就退出循環了。接下來就釋放資源。

總結廈門叉車租賃

在本文中,咱們學習瞭如何使用Python中的OpenCV,即經過代碼寫了一我的臉檢測的程序。咱們溫習或學習了這些知識點:

  • 使用OpenCV的分類器
  • 從攝像頭中讀取照片
  • 在圖片上換框框
  • 在新窗口上展現圖片
  • 實時地進行人臉檢測

P.S. 大家發現了XML那裏有一個叫貓臉識別的文件嗎!!!

相關文章
相關標籤/搜索