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

face_recognition :一个 “开箱即用” 的人脸识别工具

face_recognition 是一个基于 Python 的开源人脸识别库,它封装了底层的计算机视觉算法(依赖 dlib 库),提供了简单易用的 API,让开发者可以快速实现人脸检测、识别、特征提取等功能。其核心优势是准确率高(基于深度学习模型)、接口简洁(几行代码即可实现核心功能),非常适合初学者和快速开发场景。

一、核心功能

face_recognition 主要提供四大核心功能:

  1. 人脸检测:定位图片中人脸的位置(返回边界框坐标)。
  2. 人脸特征提取:将人脸转换为 128 维的特征向量(“人脸编码”),用于后续比较。
  3. 人脸识别:通过比较两个人脸的特征向量,判断是否为同一个人。
  4. 人脸关键点检测:定位人脸的关键部位(如眼睛、鼻子、嘴巴等)的坐标。

二、安装步骤

face_recognition 依赖 dlib 库(一个强大的机器学习库),因此安装时需要先确保 dlib 能正常安装。

1. 安装依赖
  • Windows 系统

    • 先安装 CMake(用于编译 dlib),并添加到系统环境变量。
    • 安装 Visual Studio(需勾选 “C++ 桌面开发” 组件,提供编译工具)。
  • macOS 系统

    • 通过 Homebrew 安装依赖:brew install cmake dlib
  • Linux 系统

    • 通过 apt 安装依赖:sudo apt-get install cmake libboost-all-dev
2. 安装 face_recognition

依赖安装完成后,通过 pip 安装:

bash

pip install face_recognition

三、核心 API 详解

下面通过代码示例讲解核心功能的使用。

1. 人脸检测(定位人脸位置)

使用 face_locations() 函数,返回图片中所有人脸的边界框坐标(top, right, bottom, left,即上、右、下、左的像素坐标)。

示例代码

python

运行

import face_recognition
from PIL import Image, ImageDraw# 加载图片(支持 jpg、png 等格式)
image = face_recognition.load_image_file("people.jpg")# 检测人脸位置(默认使用 HOG 模型,适合 CPU;可选 "cnn" 模型,更准确但速度慢)
face_locations = face_recognition.face_locations(image, model="hog")print(f"检测到 {len(face_locations)} 张人脸")# 用 PIL 绘制边界框
pil_image = Image.fromarray(image)
draw = ImageDraw.Draw(pil_image)for (top, right, bottom, left) in face_locations:# 绘制矩形框(红色,线宽 2)draw.rectangle(((left, top), (right, bottom)), outline=(255, 0, 0), width=2)# 保存结果
pil_image.save("detected_people.jpg")

说明

  • model="hog":基于方向梯度直方图的模型,速度快,适合 CPU。
  • model="cnn":基于卷积神经网络的模型,准确率更高,适合 GPU 加速(需 dlib 支持 CUDA)。
2. 人脸特征提取(生成 “人脸编码”)

使用 face_encodings() 函数,将人脸转换为 128 维的特征向量(“编码”)。同一个人的不同照片,编码会非常相似;不同人的编码差异较大。

示例代码

python

运行

import face_recognition# 加载已知人脸图片(如“张三”的照片)
known_image = face_recognition.load_image_file("zhangsan.jpg")
# 提取特征编码(返回列表,取第一个元素)
zhangsan_encoding = face_recognition.face_encodings(known_image)[0]print("张三的人脸编码(前 10 维):", zhangsan_encoding[:10])

说明

  • 128 维向量的每个维度代表人脸的一个特征(如眼睛距离、鼻梁角度等),通过向量距离(如欧氏距离)可衡量人脸相似度。
3. 人脸识别(比较人脸是否为同一人)

通过 compare_faces() 或 face_distance() 比较编码:

  • compare_faces(known_encodings, unknown_encoding, tolerance=0.6):返回布尔值列表,True 表示匹配(默认阈值 0.6,值越小越严格)。
  • face_distance(known_encodings, unknown_encoding):返回未知编码与每个已知编码的欧氏距离,距离越小越相似。

示例代码

python

运行

import face_recognition# 1. 准备已知人脸编码
zhangsan_image = face_recognition.load_image_file("zhangsan.jpg")
zhangsan_encoding = face_recognition.face_encodings(zhangsan_image)[0]lisi_image = face_recognition.load_image_file("lisi.jpg")
lisi_encoding = face_recognition.face_encodings(lisi_image)[0]known_encodings = [zhangsan_encoding, lisi_encoding]
known_names = ["张三", "李四"]# 2. 加载待识别图片
unknown_image = face_recognition.load_image_file("unknown.jpg")
unknown_encodings = face_recognition.face_encodings(unknown_image)# 3. 逐个比对
for unknown_encoding in unknown_encodings:# 比较与已知编码的匹配度matches = face_recognition.compare_faces(known_encodings, unknown_encoding)# 计算距离(越小越相似)distances = face_recognition.face_distance(known_encodings, unknown_encoding)# 找到最匹配的人脸best_match_index = distances.argmin()if matches[best_match_index]:name = known_names[best_match_index]print(f"识别结果:{name}(距离:{distances[best_match_index]:.2f})")else:print("未匹配到已知人脸")
4. 人脸关键点检测

