face_recognition

GitHub
56.3k 13.7k 较难 1 次阅读 今天MIT开发框架图像
AI 解读 由 AI 自动生成,仅供参考

face_recognition 是一款专为 Python 和命令行设计的开源人脸识别库,被誉为全球最易用的人脸识别工具。它基于 dlib 构建,采用先进的深度学习模型,在权威基准测试中准确率高达 99.38%,能轻松解决图像中人脸的检测、定位与身份识别难题。

无论是开发者还是研究人员,都能利用它快速实现多种功能:不仅能精准找出图片中的所有人脸位置,还能提取眼睛、鼻子、嘴巴等关键面部特征点,甚至支持实时视频流的人脸识别。除了严肃的技术应用,它也常被用于开发数字化妆等趣味项目。

该工具特别适合需要快速集成人脸功能的软件工程师、进行算法验证的研究人员,以及希望尝试计算机视觉应用的编程爱好者。虽然官方主要支持 macOS 和 Linux 系统,但其简洁的 API 设计让上手门槛极低,只需几行代码即可完成复杂的人脸分析任务。对于希望在项目中添加“刷脸”功能,或探索人工智能视觉技术的用户来说,face_recognition 是一个高效且可靠的选择。

使用场景

某社区安保团队需要升级老旧的门禁系统,希望实现基于人脸的自动身份核验以替代传统刷卡方式。

没有 face_recognition 时

  • 开发团队需从零研究复杂的深度学习模型,耗时数周才能搭建出基础的人脸检测框架,项目启动极其缓慢。
  • 面对光照变化或侧脸角度,自研算法的识别率低下,频繁出现陌生人误入或业主被拦在门外的尴尬情况。
  • 若要获取眼睛、嘴巴等具体面部特征点以实现活体检测,需要引入额外的重型库并编写大量底层代码进行坐标计算。
  • 系统难以在普通的 Linux 服务器上流畅运行,对硬件算力要求极高,导致整体部署成本大幅超出预算。

使用 face_recognition 后

  • 借助其封装好的简洁 API,开发人员仅用几行 Python 代码即可在一天内完成人脸检测与比对功能的原型开发。
  • 依托 dlib 的高精度模型,系统在复杂光线和不同角度下的识别准确率高达 99.38%,显著提升了门禁通行的安全性与体验。
  • 直接调用 face_landmarks 函数即可轻松获取眼部和唇部轮廓坐标,快速集成了眨眼活体检测功能,有效防止照片攻击。
  • 优化的算法结构使得系统能在常规配置的 Linux 服务器上高效运行,甚至支持实时视频流处理,极大降低了硬件投入。

face_recognition 将原本高门槛的计算机视觉技术转化为简单的几行代码,让中小团队也能低成本构建高精度的智能安防应用。

运行环境要求

操作系统
  • macOS
  • Linux
GPU
  • 非必需
  • 若使用 CNN 模型进行高精度人脸检测或批量处理,则需要 NVIDIA GPU 并需在编译 dlib 时启用 CUDA 支持
  • 具体型号、显存及 CUDA 版本未在文档中明确说明
内存

未说明

依赖
notesWindows 系统非官方支持(可能需手动安装);在 Nvidia Jetson Nano 上安装时需特别注意修复 CUDA 库的已知 Bug(需注释 dlib 代码并重新编译);树莓派和 FreeBSD 有特定安装指南;命令行工具支持多核 CPU 并行加速处理。
python3.3+ 或 2.7
dlib
cmake
face_recognition hero image

快速开始

人脸识别

您也可以阅读该文件的中文简体版 简体中文版、韩语版 韩国语 或日语版 日本語

使用世界上最简单的人脸识别库,从 Python 或命令行中识别和操作人脸。

该库基于 dlib 的先进深度学习人脸识别模型构建。该模型在 Labeled Faces in the Wild 基准测试上的准确率为 99.38%。

此外,它还提供了一个简单的 face_recognition 命令行工具,允许您通过命令行对一个文件夹中的图像进行人脸识别!

PyPI 构建状态 文档状态

功能

在图片中查找人脸

查找图片中出现的所有人脸:

import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)

查找并操作图片中的面部特征

获取每个人的眼睛、鼻子、嘴巴和下巴的位置及轮廓。

import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)

查找面部特征对于许多重要任务非常有用。但您也可以用它来做一些很有趣的事情,比如应用 数字化妆(类似于“美图秀秀”):

识别图片中的面孔

识别每张照片中出现的人。

