基础环境
1、该实验是在Anaconda或Miniconda独立环境中测试部署的,由于Anaconda或Miniconda环境部署网上资料较多,这里就不在赘述。
2、由于InsightFace是一个开源的人脸识别框架,它基于深度学习技术,能够提供高精度的人脸识别服务,因此需要支持所需的GPU环境,这个在之前博客有详细教程:https://blog.youkuaiyun.com/ddazz0621/article/details/149071101这里不在赘述。基础环境截图如下:
环境搭建
1、创建python独立环境命令:
conda create -n insightface_env python=3.8 -y2、进入新创建的python独立环境命令:
conda activate insightface_env查看当前python独立环境的相关库如下:
3、conda install 安装所需依赖库命令如下:
conda install numpy scipy matplotlib pandas scikit-learn -y上述命令安装成功后,conda list 查看安装库部分截图如下:
4、pip 安装所需依赖库命令如下:
pip install mxnet-cu112 onnxruntime-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple安装成功截图如下:
5、安装insightface库命令如下:
pip install insightface -i https://pypi.tuna.tsinghua.edu.cn/simple执行上述命令在我的环境中报错,这是因为我的基础环境中g++版本过低,两种方案:1、升级系统g++版本;2、conda 环境安装高版本g++。我选的是方案2:,命令如下:
conda install gxx_linux-64=11.2.0执行成功截图如下:
后续再安装insightface库执行成功截图如下:
测试库调用成功截图如下:
案例测试
测试insightface库的简单代码如下:
import cv2 import numpy as np from insightface.app import FaceAnalysis import os # 初始化人脸识别模型 app = FaceAnalysis(name="buffalo_l",providers=['CUDAExecutionProvider', 'CPUExecutionProvider']) print("----------------111------------------") app.prepare(ctx_id=0, det_size=(640, 640)) def load_and_detect_face(image_path): if not os.path.exists(image_path): print(f"错误: 找不到图像: {image_path}") return None, None image = cv2.imread(image_path) if image is None: print(f"错误: 无法读取图像: {image_path}") return None, None faces = app.get(image) if len(faces) == 0: print(f"未能在图像中检测到人脸: {image_path}") return None, None else: return image, faces[0].embedding def compare_faces(embedding1, embedding2): if embedding1 is None or embedding2 is None: return None cosine_similarity = np.dot(embedding1, embedding2) / (np.linalg.norm(embedding1) * np.linalg.norm(embedding2)) return cosine_similarity if __name__ == "__main__": # 替换为你的图片路径 image1_path = r'./pic/bao1.png' # 第一个人的图像路径 image2_path = r'./pic/bao2.png' # 第二个人的图像路径 # 加载并检测第一张图像 image1, embedding1 = load_and_detect_face(image1_path) # 加载并检测第二张图像 image2, embedding2 = load_and_detect_face(image2_path) # 比较两张人脸 similarity = compare_faces(embedding1, embedding2) if similarity is not None: print(f"两张人脸的相似度: {similarity:.4f}") # 设置阈值以判断是否为同一人 threshold = 0.5 # 根据需要调整阈值 if similarity > threshold: print("这两张人脸是同一个人。") else: print("这两张人脸不是同一个人。")执行截图如下:
由于第一次执行会下载模型,因此相对较慢。上述代码案例用的两张识别图片如下:
![]()
上述两张图片用face_recognition库识别时出错(出错的原因是第一张图没发现有人脸),但用insightface库检测通过。通过多次比对测试,笔者觉得insightface库人脸识别能力比较准确。









1万+



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



