基础环境
该实验是在Anaconda或Miniconda独立环境中测试部署的,由于Anaconda或Miniconda环境部署网上资料较多,这里就不在赘述。
环境搭建
1、创建python独立环境命令:
conda create -n py310 python=3.10 -y2、进入新创建的python独立环境命令:
conda activate py310查看当前python独立环境的相关库如下:
3、由于face_recognition依赖dlib库;而dlib库pip安装比较容易报错,因此用conda install 安装。命令如下:
conda install -c conda-forge dlib==19.24.0执行成功后conda list查看所包含库如下:
测试库相关截图如下:
4、安装face_recognition库及第三方依赖库命令如下:
pip install face_recognition==1.3.0 setuptools==75.8.0 opencv-python==4.11.0.86 -i https://pypi.tuna.tsinghua.edu.cn/simple执行成功后pip list查看所包含库如下:
案例测试
上述过程完成了环境的搭建,下来用一个简单案例测试一下环境是否搭建成功。
1、测试dlib库的简单代码如下:
import dlib import cv2 # 用于图像读取和显示 # 1. 加载 dlib 的人脸检测器(基于 HOG 特征 + 线性分类器) detector = dlib.get_frontal_face_detector() # 2. 读取图片文件(替换为你的图片路径) image_path = "1.jpeg" # 示例图片,需用户自行准备 image = cv2.imread(image_path) # 检查图片是否加载成功 if image is None: print(f"错误:无法读取图片文件 '{image_path}',请检查路径!") exit() # 3. 将图片转换为 dlib 的格式(HOG 检测器需要) image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 4. 执行人脸检测 # 参数说明:1 表示图像金字塔上采样次数(检测更小人脸) faces = detector(image_gray, 1) # 5. 在图片上标注检测到的人脸 for face in faces: # 获取人脸边界框坐标 x, y, w, h = face.left(), face.top(), face.width(), face.height() # 用绿色矩形框标注人脸 cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2) # 6. 显示结果 cv2.imwrite("result_fr.jpeg", image) # 7. 输出检测结果 print(f"检测到 {len(faces)} 张人脸!")执行上述代码运行如下:
2、测试face_recognition库的简单代码如下:
import face_recognition class FaceCompare: """人脸特征比对工具类 Attributes: known_face_encoding (numpy.ndarray): 已知人脸编码 unknown_face_encoding (numpy.ndarray): 待识别人脸编码 tolerance (float): 相似度阈值(默认0.6) """ def __init__(self, known_image_path, unknown_image_path, tolerance=0.6): """初始化人脸编码器 Args: known_image_path (str): 基准图像路径 unknown_image_path (str): 待比对图像路径 tolerance (float, optional): 匹配阈值 """ self.known_face_encoding = None self.unknown_face_encoding = None self.tolerance = tolerance try: known_image = face_recognition.load_image_file(known_image_path) self.known_face_encoding = face_recognition.face_encodings(known_image)[0] except IndexError: print("错误:基准图像未检测到人脸") except Exception as e: print(f"基准图像加载失败: {e}") try: unknown_image = face_recognition.load_image_file(unknown_image_path) self.unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0] except IndexError: print("错误:待比对图像未检测到人脸") except Exception as e: print(f"待比对图像加载失败: {e}") def compare(self): """执行人脸特征比对 Returns: tuple: (匹配结果bool, 相似度float) """ # 返回比较结果 # match_result = face_recognition.compare_faces([self.known_face_encoding], self.unknown_face_encoding, tolerance=self.tolerance) match_score = face_recognition.face_distance([self.known_face_encoding], self.unknown_face_encoding) similarity = 1.0 - abs(match_score) # 标准化相似度 print(f"self.tolerance : {self.tolerance}, similarity : {similarity}") return similarity > self.tolerance, similarity if __name__ == "__main__": comparator = FaceCompare( known_image_path=r"./pic/bao1.png", unknown_image_path=r"./pic/bao2.png" ) is_match, score = comparator.compare() print(f"匹配结果: {is_match}\n相似度: {score}")执行上述代码运行如下:






714



被折叠的 条评论
为什么被折叠?



