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

关于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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——栈(详细分析)

目录 🍉引言 🍉栈的本质和特点 🍈栈的基本操作 🍈栈的特点 🍍后进先出 🍍操作受限 🍍动态调整 🍈栈的优缺点 🍍优点 🍍缺点 🍉栈的应用…

STM32F407VET6 学习笔记4:DAC数模转换功能的配置

今日继续学习使用嘉立创的 立创梁山派天空星,芯片是 STM32F407VET6 使用库函数编程 最近突然发现很久没有接触过单片机的AD转换功能了,之前还是学习51单片机时学习驱动PCF8591芯片实现AD转换功能的,还从未在STM32平台上进行过相关的实验经验…

解决go install 网络问题

rootiZbp1hiqzlhh6w05gloffgZ:~# go install mvdan.cc/garblelatest go: mvdan.cc/garblelatest: module mvdan.cc/garble: Get "https://proxy.golang.org/mvdan.cc/garble/v/list": dial tcp 172.217.160.81:443: i/o timeout解决方法 更换阿里代理 rootiZbp1hiq…

保障餐饮场所安全:定期送检可燃气体报警器

在餐饮行业,火灾隐患一直备受关注。餐厅、茶饮店等场所常常使用燃气设备,而这些设备带来了潜在的安全隐患。 为了及时发现并预防可燃气体泄漏,可燃气体报警器的定期送检显得尤为重要。那么,为什么可燃气体报警器需要定期送检呢&a…

python中的线程并行

文章目录 1. 单线程2. 线程池ThreadPoolExecutor 1. 单线程 现在有1154张图片需要顺时针旋转后保存到本地,一般使用循环1154次处理,具体代码如下所示,img_paths中存储1154个图片路径,该代码段耗时约用97ms。 t1time.time() for …

【再探】设计模式—代理模式

代理是指授权代理人在一定范围内代表其向第三方进行处理有关事务。 1 代理模式 需求:1)将业务代码与非业务代码分离,在不改变代码结构的基础上,为其添加新的功能。2)为系统中的某些操作做同一处理,例如进…

Dilworth 定理

这是一个关于偏序集的定理,事实上它也可以扩展到图论,dp等中,是一个很有意思的东西 偏序集 偏序集是由集合 S S S以及其上的一个偏序关系 R R R定义的,记为 ( S , R ) (S,R) (S,R) 偏序关系: 对于一个二元关系 R ⊂…

Python筑基之旅-MySQL数据库(四)

目录 一、数据表操作 1、新增记录 1-1、用mysql-connector-python库 1-2、用PyMySQL库 1-3、用PeeWee库 1-4、用SQLAlchemy库 2、删除记录 2-1、用mysql-connector-python库 2-2、用PyMySQL库 2-3、用PeeWee库 2-4、用SQLAlchemy库 3、修改记录 3-1、用mysql-conn…

力扣HOT100 - 21. 合并两个有序链表

解题思路&#xff1a; class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode dum new ListNode(0), cur dum;while (list1 ! null && list2 ! null) {if (list1.val < list2.val) {cur.next list1;list1 list1.next;} els…

力扣刷题---3146. 两个字符串的排列差

题目描述 给你两个字符串 s 和 t&#xff0c;每个字符串中的字符都不重复&#xff0c;且 t 是 s 的一个排列。 排列差 定义为 s 和 t 中每个字符在两个字符串中位置的绝对差值之和。 返回 s 和 t 之间的 排列差 。 示例 1&#xff1a; 输入&#xff1a;s “abc”, t “b…

四万字长文详解——node.js使用移动云,EOS对象存储

目录 前言 安装及安装前的操作 前置条件 如何创建认证信息 使用npm安装SDK开发包 安装开发包命令 初始化操作 存储桶 查看结果命令 查看桶列表 查看结果命令 删除桶 查看结果命令 创建桶 获取桶列表 判断桶是否存在 查询桶所属地域 查询桶的访问权限 管理桶的…

基于springboot+vue+Mysql的校园台球厅人员与设备管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

【C语言】冒泡排序详解

前言 排序&#xff0c;就是将一组数据按特定的规则调换位置&#xff0c;使这组数据具有某种顺序关系&#xff0c;一般就是递增或递减。 在接触C语言不久&#xff0c;我们就会遇到其中一种有名的排序算法——“冒泡排序”&#xff0c;不知道你是否已经掌握了&#xff0c;如果还…

2024最新 Jenkins + Docker 实战教程(五)- 配置Gitee Webhooks实现自动构建部署

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

等保建设:打造MySQL数据库审计系统

1、建设目标 在等级保护三级->应用安全->安全审计中强制需要有审计平台(满足对操作系统、数据库、网络设备的审计&#xff0c;在条件不允许的情况下&#xff0c;至少要使用数据库审计) 数据库审计服务符合等级保护三级标准&#xff0c;帮助您满足合规性要求&#xff0c;…

什么是组态?什么是工业控制中的组态软件?

随着工业4.0和智能制造的发展&#xff0c;工控软件的应用越来越广泛&#xff0c;它们在提高生产效率、降低能耗和减少人力成本等方面发挥着越来越重要的作用。 什么是工控软件&#xff1f; 工控软件是指用于工业控制系统的软件&#xff0c;主要应用于各种生产过程控制、自动化…

Java中流的概念细分

按流的方向分类&#xff1a; 输入流&#xff1a;数据流向是数据源到程序&#xff08;以InputStream、Reader结尾的流&#xff09;。 输出流&#xff1a;数据流向是程序到目的地&#xff08;以OutputStream、Writer结尾的流&#xff09;。 按处理的数据单元分类&#xff1a; 字…

在winnas中使用docker desktop遇到的问题及解决方法记录

最近在尝试从群晖转向winnas&#xff0c;一些简单的服务依然计划使用docker来部署。群晖的docker简单易用且稳定&#xff0c;在win上使用docker desktop过程中遇到了不少问题&#xff0c;在此记录一下以供后来人参考。 一、安装docker desktop后启动时遇到无法启动docker引擎 …

构建数字未来:探索Web3在物联网中的新视角

引言 随着Web3时代的来临&#xff0c;物联网技术正迎来一场新的变革。在这个数字化时代&#xff0c;Web3所带来的技术创新将为物联网的发展开辟新的视角。本文将深入探讨Web3在物联网领域的应用&#xff0c;揭示其在构建数字未来中的重要性和影响。 Web3与物联网的融合 区块链…

运用HTML、CSS设计Web网页——“西式甜品网”图例及代码

目录 一、效果展示图 二、设计分析 1.整体效果分析 2.头部header模块效果分析 3.导航及banner模块效果分析 4.分类classify模块效果分析 5.产品展示show模块效果分析 6.版权banquan模块效果分析 三、HTML、CSS代码分模块展示 1. 头部header模块代码 2.导航及bann…