Windows系统安装dlib及face_recognition搭建人脸识别环境

news2025/1/13 13:49:16

关于face_recognition

face_recognition被称为世界上最简洁的人脸识别库,借助face_recognition库,我们可以使用Python和命令行提取、识别、操作人脸。

face_recognition的人脸识别是基于业内领先的C++开源库 dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,有高达99.38%的准确率。但对小孩和亚洲人脸的识别准确率尚待提升。

PyPI地址:face-recognition · PyPI

github仓库地址:

ageitgey/face_recognition: The world's simplest facial recognition api for Python and the command line (github.com)

相关包安装

(1)包安装前置需求

  1. 用于编译dlib的VC++编译器,参考资料2推荐Microsoft Visual Studio 2015及以上版本的VC编译器。
  2. Python3开发环境。
  3. Windows版CMake,并将路径添加到环境变量。
  4. 1.63或更新版本的Boost库(用于旧版本的dlib,新版本的不需要),按照参考1,可以使用MSVC的预编译版本,但不推荐这样做。

(2)简易安装

pip install dlib

pip install face_recognition

(3)纯手动安装

按照参考资料1,可以按一下步骤手工安装:

1)下载并安装scipy和numpy+mkl(必须是mkl版本)包。

2)下载适配当前电脑MSVC版本的boost库源代码和二进制文件(下载链接)。

3)如果下载的是boost库的二进制文件,请直接跳到步骤4)。否则:

首先,解压Boost的源代码文件到本地目录,例如C:\local\boost_1_XX_X(X表示下载的Boost版本);

然后,创建如下参数的环境变量(以VC14为例):

变量名:VS140COMNTOOLS

变量值:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\(或者是本地MSVC的路径)

最后,打开Visual Studio命令行窗口并进入Boost的解压目录,尝试使用如下命令编译Boost:

bootstrap
b2 -a --with-python address-model=64 toolset=msvc runtime-link=static

4)如果已编译Boost,请跳过这一步,否则,把下载到的Boost二进制文件解压至本地特定目录,如C:\local\boost_1_XX_X。

5)从仓库中获取并解压最新版的dlib。

6)进入dlib目录,打开命令行终端按如下步骤生成dlib(XX表示dlib版本号,实际操作时替换为具体的版本号):

set BOOST_ROOT=C:\local\boost_X_XX_X
set BOOST_LIBRARYDIR=C:\local\boost_X_XX_X\stage\lib
python setup.py install --yes USE_AVX_INSTRUCTIONS or python setup.py install --yes USE_AVX_INSTRUCTIONS --yes DLIB_USE_CUDA

7)到此,已经可以在Python脚本中导入dlib了:import dlib。

8)我们可以通过pip show dlib命令检查安装到Python环境里的dlib版本。

9)安装face_recognition

pip install face_recognition

10)完成,可以用来开发了。

应用示例

(1)主要API

方法

说明

返回值

face_recognition.api.batch_face_locations(images, number_of_times_to_upsample=1, batch_size=128)

批量定位人脸位置

返回包含人脸位置的元组列表,人脸位置按css(上、右、下、左)顺序排列。

face_recognition.api.compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)

将特定的人脸编码和一个已知人脸编码列表进行对比

返回一个True/False值列表,用以表示哪些已知的人脸和特定的人脸匹配。

face_recognition.api.face_distance(face_encodings, face_to_compare)

人脸距离(欧几里得距离)

numpy ndarray,包含要对比的人脸和人脸数组中每个元素的距离。

face_recognition.api.face_encodings(face_image, known_face_locations=None, num_jitters=1, model='small')

人脸编码

128维度人脸编码列表。

face_recognition.api.face_landmarks(face_image, face_locations=None, model='large')

给出一张照片中每个人脸的特征部位(包括眼、鼻等)

人脸特征位置字典列表。

face_recognition.api.face_locations(img, number_of_times_to_upsample=1, model='hog')

查找人脸位置,返回图片中人脸的边界框数组

包含边界框信息的元组列表

face_recognition.api.load_image_file(file, mode='RGB')

加载图片到 .jpg, .png等)numpy数组

