Python人臉識別(1)——人臉檢測(靜態照片)

前言

  接下來開始學習使用python+opencv進行人臉識別功能,但今天先不做人臉識別,先做人臉檢測,要實現給你一張照片要準確的再照片上找到人臉,並將人臉框起來。

1 環境配置

  要使用opencv我們得先安裝相關庫。命令行輸入“pip install opencv-python”回車執行進行安裝

2 準備素材

  接下來準備幾張需要檢測人臉的照片,照片命名儘量言簡意賅,方便調用。

例:我準備了三張照片,分別是大一,大二,大三的照片,本打算做人臉識別,判斷這三張照片是不是同一人,但今天先拿來做人臉檢測實驗。
在這裏插入圖片描述

3 編寫程序

其實人臉檢測程序只有一個,但要檢測三張照片,後面的代碼基本相同,所以就直接複製了。
首先導入三張照片,再用人臉級聯分類器進行人臉檢測,這裏順便加了一個人眼檢測,不僅要檢測到人臉還要檢測到人眼。最後將人臉和人眼用不同顏色的線條框起來

import cv2  # 導入相關庫
img1 = cv2.imread(r'C:\Users\DELL\Desktop\face_test\image\1.jpg',1)  # 導入照片
img2 = cv2.imread(r'C:\Users\DELL\Desktop\face_test\image\2.jpg',1)  # 導入照片
img3 = cv2.imread(r'C:\Users\DELL\Desktop\face_test\image\3.jpg',1)  # 導入照片
face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')  # 人臉檢測
eye_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_eye.xml')  # 人眼檢測
# 照片1處理
face1 = face_engine.detectMultiScale(img1,scaleFactor=1.3,minNeighbors=5)  # 參數可調,有利於分辨
for (x1,y1,w1,h1)in face1:
    img1 = cv2.rectangle(img1,(x1,y1),(x1+w1,y1+h1),(255,0,0),2)  # 臉部框圖繪製
    face_area1 = img1[y1:y1+h1,x1:x1+w1]  # 將眼部檢測區域範圍縮小,減少檢測時間
    eye1 = eye_engine.detectMultiScale(face_area1,1.3,10)
    for (ex1,ey1,ew1,eh1) in eye1:
        cv2.rectangle(face_area1,(ex1,ey1),(ex1+ew1,ey1+eh1),(0,255,0),1)  # 眼部框圖繪製
# 照片2處理
face2 = face_engine.detectMultiScale(img2,scaleFactor=1.2,minNeighbors=2)  # 參數可調,有利於分辨
for (x2,y2,w2,h2)in face2:
    img2 = cv2.rectangle(img2,(x2,y2),(x2+w2,y2+h2),(255,0,0),2)  # 臉部框圖繪製
    face_area2 = img2[y2:y2+h2,x2:x2+w2]  # 將眼部檢測區域範圍縮小,減少檢測時間
    eye2 = eye_engine.detectMultiScale(face_area2,1.3,10)
    for (ex2,ey2,ew2,eh2) in eye2:
        cv2.rectangle(face_area2,(ex2,ey2),(ex2+ew2,ey2+eh2),(0,255,0),1)  # 眼部框圖繪製
# 照片3處理
face3 = face_engine.detectMultiScale(img3,scaleFactor=1.3,minNeighbors=5)  # 參數可調,有利於分辨
for (x3,y3,w3,h3)in face3:
    img3 = cv2.rectangle(img3,(x3,y3),(x3+w3,y3+h3),(255,0,0),2)  # 臉部框圖繪製
    face_area3 = img3[y3:y3+h3,x3:x3+w3]  # 將眼部檢測區域範圍縮小,減少檢測時間
    eye3 = eye_engine.detectMultiScale(face_area3,1.3,10)
    for (ex3,ey3,ew3,eh3) in eye3:
        cv2.rectangle(face_area3,(ex3,ey3),(ex3+ew3,ey3+eh3),(0,255,0),1)  # 眼部框圖繪製
cv2.imshow('1', img1)  # 大一照片人臉檢測展示
cv2.imshow("2", img2)  # 大二照片人臉檢測展示
cv2.imshow("3", img3)  # 大三照片人臉檢測展示
cv2.waitKey(0)  # 循環
cv2.destroyAllWindows()

到這裏代碼就全部結束了,接下來看看展示效果。

3 效果檢測

在這裏插入圖片描述
這裏特別注意,在檢測第二張圖片時,我將檢測的精準度調小了,因爲第二張是偏側臉,精準度太高的話,會識別不到臉。

在這裏插入圖片描述

4 總結

  今天先做靜態照片的人臉檢測,接下來做動態的人臉檢測,之後再做靜態和動態的人臉識別,一步一步來,這樣更容易掌握人臉識別。

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