insightface实现多人脸识别
时间: 2024-12-26 09:25:04 浏览: 18
### 使用 InsightFace 实现多人脸识别
#### 安装依赖项
为了使用 InsightFace 进行人脸识别,首先需要安装必要的 Python 库。可以通过 pip 来完成这些库的安装:
```bash
pip install insightface onnxruntime opencv-python numpy
```
#### 加载模型
加载预训练的人脸检测和人脸识别模型是实现多个人脸识别的关键部分之一[^1]。
```python
import insightface
from insightface.app import FaceAnalysis
app = FaceAnalysis(providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))
```
#### 图像读取与显示
通过 OpenCV 可以方便地读取图片文件,并将其转换为适合处理的形式。
```python
import cv2
img_path = "path_to_your_image.jpg"
image = cv2.imread(img_path)
if image is None:
raise ValueError("Image not found or unable to load.")
```
#### 执行人脸检测与特征提取
调用 `get` 方法来执行图像中所有人脸的检测以及相应的属性分析工作。
```python
faces = app.get(image)
for i, face in enumerate(faces):
print(f"Detected face {i}:")
print(f" Bounding box: {face.bbox}")
print(f" Landmarks shape: {face.kps.shape}")
print(f" Detection score: {face.det_score:.4f}")
# 提取面部嵌入向量 (embedding vector),用于后续的身份验证或其他用途
embedding_vector = face.normed_embedding
```
#### 绘制边界框及标签
最后一步是在原始图象中标记出每一张被发现的脸孔的位置及其相关信息。
```python
def draw_faces(image, faces):
for idx, face in enumerate(faces):
bbox = list(map(int, face.bbox)) # 将浮点数坐标转成整型
color = (0, 255, 0) # 设置矩形颜色为绿色RGB(0,255,0)
thickness = 2 # 边界线宽度设为两个像素宽
start_point = tuple(bbox[:2]) # 左上角起点(x,y)
end_point = tuple([bbox[2], bbox[3]]) # 右下终点(x+w,y+h)
cv2.rectangle(image, start_point, end_point, color, thickness)
font_scale = 0.8
text_color = (255, 255, 255)
position = (start_point[0]+10, start_point[1]-10)
cv2.putText(image, f'ID:{idx}', position ,cv2.FONT_HERSHEY_SIMPLEX,
font_scale,text_color,thickness,cv2.LINE_AA)
draw_faces(image.copy(), faces)
cv2.imshow('Multi-Face Recognition Result', image)
cv2.waitKey(0); cv2.destroyAllWindows()
```
上述代码展示了如何利用 InsightFace 库来进行多人脸检测、特征抽取,并最终可视化结果的过程。对于更复杂的应用场景,则可能还需要进一步开发匹配逻辑或是与其他服务对接等功能模块[^2]。
阅读全文