import face_recognition
known_image = face_recognition.load_image_file("biden.jpg")
unknown_image = face_recognition.load_image_file("unknown.jpg")

biden_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

results = face_recognition.compare_faces([biden_encoding], unknown_encoding)

您甚至可以将此库与其他 Python 库结合使用,实现实时人脸识别:

代码请参见 此示例

在线演示

用户贡献的共享 Jupyter Notebook 演示(非官方支持):Deepnote

安装

要求

  • Python 3.3+ 或 Python 2.7
  • macOS 或 Linux(Windows 非官方支持,但可能可用)

安装选项:

在 Mac 或 Linux 上安装

首先,请确保已安装带有 Python 绑定的 dlib:

然后,确保已安装 cmake:

brew install cmake

最后,使用 pip3(或 Python 2 的 pip2)从 PyPI 安装本模块:

pip3 install face_recognition

或者,您也可以尝试使用 Docker 来运行本库,详情请参阅 部署部分

如果您在安装过程中遇到困难,还可以尝试使用一个 预配置的虚拟机

在 Nvidia Jetson Nano 开发板上安装

  • Jetson Nano 安装说明
    • 请仔细按照文章中的说明操作。目前 Jetson Nano 上的 CUDA 库存在一个 bug,如果您没有按照文章中的指示注释掉 dlib 中的一行代码并重新编译,本库可能会静默失败。

在 Raspberry Pi 2+ 上安装

在 FreeBSD 上安装

pkg install graphics/py-face_recognition

在 Windows 上安装

虽然 Windows 并非官方支持的平台,但热心的用户已经发布了安装本库的指南:

安装预配置的虚拟机镜像

使用方法

命令行界面

安装 face_recognition 后,您将获得两个简单的命令行工具:

  • face_recognition - 识别照片或包含照片的文件夹中的面孔。
  • face_detection - 在照片或包含照片的文件夹中查找面孔。

face_recognition 命令行工具

face_recognition 命令允许您识别照片或包含照片的文件夹中的面孔。

首先,您需要提供一个文件夹,其中包含每位已知人物的一张照片。每个文件应对应一位人物,并以照片中的人物命名:

known

接下来,您需要另一个文件夹,其中包含您想要识别的照片:

unknown

然后,只需运行 face_recognition 命令,传入已知人物的文件夹以及包含未知人物的照片文件夹(或单张照片),它就会告诉您每张照片中的人是谁:

$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,巴拉克·奥巴马
/face_recognition_test/unknown_pictures/unknown.jpg,未知人

输出中每一行对应一张人脸。数据以逗号分隔,包含文件名和识别出的人名。

如果图片中出现与已知人物库中任何人都不匹配的人脸,则会被标记为 unknown_person

face_detection 命令行工具

face_detection 命令允许您找到图像中任何面孔的位置(像素坐标)。

只需运行 face_detection 命令,传入要检查的图片文件夹(或单张图片):

$ face_detection  ./folder_with_pictures/

examples/image1.jpg,65,215,169,112
examples/image2.jpg,62,394,211,244
examples/image2.jpg,95,941,244,792

它会为检测到的每张人脸打印一行,报告的是人脸的上、右、下、左四个角的像素坐标。

调整容差/灵敏度

如果您对同一个人得到多个匹配结果,可能是因为您的照片中的人物非常相似,此时需要降低容差值,使面部比较更加严格。

可以通过 --tolerance 参数来实现。默认容差值为 0.6,数值越小,面部比较就越严格:

$ face_recognition --tolerance 0.54 ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,巴拉克·奥巴马
/face_recognition_test/unknown_pictures/unknown.jpg,未知人

如果您想查看每次匹配计算出的面部距离,以便调整容差设置,可以使用 --show-distance true

$ face_recognition --show-distance true ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,巴拉克·奥巴马,0.378542298956785
/face_recognition_test/unknown_pictures/unknown.jpg,未知人,None
更多示例

如果您只想知道每张照片中的人物姓名,而不在乎文件名,可以这样做:

$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | cut -d ',' -f2

巴拉克·奥巴马
未知人
加快人脸识别速度

如果您的计算机有多核 CPU,人脸识别可以并行进行。例如,如果您的系统有 4 个 CPU 核心,那么通过同时利用所有核心,您可以在相同时间内处理大约 4 倍数量的图像。

如果您使用的是 Python 3.4 或更高版本,可以传递 --cpus <使用的CPU核心数> 参数:

$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/

您也可以传递 --cpus -1 来使用系统中的所有 CPU 核心。

Python 模块