numpy array

参考文档:

face_recognition package — Face Recognition 1.4.0 documentation (face-recognition.readthedocs.io)

(2)应用举例

import face_recognition

# 加载并编码个人照片
picture_of_the_man = face_recognition.load_image_file('obama.jpg')
the_man_face_encoding = face_recognition.face_encodings(picture_of_the_man)[0]

# 判断这个人是否在集体照中
picture_of_many_people = face_recognition.load_image_file('barack_obama_family.jpg')
people_encoding_list = face_recognition.face_encodings(picture_of_many_people)

# 人脸比对
result = face_recognition.compare_faces(people_encoding_list, the_man_face_encoding)
contains_this_man = False
for item in result:
    contains_this_man = item
    if contains_this_man == True:
        break

if contains_this_man:
    print('照片里有这个人')
else:
    print('照片里没有这个人')

以上程序能在奥巴马一家合照中认出奥巴马。

注:程序识别过程有点慢,按照参考资料1的说法,face_recognition库在Windows上的性能仅有Ubuntu上的1/4,这一点有待验证。

参考资料

  1. Windows Installation Guide · Issue #175 · ageitgey/face_recognition (github.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1691428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Centos 7.9 使用 iso 搭建本地 YUM 源

Centos 7.9 使用 iso 搭建本地 YUM 源 1 建立挂载点 [rootlocalhost ~]# mkdir -p /media/cdrom/ 2 创建光盘存储路径 [rootlocalhost ~]# mkdir -p /mnt/cdrom/ 3 上传 CentOS-7-x86_64-Everything-2207-02.iso 到 光盘存储路径 [rootlocalhost ~]# ls /mnt/cdrom/ CentOS-…

基于SSM的“酒店管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“酒店管理系统”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 首页 管理员登录页面 用户管理页面 客房信息查询 酒店详细信息 后台…

Java学习路线思维导图

目录 Java学习流程1.学习大纲2.Java开发中常用的DOS命令 Java入门学习思维导图 Java学习流程 通过大纲了解学习的重点,通过目录依次深入【注:Java环境的搭建百度,提升自己百度的能力】 1.学习大纲 学习流程如下: Java基础语法 …

【Python】用于发送电子邮件的标准库smtplib和构建邮件主体、添加附件、设置收件人的email

欢迎来到《小5讲堂》 这是《Python》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 插件介绍邮件代码扩展知识点文章推荐 插件介绍 smtplib 是 Pytho…

内存函数详解与模拟实现

目录 1.memcpy函数 1.1memmcpy函数的模拟使用 2.memmove函数 2.1memmove 函数的模拟使用 3.memcmp 3.1memcmp函数的模拟实现 4.memset (内存设置) 4.1memset函数的模拟实现 1.memcpy函数 void* memcpy(void* destination, const void* source, size_t num);//之所以是v…

工业4.0 企业级云MES全套源码,支持app、小程序、H5、台后管理端

工业4.0 企业级云MES全套源码,支持app、小程序、H5、台后管理端 采用javaspringboot-vue.jsuniapp开发 随着工业4.0的快速发展,制造执行系统(MES)成为了智能制造的核心。今天,将为大家介绍一款开源的MES系统——MES管…

一个基于HOOK机制的微信机器人

一个基于✨HOOK机制的微信机器人,支持🌱安全新闻定时推送【FreeBuf,先知,安全客,奇安信攻防社区】,👯Kfc文案,⚡备案查询,⚡手机号归属地查询,⚡WHOIS信息查询…

家政保洁服务小程序怎么做?家政公司快速搭建专属小程序

在数字化时代背景下,家政保洁服务行业也迎来了线上转型的新机遇。家政保洁服务小程序,作为一种新型的线上服务平台,不仅能够提升家政公司的服务效率,还能为顾客提供更加便捷的预约上门服务体验。那么家政保洁服务小程序怎么做呢&a…

java智慧工厂制造生产管理MES系统saas模式Java+ idea+ uniapp全套MES系统源码,多端展示

