python简易人脸识别增强版hog模型

摘要:之前发布了文章【python摄像头识别检测已有照片人脸】,虽然可以识别已经存在的头像,但是识别错误的概率还是挺高的,后来几经探索使用hog模型,正脸的识别率会提高不少。

之前发布了文章【python摄像头识别检测已有照片人脸】,虽然可以识别已经存在的头像,但是识别错误的概率还是挺高的,后来几经探索使用hog模型,正脸的识别率会提高不少。

hog(Histogram of Oriented Gradients)模型是一个经典的计算机视觉算法,用于人脸检测,速度较快,适用于大多数普通场景。它适用于实时检测,但在复杂场景下精度可能略逊于 CNN 模型。

import cv2import face_recognitionimport numpy as npimport os# 1. 加载目标人脸照片和提取特征known_face_encodings = known_face_names = # 设置存放人脸照片的目录faces_directory = "faces" # 替换为你的目录路径# 遍历目录中的所有图片文件for filename in os.listdir(faces_directory): if filename.endswith(".jpg") or filename.endswith(".png"): # 加载图片并提取特征 image_path = os.path.join(faces_directory, filename) image = face_recognition.load_image_file(image_path) encoding = face_recognition.face_encodings(image)[0] # 将特征和名字添加到列表 known_face_encodings.append(encoding) name = os.path.splitext(filename)[0] # 使用文件名作为名字 known_face_names.append(name)print(f"已加载以下人脸: {known_face_names}")# 2. 加载要检测的图片image_path = "dp2.jpg" # 替换为你要检测的图片路径image = cv2.imread(image_path)# 3. 在图片中检测人脸rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 转为 RGBface_locations = face_recognition.face_locations(rgb_image, model="hog") # 使用 hog 模型face_encodings = face_recognition.face_encodings(rgb_image, face_locations)# 4. 标记每个人脸的位置,并识别出对应的名字for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings): # 将当前人脸与目标人脸进行比较 matches = face_recognition.compare_faces(known_face_encodings, face_encoding, tolerance=0.4) name = "Unknown" # 使用 face_distance 进一步判断匹配的最优结果 distances = face_recognition.face_distance(known_face_encodings, face_encoding) best_match_index = np.argmin(distances) if distances[best_match_index] import cv2import face_recognitionimport numpy as npimport os# 1. 加载目标人脸照片和提取特征known_face_encodings = known_face_names = # 设置存放人脸照片的目录faces_directory = "faces" # 替换为你的目录路径# 遍历目录中的所有图片文件for filename in os.listdir(faces_directory): if filename.endswith(".jpg") or filename.endswith(".png"): # 加载图片并提取特征 image_path = os.path.join(faces_directory, filename) image = face_recognition.load_image_file(image_path) encoding = face_recognition.face_encodings(image)[0] # 将特征和名字添加到列表 known_face_encodings.append(encoding) name = os.path.splitext(filename)[0] # 使用文件名作为名字 known_face_names.append(name)print(f"已加载以下人脸: {known_face_names}")# 2. 打开视频video_capture = cv2.VideoCapture("video.mp4") # 使用视频文件# video_capture = cv2.VideoCapture(0) # 使用摄像头frame_count = 0 # 用于控制帧率while video_capture.isOpened: ret, frame = video_capture.read if not ret: break # 每 3 帧处理一次 frame_count += 1 if frame_count % 3 != 0: continue # 降低视频分辨率 frame = cv2.resize(frame, (640, 480)) # 3. 在视频帧中检测人脸 rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 转为 RGB face_locations = face_recognition.face_locations(rgb_frame, model="hog") # 使用 hog 模型 face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings): # 4. 将当前人脸与目标人脸进行比较 matches = face_recognition.compare_faces(known_face_encodings, face_encoding, tolerance=0.4) name = "Unknown" # 使用 face_distance 进一步判断匹配的最优结果 distances = face_recognition.face_distance(known_face_encodings, face_encoding) best_match_index = np.argmin(distances) if distances[best_match_index]

要说一下的是,这个人脸识别适合正脸,斜着的脸或侧面的可能不准确,如果要识别各个角度的人脸可考虑训练人脸模型再进行识别。

来源:新手村养牛

相关推荐