项目名称: 基于dlib的人脸识别系统
项目模块:1.人脸识别:实现的功能如下:显示每秒读取的人脸帧数,摄像头捕捉的人脸数,显示已经注册 的人数,人脸超出范围提醒,手动清除人脸数据,输入录入的人脸信息,保存当前人脸,训练人脸,操作完毕退出当前窗口
2.人脸识别:窗口显示人脸相关信息,识别的人脸对应的人信息,以及退出当前窗口的提示
3.图像识别:根据已经录入的人脸数据库信息,查找当前的图片信息是否在数据库中存在
4.退出系统
系统具体应用的技术包括:dlib、numpy、cv2、shutil、time、logging、tkinter、PIL
dlib人脸识别算法的具体流程:a 获取待识别的人脸数据 b. 人脸检测 c.特征提取及预处理
d. SVM训练 e. 计算相似度
该模块可以同时识别多张人脸,我的程序的缺陷是只能识别一张人脸。
我的部分代码如下:
detector = dlib.get_frontal_face_detector()
# Dlib 人脸 landmark 特征点检测器 / Get face landmarks
predictor = dlib.shape_predictor('data/data_dlib/shape_predictor_68_face_landmarks.dat')
# Dlib Resnet 人脸识别模型,提取 128D 的特征矢量 / Use Dlib resnet50 model to get 128D face descriptor
face_reco_model = dlib.face_recognition_model_v1("data/data_dlib/dlib_face_recognition_resnet_model_v1.dat")
face_feature_known_list=[]
face_name_known_list=[]
current_frame_face_cnt=[]
current_frame_e_distance_list = []
def return_euclidean_distance(feature_1, feature_2):
feature_1 = np.array(feature_1)
feature_2 = np.array(feature_2)
dist = np.sqrt(np.sum(np.square(feature_1 - feature_2)))
return dist
def get_face_database():
if os.path.exists("data/features_all.csv"):
path_features_known_csv = "data/features_all.csv"
csv_rd = pd.read_csv(path_features_known_csv, header=None)
for i in range(csv_rd.shape[0]):
features_someone_arr = []
face_name_known_list.append(csv_rd.iloc[i][0])
for j in range(1, 129):
if csv_rd.iloc[i][j] == '':
features_someone_arr.append('0')
else:
features_someone_arr.append(csv_rd.iloc[i][j])
face_feature_known_list.append(features_someone_arr)
logging.info("Faces in Database:%d", len(face_feature_known_list))
return 1
else:
logging.warning("'features_all.csv' not found!")
logging.warning("Please run 'get_faces_from_camera.py' "
"and 'features_extraction_to_csv.py' before 'face_reco_from_camera.py'")
return 0
全部代码网址如下:链接:https://pan.baidu.com/s/1oXdid8fMGs80cgyOiepFNw&ip0d