人脸检测? 对Python来说太简单, 调用dlib包就可以完成

“Dlib 是一个现代化的 C ++ 工具包,包含用于创建复杂软件的机器学习算法和工具 ” 。它使您能够直接在 Python 中运行许多任务,其中一个例子就是人脸检测。
安装 dlib 并不像只做一个 “pip install dlib” 那么简单,因为要正确配置和编译 dlib ,您首先需要安装其他系统依赖项。如果你按照这里描述的步骤,它应该很容易让 dlib 启动并运行。(在本文中,我将介绍如何在 Mac 上安装 dlib ,但如果您使用的是 Ubuntu ,请务必查看相关资源部分的链接。)
你需要确定的第一件事是你已经安装和更新了 Hombrew 。如果您需要安装它,请将其粘贴到终端中:
1. $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
或者,如果您需要更新 Hombrew ,请输入以下内容:
1. $ brew update
您现在可以使用 Homebrew 来安装 CMake , Boost.Python ,以及在您的系统中正确配置和编译 dlib 所需的两个依赖关系:
1. $ brew install cmake
2. $ brew install boost-python
最后,您需要手动下载并安装 XQuartz 。
您现在已准备好安装 dlib 。我们将通过首先为这个项目创建一个孤立的虚拟环境来做到这一点。我将使用 virtualenv ,但您可以使用任何您熟悉的虚拟环境工具,包括 Python 的 venv 模块。需要 scikit-image 库才能读取我们稍后将传递给 dlib 的图像文件,因此我们还需要 pip 安装它:
1. $ virtualenv venv_dlib
2. $ source venv_dlib / bin / activate
3. $ pip install scikit-image
4. $ pip install dlib
就是这样。有了这个,你应该有可用的 dlib 。
Dlib
Dlib 提供了不同的脸部检测算法。我将在这里使用的是基于 CNN 的人脸检测器。您可以下载预训练模型: https : //github.com/davisking/dlib-models 。由于使用此模型的计算成本很高,因此最好在 GPU 上执行以下代码。使用 CPU 也可以,但速度会更慢。
要在下面的要点中运行人脸检测代码,我建议首先在虚拟环境中再安装两个库。这些库将使与代码交互和可视化结果更容易:
1. $ pip install matplotlib
2. $ pip install jupyterlab
安装完库后,您需要确保:
· 下载预训练模型( http://dlib.net/files/mmod_human_face_detector.dat.bz2 )并将其存储在项目的根目录中
· 创建一个名为 'faces' 的新目录,在该目录中存储带有希望检测的脸部的 .jpg 。
有了这个,你终于准备好开始在图片中检测脸部了!您可以通过在 Jupyter Notebook 中运行以下代码来完成此操作
1. import dlib
2. import matplotlib.patches as patches
3. import matplotlib.pyplot as plt
4. from pathlib import Path
5. from skimage import io
6. %matplotlib inline
7. # Load trained model
8. cnn_face_detector = dlib.cnn_face_detection_model_v1(
9. 'mmod_human_face_detector.dat' )
10. # Function to detect and show faces in images
11. def detect_face_dlib(img_path, ax):
12. # Read image and run algorithm
13. img = io.imread(img_path)
14. dets = cnn_face_detector(img, 1)
15. # If there were faces detected, show them
16. if len(dets) > 0:
17. for d in dets:
18. rect = patches.Rectangle(
19. (d.rect. left (), d.rect. top ()),
20. d.rect.width(),
21. d.rect.height(),
22. fill= False ,
23. color= 'b' ,
24. lw= '2' )
25. ax.add_patch(rect)
26. ax.imshow(img)
27. ax.set_title(str(img_path).split( '/' )[-1])
28. # Path to images
29. images = list(Path( 'faces' ).glob( '*.jpg' ))
30. # Show results
31. fig = plt.figure(figsize=(15, 5))
32. for i, img in enumerate(images):
33. ax = fig.add_subplot(1, len(images), i+1)
34. detect_face_dlib(img, ax)
结果
在运行代码之后,您应该看到图像中的脸部周围出现蓝色方块,如果您问我,考虑到我们只写了几行代码,这非常棒!
python学习交流群:125240963
原文链接:http://www.linuxmysql.com/23/2018/829.htm?utm_source=tuicool&utm_medium=referral
人脸检测? 对Python来说太简单, 调用dlib包就可以完成的更多相关文章
- (转载)Python 的 JPype 模块调用 Jar 包
Python 的 JPype 模块调用 Jar 包 背景与需求 最近学习并安装使用了HttpRunner框架去尝试做接口测试,并有后续在公司推广的打算. HttpRunner由Python开发,调用接 ...
- Python 的 JPype 模块调用 Jar 包
背景与需求 最近学习并安装使用了HttpRunner框架去尝试做接口测试,并有后续在公司推广的打算. HttpRunner由Python开发,调用接口时需要依赖Python:而大多数公司的扩展工具包使 ...
- python学习 —— python3简单使用pymysql包操作数据库
python3只支持pymysql(cpython >= 2.6 or >= 3.3,mysql >= 4.1),python2支持mysqldb. 两个例子: import pym ...
- OpenCV-Python(1)在Python中使用OpenCV进行人脸检测
OpenCV是如今最流行的计算机视觉库,而我们今天就是要学习如何安装使用OpenCV,以及如何去访问我们的摄像头.然后我们一起来看看写一个人脸检测程序是如何地简单,简单到只需要几行代码. 在开始之前, ...
- HAAR与DLib的实时人脸检测之实现与对比
人脸检测方法有许多,比如opencv自带的人脸Haar特征分类器和dlib人脸检测方法等. 对于opencv的人脸检测方法,优点是简单,快速:存在的问题是人脸检测效果不好.正面/垂直/光线较好的人脸, ...
- Java版人脸检测详解上篇:运行环境的Docker镜像(CentOS+JDK+OpenCV)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- Python使用OpenCV实现简单的人脸检测
文章目录: OpenCV安装 安装numpy 安装opencv OpenCV使用 OpenCV测试 效果图: 注意: 图片人脸检测 程序要求: 技术实现思路 注意 本文使用的环境是:Windows+P ...
- 调用opencv的接口实现人脸检测(简单)
import cv2 import matplotlib.pyplot as plt %matplotlib inline # 提取预训练的人脸检测模型,提前下载好的模型 face_cascade = ...
- 人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型
人脸检测及识别python实现系列(5)——利用keras库训练人脸识别模型 经过前面稍显罗嗦的准备工作,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的te ...
随机推荐
- oracle ebs应用产品安全性-数据访问权限集
定义 数据访问权限集是一个重要的.必须设定的系统配置文件选项.对具有相同科目表.日历和期间类型的分类帐及其所有平衡段值或管理段值的定义读写权限,系统管理员将其分配至不同的责任以控制不同的责任对分类帐数 ...
- 9.4、Libgdx简单字符输入
(官网:www.libgdx.cn) 如果应用需要输入一个字符,比如用户名和密码,可以通过简单的对话框实现. 在桌面中使用一个Swing对话框,提示用户输入字符. 在Android中将会打开一个标准的 ...
- Ext JS 5初探(二) ——Bootstrap.js
在Bootstrap.js文件中,总共有1500行(包含注释和空行),使用编辑器的代码折叠功能就如下图可以一窥全貌了. 从代码可以看到,这里主要定义了Ext.Boot.Ext.globalEval.E ...
- VS2008中开发手持终端程序(PDA软件)总结
VS2008中开发手持终端程序(PDA手机软件)的项目总结 1程序结构 程序中包括四个部分: 1.系统配置 这个部分用来配置系统中的相关参数,参数包括数据库信息和串口的配置信息.这部分的主要技术是XM ...
- 本教程针对HBuilder5.0.0,制作日期2014-12-31(从HBuilder工具上获得)
/*注:本教程针对HBuilder5.0.0,制作日期2014-12-31*/创建HTML结构: h 8 (敲h激活代码块列表,按8选择第8个项目,即HTML代码块,或者敲h t Enter)中 ...
- 【linux学习笔记】在ubuntu下使用QT Cmake支持C++11
今天在ubuntu下使用QT来进行C++编程,选择了Cmake,当用到initializer_list的时候提示不支持C++11,现提供一下解决方案: 错误提示: error: This file r ...
- 并发服务器--02(基于I/O复用——运用Select函数)
I/O模型 Unix/Linux下有5中可用的I/O模型: 阻塞式I/O 非阻塞式I/O I/O复用(select.poll.epoll和pselect) 信号驱动式I/O(SIGIO) 异步I/O( ...
- Linux进程管理(第二版) --进程管理命令
进程管理命令 一.查看用户信息.5.15 分钟内的系统的,优先值越小,优先权越大 ] 1.nice 指定程序运行的优先级 格式 nice -n command 例如 nice -5 myprogrem ...
- 网站开发进阶(十)如何将一个html页面嵌套在另一个页面中
如何将一个html页面嵌套在另一个页面中 1.IFrame引入 <IFRAME NAME="content_frame" width=100% height=30 margi ...
- iOS9 系统分享调用(UIActivityViewController)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/49615109 ...