当前位置: 首页 > news >正文

免费开源人脸识别系统,支持RESTful API

简介

CompreFace 是一个免费开源的人脸识别项目,您不需要具备机器学习技能就能安装设置和使用 CompreFace,官方提供了基于 docker 的部署方法,可以方便地部署在本地或者云端服务器上。

CompreFace 提供了 RESTful API,用于人脸识别、人脸验证、人脸检测、人脸关键点 landmark 检测、mask 检测、头部姿势检测、年龄和性别识别。除此之外,还具有一个角色管理系统,可让您轻松控制谁可以访问您的人脸识别服务。

CompreFace 同时支持 CPUGPU,非常易于扩展,人脸算法基于 FaceNetInsightFace 等。

安装

CompreFace 提供了基于 docker 的部署方法,我们首先去安装 docker,这里以 linux 平台为例

sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc# 加入apt源
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 更新源  
sudo apt-get update# 安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

接下来安装 CompreFace

wget -q -O tmp.zip 'https://github.com/exadel-inc/CompreFace/releases/download/v1.2.0/CompreFace_1.2.0.zip' && unzip tmp.zip && rm tmp.zip
docker-compose up -d

7cf7fe43c72e71d34fd364b2c360e895.jpeg

CompreFace

如果需要关闭或者启动服务,可以执行下面的命令

# 关闭
docker-compose stop# 启动
docker-compose start

使用

服务启动后,就可以在浏览器中访问 http://$ip:8000/login,这里的 ip 是运行 CompreFace 机器的 ip 地址

d2362b630198248c776e7f576bdf9ab4.jpeg

CompreFace

先点击 Try Demo 来体验一下

51cbc1d5b7f23343b3cb5cadf4d2a60a.jpeg

CompreFace

拖入测试图片,可以看到图片中的人脸被框出来了

eeca7564ae04ec7454e9181bea50975a.jpeg

CompreFace

下方的 RequestResponsecurl 请求的命令格式及服务端响应的 JSON 数据。

fff9a3ec2ca35edb21659d24fde34af2.jpeg

CompreFace

这就意味着,当你在 Terminal 中使用下面请求时,同样能够获得 JSON 数据,客户端请求

curl -X POST "http://172.25.10.115:8000/api/v1/recognition/recognize?face_plugins=landmarks, gender, age, pose" \
-H "Content-Type: multipart/form-data" \
-H "x-api-key: 00000000-0000-0000-0000-000000000002" \
-F "file=@rs_600x600-200826161208-1200-prison-break-then-and-now-wentworth-miller-Dominic-Purcell-mp.jpeg"

得到的 Response 类似这样

{"result": [ {"age": {"probability": 1,"high": 32,"low": 25},"gender": {"probability": 0.9998852014541626,"value": "male"},"pose": {"pitch": 10.347200724641283,"roll": 8.087814409337398,"yaw": 25.8938720074166},"box": {"probability": 0.99999,"x_max": 1110,"y_max": 643,"x_min": 611,"y_min": 67},"subjects": [ {"subject": "Jared Leto","similarity": 0.70706} ],"landmarks": [ [ 742,313 ],[ 888,305 ],[ 776,412 ],[ 753,500 ],[ 871,495 ] ]},{"age": {"probability": 0.999687910079956,"high": 32,"low": 25},"gender": {"probability": 1,"value": "male"},"pose": {"pitch": 6.629633741562486,"roll": -4.344288845360126,"yaw": -14.0751115802405},"box": {"probability": 0.99997,"x_max": 551,"y_max": 611,"x_min": 135,"y_min": 121},"subjects": [ {"subject": "Regina King","similarity": 0.43778} ],"landmarks": [ [ 305,331 ],[ 438,333 ],[ 391,420 ],[ 322,487 ],[ 423,487 ] ]} ]
}

下面去注册账号,可以体验完整的功能。首先创建应用 Create Application

ee8bfd282723aefe5fdb9319b43afc5b.jpeg

CompreFace

给应用取个名字

1c5d260004a16250b8bbf9c54029f854.jpeg

CompreFace

然后添加个服务,目前系统自带了3个服务,即 RECOGNITION (识别出是谁?)、DETECTION (检测出脸)、VERIFICATION (在一张图中验证该人脸是否出现?)。

d6c9245b68139a560e34e11498b1a391.jpeg

CompreFace

