[人臉識別]09-人臉模型訓練
阿新 • • 發佈:2022-04-09
1.程式程式碼
#匯入CV模組 import cv2 as cv import os from PIL import Image import numpy as np def getImageAndLabels(path): #儲存人臉資料 facesSamples=[] #儲存姓名資料 ids=[] # 儲存圖片資訊 imagePaths=[ os.path.join(path,f) for f in os.listdir(path)] print("files:",imagePaths) #載入分類器 face_detector=cv.CascadeClassifier(cv.data.haarcascades+"haarcascade_frontalface_default.xml") #遍歷列表中的圖片 for imagePath in imagePaths: #開啟圖片,灰度化,PIL有九種不同模式:1,l,p,rgb,rgba,cmyk,yCbCr,I,F PIL_img=Image.open(imagePath).convert('L') #將圖片轉換為陣列,以黑白深淺 img_numpy=np.array(PIL_img,'uint8') #獲取人臉特徵 faces=face_detector.detectMultiScale(img_numpy)#獲取每張圖片的ID和新名 id=int(os.path.split(imagePath)[1].split('.')[0]) #預防無面容照片 for x,y,w,h in faces: ids.append(id) facesSamples.append(img_numpy[y:y+h,x:x+w]) print('id',id) print('fs',facesSamples) return facesSamples,ids if __name__ == '__main__': #圖片路徑 root = os.getcwd() path=root+"/jm/" print("path:", path) #獲取影象陣列,id faces,ids=getImageAndLabels(path) #獲取訓練物件 recognizer=cv.face.LBPHFaceRecognizer_create() #執行訓練 recognizer.train(faces,np.array(ids)) #儲存訓練結果 print("write:", root+"/trainer/trainer.yml") recognizer.write(root+"/trainer/trainer.yml")
2結果
.