java智慧工厂制造生产管理MES系统saas模式Java idea uniapp全套MES系统源码,多端展示 MES 系统源码(生产制造执行系统)能够帮助企业实现全生产过程的可视化,数据分析智能化、构建高效智能工厂,MES系统通过控制指令、人…

工作学习的电脑定时关机,定时重启,定时提醒

可以直接下载工具: 定时自动关机 大家好,! 在我们学习与工作时,经常会遇到想要在完成一个任务后,再关闭电脑或对电脑重启,但这个时间点,操作电脑的人可能不能在电脑旁边,这样就需要…

Docker快速部署Seata的TC服务以及微服务引入Seata教程

目录 一、使用docker部署Seata的TC服务 1、拉取TC服务镜像 2、创建并运行容器 ​3、修改配置文件 4、在Nacos中添加TC服务的配置 5、重启TC服务 二、微服务集成Seata 1、引入依赖 2、修改配置文件 Seata是阿里的一个开源的分布式事务解决方案,能够为分布…

2024年5月计算机视觉论文推荐:包括扩散模型、视觉语言模型、图像编辑和生成、视频处理和生成以及图像识别等各个主题

我们今天总结下2024年5月发表的最重要的论文,重点介绍了计算机视觉领域的最新研究和进展,包括扩散模型、视觉语言模型、图像编辑和生成、视频处理和生成以及图像识别等各个主题。 Diffusion Models 1、Dual3D: Efficient and Consistent Text-to-3D Ge…

mysql中text,longtext,mediumtext区别

文章目录 一.概览二、字节限制不同三、I/O 不同四、行迁移不同 一.概览 在 MySQL 中,text、mediumtext 和 longtext 都是用来存储大量文本数据的数据类型。 TEXT:TEXT 数据类型可以用来存储最大长度为 65,535(2^16-1)个字符的文本数据。如果存储的数据…

SwiftUI中的手势(MagnificationGesture、 RotationGesture)

通过前两篇文章的探索,手势的基本使用规则已经较深的了解,本篇文章主要看看放缩手势MagnificationGesture和旋转手势RotationGesture。 MagnificationGesture 放缩手势 放缩手势在App中用的也比较广泛,下面先看一个示例效果: 上…

Mybatis Cache(二)MybatisCache+Redis

前面提到了,使用mybatis cache,一般是结合redis使用。 一、demo 1、数据表 create table demo.t_address (id int auto_incrementprimary key,address_name varchar(200) null,address_code varchar(20) null,address_type int n…

鸿蒙系统与OpenHarmony:中国科技行业的新动力与就业前景

背景 经历近年来的迅猛发展,鸿蒙原生应用数量已突破4000款,生态设备数量超过8亿台,开发者群体壮大至220万人。更为显著的是,鸿蒙系统在中国市场的份额已经超过了15%,稳居第三大操作系统,其生态之树已然枝繁…

牛客NC236 最大差值【simple 动态规划 Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204 思路 不难看出该题可以使用动态规划的方式解题。 在循环数组的过程中,记录截止到当前位置-1的最小值, 然后用当前的值去计算最大的差值。Java代码 im…

【软件设计师】下午题总结-数据流图、数据库、统一建模语言

下午题总结 1 试题一1.1 结构化语言 2 试题二弱实体增加权限增加实体间联系和联系的类型 3 试题三3.1 UML关系例子 3.2 例子(2016上半年)3.3 设计类分类3.3.1 接口类3.3.2 控制类3.3.3 实体类 3.4 简答题3.4.1 简要说明选择候选类的原则3.4.2 某个类必须…

【NOIP2014普及组复赛】题4:子矩阵

题3:子矩阵 【题目描述】 给出如下定义: 1.子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵。 例如,下面左图中选取第 2 、 4 2、4 2、…

结构安全预警?事前发现?人工观测VS自动化监测,谁更胜一筹?

人工检测是依靠目测检查或借助于便携式仪器测量得到的信息,但是随着整个行业的发展,传统的人工检测方法已经不能满足检测需求,从人工检测到自动化监测已是必然趋势。 a. 从检测方式看 人工检测需要耗费大量的精力,从摆放检测工具到…