那我们就增加个人脸识别的服务

4a25801df39f361dbb8334c6c71292cb.jpeg

CompreFace

服务增添好后,可以看看几个重要的信息,NameAPI keyType

fc320c086b3b9722772bdd4327980c09.jpeg

CompreFace

接下来,添加图片数据库

6847efc4fb555842e212e76825d7926f.jpeg

CompreFace

填写 Subject Name 即人名

0d6f662321ecf9caa38a18e8deb421d0.jpeg

CompreFace

导入对应人名的图像,要求是单人图片

bdd918c9a146cf565f43d284c2612e97.jpeg

CompreFace

回到 Test 进行检测,导入测试图片,鼠标移动到人脸框位置,会出现相关人脸信息,显示人名、相似度、性别和大概的年龄。

5f0cacab12162b44b1fc08c330e77c6a.jpeg

CompreFace

49fa9386e8996304962c58e242633fa3.jpeg

CompreFace

Request 可以看到 curl 命令行中跟的 x-api-key 参数是我们创建 service 时生成的 API key

curl -X POST "http://172.25.10.115:8000/api/v1/recognition/recognize?face_plugins=landmarks, gender, age, pose" \
-H "Content-Type: multipart/form-data" \
-H "x-api-key: c2fcdce5-8c35-42c8-96c6-8c4b9d5acc7f" \
-F "file=@rs_600x600-200826161208-1200-prison-break-then-and-now-wentworth-miller-Dominic-Purcell-mp.jpeg"

点击左侧下方的两个图标,还可显示出人脸的 landmarkpose

c35e4702623fffe0dbf883c926f74e2a.jpeg

CompreFace

接下来再体验一下人脸验证的功能,新增服务 VERIFICATION

222608384417fd75ed9f17a6de15d82c.jpeg

CompreFace

导入2张图片测试,左侧是单人图片也就是要在右侧图片中寻找左侧图片中的人脸,结果会显示相似度、性别和大概年龄。

40a8002eabdab9f7b76014fc5a9bc760.jpeg

CompreFace

参考资料

  • https://github.com/exadel-inc/CompreFace

相关文章:

  • 【Unity】常用的全局类
  • 02-结构型设计模式(共7种)
  • 油猴脚本使用cookie一般是某请求返回的setcookie,一般不是js生成的,直接请求拼接
  • C# 基础之字典——Dictionary(一)
  • QVariant用法(AI ChaptGPT)
  • 【设计模式深度剖析】【4】【创建型】【建造者模式】| 类比选购汽车的过程,加深理解
  • ubuntu设置root开机登录,允许root用户ssh远程登录
  • 大模型落地竞逐,云计算大厂“百舸争流”
  • 【MySQL精通之路】InnoDB(7)-锁和事务模型(2)-事务模型
  • MQTT 异常断开(一)
  • 网络模型-Qinq配置与应用
  • 每日5题Day5 - LeetCode 21 - 25
  • jiebaNET中文分词器
  • 水平垂直居中的六种方法
  • 添加webpack.config.js配置
  • 【前端学习】-粗谈选择器
  • 10个确保微服务与容器安全的最佳实践
  • flutter的key在widget list的作用以及必要性
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript 一些 DOM 的知识点
  • Java小白进阶笔记(3)-初级面向对象
  • JDK 6和JDK 7中的substring()方法
  • Joomla 2.x, 3.x useful code cheatsheet
  • JSONP原理
  • Laravel 菜鸟晋级之路
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Next.js之基础概念(二)
  • SAP云平台里Global Account和Sub Account的关系
  • uni-app项目数字滚动
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 阿里研究院入选中国企业智库系统影响力榜
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 浮现式设计
  • 工作手记之html2canvas使用概述
  • 基于Android乐音识别(2)
  • 简单易用的leetcode开发测试工具(npm)
  • 聊聊hikari连接池的leakDetectionThreshold
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 新版博客前端前瞻
  • Hibernate主键生成策略及选择
  • ​第20课 在Android Native开发中加入新的C++类
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​渐进式Web应用PWA的未来
  • ![CDATA[ ]] 是什么东东
  • # 飞书APP集成平台-数字化落地
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (30)数组元素和与数字和的绝对差
  • (39)STM32——FLASH闪存
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (ZT)一个美国文科博士的YardLife
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (一)基于IDEA的JAVA基础12
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据