第一步:編碼——將人臉表示為128為的向量
def face_encodings(face_image,known_face_locations=none,num_jitters=1)
"""return:128維人臉編碼向量
param face_image:包含人臉影象
param known_face_locations:是否已知人臉位置
param num_jitters:計算編碼時,重新取樣的次數
"""raw_landmarks=_raw_face_landmarks(face_image,known_face_locations,model="small")
return [np.array(face_encoder.compute_face_descriptor(face_image,raw_landmark_set,numjitters)) for raw_landmark_set in raw_landmarks]
1.1 初始人臉標記
def _raw_face_landmarks(face_image, face_locations=none, model="large"):
"""return:
face_locations: 人臉位置是否已知
model: 兩種模式,5特徵點(small)和68特徵點(large)
"""
if face_locations is none:
face_locations=_raw_face_locations(face_image)
else:
face_locations=[_css_to_rect(face_locations) for face_location in face_locations]
pose_predictor=pose_predictor_68_point
if model=="small"
pose_predictor=pose_predictor_5_point
return [pose_predictor(face_image,face_locations) for face_location in face_locations]
有5特徵點和68特徵點人臉標記模型——訓練特徵點模型,提取能夠區分不同艦船的重要特徵點。
predictor_68_point_model=face_recognition_models.pose_predictor_model_location()
pose_predictor_68_point = dlib.shape_predictor(predictor_68_point_model)
"""來自官方文件
dlib.shape_predictor():輸出一組定義物件姿態的點位置。這方面的經典例子是人臉姿勢**,即以人臉影象作為輸入,並期望識別重要的面部標誌點的位置,如嘴角、眼角、鼻尖等。
"""from pkg_resources import resource_filename
def pose_predictor_model_location():
return resource_filename(_name_,"models/shape_predictor_68_face_landmarks.dat")
def _css_to_rect(css):
"""param css: 矩形的純元組表示(上、右、下、左)
"""return dlib.rectangle(css[3],css[0],css[1],css[2])
1.2 自主訓練人臉特徵點檢測器
第二步:影象匹配
def compare_faces(known_face_encodings, face_encoding_to_check,tolerance=0.6)
"""param known_face_encodings: 一列已知人臉的編碼
param face_encoding_to_check: 需要比對的人臉編碼
param tolerance: 兩張臉之間距離多遠時認為兩張臉是同一人的
"""return list(face_distance(known_face_encodings, face_encoding_to_check)<=tolerance)
定義兩張臉之間的距離face_distance(face_encodings, face_to_compare):多維歐氏距離; 人臉識別的流程
記錄一下目前對人臉識別流程及識別方法的理解,以後隨著認識的提公升不斷更新 在整個過程中所使用的都是灰度化之後的。為什麼要轉化為灰度?1.識別物體最關鍵的部分是,找到物體的邊緣,就是的梯度,的梯度計算用到的就是灰度化之後的。2.顏色容易受到光照影響,難以提供關鍵資訊,最重要的是灰度化之後可以加快計算速...
人臉識別工程主要流程
功能 首先將人臉入庫,每個人採集10張人臉影象 然後可以檢測某個人臉是否屬於這個人臉庫中的某個人 一.利用opencv開啟攝像頭並捕捉影象 二.影象預處理 1.影象灰度化 ptr j colorimage width x char 0.072169 colorimage imagedata 3 j ...
人臉識別工作流程
格靈深瞳 人臉識別最新進展以及工業級大規模人臉識別實踐 簡單來講,人臉識別這個問題,就是給定兩個人臉,然後判定他們是不是同乙個人,這是它最原始的定義。它有很多應用場景,比如銀行櫃檯 海關 手機解鎖 酒店入住 網咖認證,會查身份證跟你是不是同乙個人。這個應用的主要特點是,在大多數場景下都需要你先提供乙...