1. 程式人生 > >Dlib人臉識別 版本一(最初cascade)

Dlib人臉識別 版本一(最初cascade)

# -*- coding: UTF-8 -*-

import sys,os,dlib,glob,numpy from skimage import io

if len(sys.argv) != 5:     print ("請檢查引數是否正確")     exit()

# 1.人臉關鍵點檢測器 predictor_path = sys.argv[1]

# 2.人臉識別模型 face_rec_model_path = sys.argv[2]

# 3.候選人臉資料夾 faces_folder_path = sys.argv[3]

# 4.需識別的人臉 img_path = sys.argv[4]

# 1.載入正臉檢測器 detector = dlib.get_frontal_face_detector()

# 2.載入人臉關鍵點檢測器 sp = dlib.shape_predictor(predictor_path)

# 3. 載入人臉識別模型 facerec = dlib.face_recognition_model_v1(face_rec_model_path)

win = dlib.image_window()

# 候選人臉描述子list descriptors = []

# 對資料夾下的每一個人臉進行: # 1.人臉檢測 # 2.關鍵點檢測 # 3.描述子提取

for f in glob.glob(os.path.join(faces_folder_path, "*.jpg")):     print("Processing file: {}".format(f))     img = io.imread(f)     win.clear_overlay()     win.set_image(img)

    # 1.人臉檢測     dets = detector(img, 1)     print("Number of faces detected: {}".format(len(dets)))

    for k, d in enumerate(dets):           # 2.關鍵點檢測         shape = sp(img, d)         # 畫出人臉區域和和關鍵點         win.clear_overlay()         win.add_overlay(d)         win.add_overlay(shape)

        # 3.描述子提取,128D向量         face_descriptor = facerec.compute_face_descriptor(img, shape)

        # 轉換為numpy array         v = numpy.array(face_descriptor)         print(v)         descriptors.append(v)

# 對需識別人臉進行同樣處理

# 提取描述子,不再註釋 img = io.imread(img_path) dets = detector(img, 1)

win.clear_overlay() win.set_image(img)

dist = [] for k, d in enumerate(dets):     shape = sp(img, d)          win.clear_overlay()     win.add_overlay(d)     win.add_overlay(shape)          face_descriptor = facerec.compute_face_descriptor(img, shape)          # 轉換為numpy array     d_test = numpy.array(face_descriptor)      print(d_test)          # 計算歐式距離     for i in descriptors:         dist_ = numpy.linalg.norm(i-d_test)         dist.append(dist_)

# 候選人名單 candidate = ['郭德綱','李克強','劉德華','孫悅','于謙','劉鶴','周小川','樑振英','90金正日','金正日']

# 候選人和距離組成一個dict c_d = dict(zip(candidate,dist))

cd_sorted = sorted(c_d.items(), key=lambda d:d[1]) print(cd_sorted) print ("\n The person is: ",cd_sorted[0][0])   print("\n Or he person is: ",cd_sorted[1][0]) dlib.hit_enter_to_continue()