前言
隨著人工智能的日益火熱,計(jì)算機(jī)視覺領(lǐng)域發(fā)展迅速,尤其在人臉識別或物體檢測方向更為廣泛,今天就為大家?guī)碜罨A(chǔ)的人臉識別基礎(chǔ),從一個(gè)個(gè)函數(shù)開始走進(jìn)這個(gè)奧妙的世界。
首先看一下本實(shí)驗(yàn)需要的數(shù)據(jù)集,為了簡便我們只進(jìn)行兩個(gè)人的識別,選取了beyond樂隊(duì)的主唱黃家駒和貝斯手黃家強(qiáng),這哥倆長得有幾分神似,這也是對人臉識別的一個(gè)考驗(yàn):
兩個(gè)文件夾,一個(gè)為訓(xùn)練數(shù)據(jù)集,一個(gè)為測試數(shù)據(jù)集,訓(xùn)練數(shù)據(jù)集中有兩個(gè)文件夾0和1,之前看一些資料有說這里要遵循“slabel”命名規(guī)則,但后面處理起來比較麻煩,因?yàn)槟壳皁pencv接受的人臉識別標(biāo)簽為整數(shù),那我們就直接用整數(shù)命名吧:
為了方便,我們每個(gè)人用20張照片來訓(xùn)練,0代表黃家駒,1代表黃家強(qiáng):
開始啦:
1.檢測人臉
這應(yīng)該是最基本的,給我們一張圖片,我們要先檢測出人臉的區(qū)域,然后才能
進(jìn)行操作,opencv已經(jīng)內(nèi)置了很多分類檢測器,我們這次用haar:
def detect_face(img): #將測試圖像轉(zhuǎn)換為灰度圖像,因?yàn)閛pencv人臉檢測器需要灰度圖像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #加載OpenCV人臉檢測分類器Haar face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml') #檢測多尺度圖像,返回值是一張臉部區(qū)域信息的列表(x,y,寬,高) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5) # 如果未檢測到面部,則返回原始圖像 if (len(faces) == 0): return None, None #目前假設(shè)只有一張臉,xy為左上角坐標(biāo),wh為矩形的寬高 (x, y, w, h) = faces[0] #返回圖像的正面部分 return gray[y:y + w, x:x + h], faces[0]