face_recognition
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
- 非必需
- 若使用 CNN 模型进行高精度人脸检测或批量处理,则需要 NVIDIA GPU 并需在编译 dlib 时启用 CUDA 支持
- 具体型号、显存及 CUDA 版本未在文档中明确说明
未说明

快速开始
人脸识别
您也可以阅读该文件的中文简体版 简体中文版、韩语版 韩国语 或日语版 日本語。
使用世界上最简单的人脸识别库,从 Python 或命令行中识别和操作人脸。
该库基于 dlib 的先进深度学习人脸识别模型构建。该模型在 Labeled Faces in the Wild 基准测试上的准确率为 99.38%。
此外,它还提供了一个简单的 face_recognition 命令行工具,允许您通过命令行对一个文件夹中的图像进行人脸识别!
功能
在图片中查找人脸
查找图片中出现的所有人脸:

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 演示(非官方支持):
安装
要求
- 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 并非官方支持的平台,但热心的用户已经发布了安装本库的指南:
安装预配置的虚拟机镜像
- 下载预配置的虚拟机镜像(适用于 VMware Player 或 VirtualBox)。
使用方法
命令行界面
安装 face_recognition 后,您将获得两个简单的命令行工具:
face_recognition- 识别照片或包含照片的文件夹中的面孔。face_detection- 在照片或包含照片的文件夹中查找面孔。
face_recognition 命令行工具
face_recognition 命令允许您识别照片或包含照片的文件夹中的面孔。
首先,您需要提供一个文件夹,其中包含每位已知人物的一张照片。每个文件应对应一位人物,并以照片中的人物命名:

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

然后,只需运行 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。
人脸检测
面部特征
人脸识别
- 根据已知人员的照片,在照片中查找并识别未知面孔
- 识别照片中每个人的面孔并为其绘制矩形框
- 通过数值化的人脸距离来比较人脸,而不仅仅是简单的“是”或“否”匹配
- 使用网络摄像头识别实时视频中的人脸——简单版/较慢版本(需安装 OpenCV)
- 使用网络摄像头识别实时视频中的人脸——更快版本(需安装 OpenCV)
- 识别视频文件中的人脸,并输出新的视频文件(需安装 OpenCV)
- 在树莓派上使用摄像头进行人脸识别
- 运行一个通过 HTTP 识别人脸的 Web 服务(需安装 Flask)
- 使用 K 近邻分类器进行人脸识别
- 为每个人训练多张图片,然后使用 SVM 进行人脸识别
创建独立可执行文件
如果您希望创建一个无需安装 python 或 face_recognition 即可运行的独立可执行文件,可以使用 PyInstaller。不过,要使其与本库兼容,需要进行一些自定义配置。有关具体操作方法,请参阅 此问题。
涉及 face_recognition 的文章和指南
- 我关于人脸识别工作原理的文章:现代深度学习人脸识别
- 介绍了相关算法及其基本工作原理
- Adrian Rosebrock 的文章:使用 OpenCV、Python 和深度学习进行人脸识别
- 讲述了如何在实际中使用人脸识别技术
- Adrian Rosebrock 的文章:树莓派人脸识别
- 介绍了如何在树莓派上使用该技术
- Adrian Rosebrock 的文章:使用 Python 进行人脸聚类
- 介绍了如何利用无监督学习自动根据照片中出现的人物对照片进行聚类
人脸识别的工作原理
如果您不想依赖黑盒库,而是想了解人脸定位和识别的具体工作原理,请阅读我的文章:现代深度学习人脸识别。
注意事项
- 本库的人脸识别模型是在成人数据集上训练的,对儿童的效果并不理想。在默认的 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.gpu 和 runtime: nvidia 两行。
遇到问题?
如果您遇到问题,请在提交 GitHub 问题之前先阅读维基中的 常见错误 部分。
致谢
- 衷心感谢 Davis King (@nulhom) 创造了 dlib,并提供了本库中使用的经过训练的面部特征检测和人脸编码模型。有关驱动人脸编码的 ResNet 模型的更多信息,请参阅他的 博客文章。
- 感谢所有致力于 numpy、scipy、scikit-image、Pillow 等优秀 Python 数据科学库的开发者,正是这些库让 Python 中的这类任务变得如此简单有趣。
- 感谢 Cookiecutter 以及 audreyr/cookiecutter-pypackage 项目模板,它们极大地简化了 Python 项目的打包过程。
版本历史
v1.2.22018/04/02v0.1.122017/04/13常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
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 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
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 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器