使用 face_landmarks() 函数,返回人脸关键部位(如眼睛、眉毛、鼻子等)的坐标列表。

示例代码

python

运行

import face_recognition
from PIL import Image, ImageDrawimage = face_recognition.load_image_file("person.jpg")
# 获取关键点(眼睛、鼻子、嘴巴等)
face_landmarks_list = face_recognition.face_landmarks(image)pil_image = Image.fromarray(image)
draw = ImageDraw.Draw(pil_image)for face_landmarks in face_landmarks_list:# 绘制所有关键点(如眼睛、眉毛)for feature_name, points in face_landmarks.items():# 每个特征用不同颜色绘制color = (0, 255, 0) if feature_name in ["left_eye", "right_eye"] else (0, 0, 255)draw.point(points, fill=color)pil_image.save("landmarks.jpg")

说明:返回的关键点包含 12 个部分:chin(下巴)、left_eyebrow(左眉)、right_eyebrow(右眉)、nose_bridge(鼻梁)、nose_tip(鼻尖)、left_eye(左眼)、right_eye(右眼)、top_lip(上唇)、bottom_lip(下唇)等。

四、性能优化与注意事项

  1. 速度优化

    • 优先使用 model="hog" 进行快速检测,cnn 模型适合高精度场景(需 GPU 支持)。
    • 处理视频或批量图片时,可缩小图片尺寸(如缩放到 1/4 大小)再检测,减少计算量。
  2. 准确率影响因素

    • 图片质量:模糊、光照过强 / 过暗、侧脸等可能降低准确率。
    • 阈值调整:tolerance=0.6 是默认值,严格场景可降低(如 0.5),宽松场景可提高(如 0.7)。
  3. 依赖问题

    • 若 dlib 安装失败,可尝试安装预编译版本(如 Windows 下 pip install dlib-19.22.99-cp39-cp39-win_amd64.whl,需匹配 Python 版本)。

五、应用场景

  • 身份验证(如人脸解锁、打卡系统)。
  • 照片分类(自动按人脸整理相册)。
  • 监控系统(实时识别可疑人员)。
  • 社交应用(自动标记好友)。

总结

face_recognition 是一个 “开箱即用” 的人脸识别工具,通过简单的 API 封装了复杂的深度学习逻辑,非常适合快速开发。但需注意其依赖安装和性能限制,在实时或大规模场景中可能需要结合 GPU 加速或更专业的框架(如 TensorFlow/PyTorch)优化。

http://www.dtcms.com/a/512982.html

相关文章:

  • 赣州培训学做网站自己做电影下载网站
  • 如何建立自己的企业网站无锡网站建设套餐
  • 天水做网站的如何选择镇江网站优化
  • 网站开发时遇到的问题php建网站
  • 网站怎么做运营推广公司装修合同模板
  • 数据结构八大排序:堆排序-从二叉树到堆排序实现
  • 四川建设厅的网站线上推广招聘
  • 网站设计贵不贵常州网站建设方案策划
  • STM32 USART框图简介
  • UVa 11020 Efficient Solutions
  • [go 面试] 接口测试的方法与技巧
  • 公司做网站价格新媒体运营师证书
  • Python爬虫第8课:代理池与反反爬虫技术
  • 做网站有视频教吗营销推广型网站价格
  • 济南网站建设优化公司域名备案网站购买
  • 关于 DeepSeek-OCR 的猜想
  • Rademacher复杂度:衡量机器学习模型复杂度的利器
  • 西矿文旅:以自然之道开启研学新篇,为文旅产业注入“芯”动力
  • 攻防世界—easyupload
  • 合肥网站公司企业营销策划方案
  • 地方网站发展方向抖音代运营 深圳
  • 怎么做网站推广和宣传济南网站建设首选传承网络
  • 项目开发手册-项目结构
  • 数据库原理实验报告:数据库查询操作实现
  • 学习网站开发流程wordpress采集附件
  • 网站开发招标参数三亚市建设局网站公示
  • 网站后台iis配置立陶宛与俄罗斯最新消息
  • 【AI】AI评测入门(五):Evaluation 跑起来
  • GSFE层错能计算(DFT)
  • 数据结构——二十八、图的基本操作(王道408)