您可以导入 face_recognition 模块,只需几行代码即可轻松操作人脸。非常简单!

API 文档:https://face-recognition.readthedocs.io

自动查找图像中的所有面孔
import face_recognition

image = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image)

# face_locations 现在是一个数组,列出了每张人脸的坐标!

请参阅 此示例,尝试一下。

您还可以选择使用更精确的基于深度学习的人脸检测模型。

注意:为了使该模型获得良好的性能,需要 GPU 加速(通过 NVidia 的 CUDA 库)。编译 dlib 时也需要启用 CUDA 支持。

import face_recognition

image = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image, model="cnn")

# face_locations 现在是一个数组,列出了每张人脸的坐标!

请参阅 此示例,尝试一下。

如果您有大量的图像并且配备了 GPU,还可以 批量查找人脸

自动定位图像中人物的面部特征
import face_recognition

image = face_recognition.load_image_file("my_picture.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)

# face_landmarks_list 现在是一个数组,包含了每张人脸中各个面部特征的位置。
# face_landmarks_list[0]['left_eye'] 就是第一个人左眼的位置和轮廓。

请参阅 此示例,尝试一下。

识别图像中的面孔并确定其身份
import face_recognition

picture_of_me = face_recognition.load_image_file("me.jpg")
my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]

# my_face_encoding 现在包含了我的面部特征的通用编码,可以与任何其他人脸照片进行比较!

unknown_picture = face_recognition.load_image_file("unknown.jpg")
unknown_face_encoding = face_recognition.face_encodings(unknown_picture)[0]

# 现在我们可以用 `compare_faces` 来判断这两张脸是否属于同一个人!

results = face_recognition.compare_faces([my_face_encoding], unknown_face_encoding)

if results[0] == True:
    print("这是一张我的照片!")
else:
    print("这不是我的照片!")

请参阅 此示例,尝试一下。

Python 代码示例

所有示例均可在此处获取:https://github.com/ageitgey/face_recognition/tree/master/examples

人脸检测

面部特征

人脸识别

创建独立可执行文件

如果您希望创建一个无需安装 pythonface_recognition 即可运行的独立可执行文件,可以使用 PyInstaller。不过,要使其与本库兼容,需要进行一些自定义配置。有关具体操作方法,请参阅 此问题

涉及 face_recognition 的文章和指南

人脸识别的工作原理

如果您不想依赖黑盒库,而是想了解人脸定位和识别的具体工作原理,请阅读我的文章:现代深度学习人脸识别

注意事项

  • 本库的人脸识别模型是在成人数据集上训练的,对儿童的效果并不理想。在默认的 0.6 比较阈值下,儿童的识别结果容易混淆。
  • 不同种族群体之间的识别准确率可能存在差异。更多详细信息请参阅 此维基页面

部署到云主机(Heroku、AWS 等)

由于 face_recognition 依赖于用 C++ 编写的 dlib,因此将其应用部署到 Heroku 或 AWS 等云托管平台可能会比较困难。

为了简化部署流程,本仓库提供了一个 Dockerfile 示例,展示了如何在 Docker 容器中运行基于 face_recognition 构建的应用程序。借助此方法,您应该能够将应用部署到任何支持 Docker 镜像的服务上。

您可以在本地尝试运行该 Docker 镜像:docker-compose up --build

此外,还有 若干预构建的 Docker 镜像可供使用。

对于安装了 ≥ 384.81 版本显卡驱动程序以及 Nvidia-Docker 的 Linux 用户,可以在 GPU 上运行示例:打开 docker-compose.yml 文件,取消注释 dockerfile: Dockerfile.gpuruntime: nvidia 两行。

遇到问题?

如果您遇到问题,请在提交 GitHub 问题之前先阅读维基中的 常见错误 部分。

致谢

  • 衷心感谢 Davis King (@nulhom) 创造了 dlib,并提供了本库中使用的经过训练的面部特征检测和人脸编码模型。有关驱动人脸编码的 ResNet 模型的更多信息,请参阅他的 博客文章
  • 感谢所有致力于 numpy、scipy、scikit-image、Pillow 等优秀 Python 数据科学库的开发者,正是这些库让 Python 中的这类任务变得如此简单有趣。
  • 感谢 Cookiecutter 以及 audreyr/cookiecutter-pypackage 项目模板,它们极大地简化了 Python 项目的打包过程。

版本历史

v1.2.22018/04/02
v0.1.122017/04/13

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|2周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

160.4k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

109.2k|★★☆☆☆|昨天
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架