本文最后更新于 2025-03-11,文章超过7天没更新,应该是已完结了~

CompreFace 是一个强大的开源人脸识别系统,提供了灵活的 API 接口和多种人脸识别功能。你可以在 GitHub 上找到项目源码:
GitHub 地址https://github.com/exadel-inc/CompreFace


在 Linux 环境下部署

1. 安装必要环境

  • 确保已安装 DockerDocker Compose

2. 下载 CompreFace

3. 解压存档

  • 解压下载的文件,进入解压后的文件夹。

4. 启动服务

  • 在文件夹中打开终端,运行以下命令启动服务:

docker-compose up -d

5. 访问服务


在 Windows 环境下部署

部署流程与 Linux 基本相同,唯一的区别是需要通过 cmd 进入解压后的文件夹,然后运行以下命令启动服务:

docker-compose up -d

配置人脸识别功能

1. 创建应用

进入管理界面后,点击 “创建应用”,填写应用名称完成创建。

2. 创建功能

进入应用后,点击 “创建功能”,可以选择以下功能之一:

  • 人脸检测(Detection)

  • 人脸识别(Recognition)

  • 人脸验证(Verification)

这里我们选择 人脸识别(Recognition) 功能。

3. 配置人员库

(1)添加主题
填写主题名称,创建一个人员分类。

(2)上传人脸照片
点击虚线框区域,选择包含人脸照片的文件夹上传。

  • 支持批量上传图片。

  • 可通过 bulk select 批量删除已上传图片。

4. 测试功能

  • 点击左侧菜单的 “Test”,上传一张测试图片。

  • 系统会自动识别照片中的人脸,给出所属分类及相似度结果。

  • 此外,CompreFace 还可以识别性别和年龄信息。


应用场景

CompreFace 的人脸识别功能可以应用于多个场景,例如:

  1. 判断某人是否属于特定组织。

  2. 验证某人是否为指定身份。


如何调用摄像头结合接口?

调用流程

通过 Python 结合 OpenCV 和 CompreFace 的 API,可以实现实时摄像头人脸识别。具体步骤如下:

  1. 安装依赖:

pip install opencv-python requests
  1. 使用代码进行调用:

  • 捕获摄像头每一帧画面并截图。

  • 使用 requests 模块将截图发送到 CompreFace 的 API 接口进行识别。

以下是示例代码:

import cv2
import requests

# CompreFace API的URL和认证信息
COMPREFACE_API_URL = "http://192.168.1.59:8000/api/v1/recognition/recognize?face_plugins=landmarks,gender,age,pose"
API_KEY = "5d8abd38-fbe8-46a8-b158-xxxxxxxxxx"

# 启动摄像头捕获
cap = cv2.VideoCapture(0)  # 0代表笔记本的内建摄像头

if not cap.isOpened():
    print("无法打开摄像头")
    exit()

while True:
    # 捕获视频流中的一帧图像
    ret, frame = cap.read()
    if not ret:
        print("无法从摄像头获取图像")
        break

    # 显示当前捕获的图像
    cv2.imshow('Video Stream', frame)

    # 将图像保存为临时文件
    image_path = 'temp_image.jpg'
    cv2.imwrite(image_path, frame)

    # 准备上传文件
    with open(image_path, 'rb') as img_file:
        files = {'file': img_file}
        headers = {'x-api-key': API_KEY}

        # 发送POST请求到CompreFace API进行人脸识别
        response = requests.post(COMPREFACE_API_URL, headers=headers, files=files)

        if response.status_code == 200:
            result = response.json()
            print("识别到人脸:", result)
        else:
            print(f"请求失败,状态码: {response.status_code}")
            print("错误信息:", response.text)

    # 按 'q' 键退出监控
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头并关闭所有OpenCV窗口
cap.release()
cv2.destroyAllWindows()

效果如下: