python+opencv入門-動手實現人臉檢測

python+opencv入門-動手實現人臉檢測

參考文章
https://www.educoder.net/shixuns/2pwliuxy/challenges

任務描述

本關任務:利用 openCV 對圖片進行相應的處理。

相關知識

爲了完成本關任務,你需要掌握:
1 . 人臉檢測。
2 . 如何利用 openCV 實現人臉檢測。

人臉檢測

在上一關,我們已經知道如何去檢測圖片中人物的性別。然而,在真實項目中,我們不僅僅是需要知道圖片中人物的性別,有時候還需要將圖片中人臉的位置檢測出來。
在這裏插入圖片描述
如上圖,我們用一個方框將人臉部分給劃分出來,人臉檢測就是需要找出這個方框的正確位置。需要將檢測框位置確定下來需要知道四個參數:
1.x:檢測框左上角點的橫座標。
2.y:檢測框左上角點的縱座標。
3.w:檢測框寬的值。
4.h:檢測框高的值。

在這裏插入圖片描述
如何確定這四個參數的值其實與上一關相似,都需要構建一個損失函數再進行優化,只不過上一關是分類問題,而這一關是迴歸問題。

如何利用openCV實現人臉檢測

跟其它任務一樣,要進行人臉檢測首先得加載待檢測圖片:

import cv2
#加載圖片
img = cv2.imread(img_path,1)
#轉換爲灰度圖
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

其中,cv2.imread() 爲加載圖片方法,參數 img_path 爲待識別圖片路徑, 1 表示加載 BGR 圖片,接下來再使用 cv2.cvtColor() 方法將圖片轉換爲灰度圖。 img 爲待處理圖片,cv2.COLOR_BGR2GRAY 表示將 BGR 圖轉換爲灰度圖。
然後我們再加載已經訓練好的檢測模型:

#加載模型
face_cascade = cv2.CascadeClassifier(model_path)

cv2.CascadeClassifier()爲加載模型方法,model_path爲模型存放路徑。
利用訓練好的模型,我們就能檢測出人臉的位置,代碼如下:

#獲取識別框座標
face_rects = face_cascade.detectMultiScale(gray, 1.1, 10)
x, y, w, h = face_rects[0]

face_cascade.detectMultiScale() 爲人臉檢測方法, gray 爲待檢測灰度圖, 1.1 表示檢測框按 1.1 的比例放大, 10 表示一個目標至少要被檢測到 10 次纔算真正的目標。(x,y) 爲檢測框左上角座標,w,h 爲檢測框寬高長度值。
最後,我們將檢測框添加進圖像中並保存圖像:

#將識別框加入圖片中
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)
#保存圖片
cv2.imwrite(img_save_path,img)

img 爲目標圖片,(x,y) 爲檢測框左上角座標,(x+w,y+h) 爲右下角座標。 (255,0,0) 表示藍色,(0,255,0) 表示綠色,(0,0,255) 表示紅色,3 表示 BGR 三個通道。

編程實踐

編輯器補充代碼,實現人臉檢測方法。
0在這裏插入圖片描述 方便複製學習

# -*- coding: utf-8 -*-#完整代碼!
import cv2


def face_detection(img_path,img_save_path,model_path):    
   '''    
   img_path:待識別圖片路徑
   img_save_path:圖片保存路徑
   model_path:模型所在路徑    
   '''      
   #********* Begin *********#    
   #加載圖片    
   img = cv2.imread(img_path,1)    
   #轉換爲灰度圖    
   gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    
   #加載模型    
   face_cascade = cv2.CascadeClassifier(model_path)    
   #獲取識別框座標    
   face_rects = face_cascade.detectMultiScale(gray, 1.1, 10)    
   x, y, w, h = face_rects[0]    
   #將識別框加入圖片中    
   cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 3)    
   #保存圖片    
   cv2.imwrite(img_save_path,img)    
   #********* End *********#    
   return face_rects[0]



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章