Python学习--使用dlib、opencv进行人脸检测标注
参考自https://www.pyimagesearch.com/2017/04/03/facial-landmarks-dlib-opencv-python/
在原有基础上有一部分的修改(image改为可选参数,若不填则为拍照后选取),如果有想深入学习的,可以去关注这位‘吴克’先生的文章。
本文不涉及关于人脸检测的训练部分(虽然之后随着学习深入我会再发相关的随笔),只是简单的用轮子。
今天我们来使用dlib和opencv进行人脸的检测标注
首先安装opencv和dlib的方法
pip install dlib
pip install opencv-python
本程序中还使用了imutils用于resize图片,安装方法如下
pip install imutils
dlib中为我们提供了关于人脸检测标注训练好的文件 可在http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2下载(如果在参考网页下载到的例程中也包含了这个文件了)
训练好的文件可识别人脸的68个关键点并标注(关键点越少肯定越容易导致识别错误)
本程序运行方法:若.py和shape_predictor_68_face_landmarks.dat以及需要检测的图片在同一目录下,在当前目录console中输入
python my_facial_landmarks.py -p shape_predictor_68_face_landmarks.dat -i guanhai.jpg
或采用拍照识别的方式,输入
python my_facial_landmarks.py -p shape_predictor_68_face_landmarks.dat
在图片框中按q完成拍照
之后会显示标注后的照片
例如输入如下图片
运行截图
拍照然后识别就不举例了吧,大家可以自行尝试
代码如下my_facial_landmarks.py
from imutils import face_utils
import argparse
import imutils
import dlib
import cv2 def takephoto():
cap = cv2.VideoCapture(0)
while (1):
# get a frame
ret, frame = cap.read()
# show a frame
cv2.imshow("capture", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):#按q键完成照相
# cv2.imwrite("./test0.jpg", frame) 保存照片,但在这里我们并不需要
return frame#返回图片
cap.release()
cv2.destroyAllWindows() def main():
# construct the argument parser and parse the arguments 使用argparse设置输入所需的实参
ap = argparse.ArgumentParser()
ap.add_argument("-p", "--shape-predictor", required=True, #训练好的关于检测的文件
help="path to facial landmark predictor")
ap.add_argument("-i", "--image", required=False,default='0', #图片
help="path to input image")
args = vars(ap.parse_args()) # initialize dlib's face detector (HOG-based) and then create
# the facial landmark predictor
#初始化dlib人脸检测(基于HOG),然后创建面部标志预测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(args["shape_predictor"]) # load the input image, resize it, and convert it to grayscale
if args['image'] != '0':
image = cv2.imread(args['image'])#输入图片实参则读入图片
else:
image = takephoto()#若未输入则进行照相操作 image = imutils.resize(image, width=500) # 调整图片宽度为500
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#图片调整为灰色 # detect faces in the grayscale image 检测灰度图像中的面部
rects = detector(gray, 1) # loop over the face detections 循环进行人脸的检测
for (i, rect) in enumerate(rects):
# determine the facial landmarks for the face region, then
# convert the facial landmark (x, y)-coordinates to a NumPy
# array
# 确定面部区域的面部标志,然后将面部标志(x,y)坐标转换成NumPy阵列
shape = predictor(gray, rect)
shape = face_utils.shape_to_np(shape) # convert dlib's rectangle to a OpenCV-style bounding box
# [i.e., (x, y, w, h)], then draw the face bounding box
#将dlib矩形转换为OpenCV样式的边界框[即(x,y,w,h)],然后绘制边界框
(x, y, w, h) = face_utils.rect_to_bb(rect)
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2) # show the face number 人脸序号的标记(可识别多张)
cv2.putText(image, "Face #{}".format(i + 1), (x - 10, y - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) # loop over the (x, y)-coordinates for the facial landmarks
# and draw them on the image
#循环找到面部地关键点的(x,y)坐标并在图像上绘制它们
for (x, y) in shape:
cv2.circle(image, (x, y), 1, (0, 0, 255), -1) # show the output image with the face detections + facial landmarks
#用脸部检测+面部标志显示输出图像
cv2.imshow("Output", image)
cv2.waitKey(0) if __name__ == '__main__':
main()
Python学习--使用dlib、opencv进行人脸检测标注的更多相关文章
- Python 3 利用 Dlib 实现摄像头人脸检测特征点标定
0. 引言 利用 Python 开发,借助 Dlib 库捕获摄像头中的人脸,进行实时人脸 68 个特征点标定: 支持多张人脸: 有截图功能: 图 1 工程效果示例( gif ) 图 2 工程效果示例( ...
- OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现
# OpenCV学习系列(一) Mac下OpenCV + xcode人脸检测实现 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-环 ...
- HAAR与DLib的实时人脸检测之实现与对比
人脸检测方法有许多,比如opencv自带的人脸Haar特征分类器和dlib人脸检测方法等. 对于opencv的人脸检测方法,优点是简单,快速:存在的问题是人脸检测效果不好.正面/垂直/光线较好的人脸, ...
- OpenCV实现人脸检测
OpenCV实现人脸检测(转载) 原文链接:https://www.cnblogs.com/mengdd/archive/2012/08/01/2619043.html 本文介绍最基本的用OpenC ...
- 【转载】opencv实现人脸检测
全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...
- OpenCV-Python(1)在Python中使用OpenCV进行人脸检测
OpenCV是如今最流行的计算机视觉库,而我们今天就是要学习如何安装使用OpenCV,以及如何去访问我们的摄像头.然后我们一起来看看写一个人脸检测程序是如何地简单,简单到只需要几行代码. 在开始之前, ...
- 基于OpenCv的人脸检测、识别系统学习制作笔记之一
基于OpenCv从视频文件到摄像头的人脸检测 在OpenCv中读取视频文件和读取摄像头的的视频流然后在放在一个窗口中显示结果其实是类似的一个实现过程. 先创建一个指向CvCapture结构的指针 Cv ...
- python中使用Opencv进行人脸检测
这两天学习了人脸识别,看了学长写的代码,边看边码边理解搞完了一边,再又是自己靠着理解和记忆硬码了一边,感觉还是很生疏,就只能来写个随笔加深一下印象了. 关于人脸识别,首先需要了解的是级联分类器Casc ...
- OpenCV&Qt学习之四——OpenCV 实现人脸检测与相关知识整理
开发配置 OpenCV的例程中已经带有了人脸检测的例程,位置在:OpenCV\samples\facedetect.cpp文件,OpenCV的安装与这个例子的测试可以参考我之前的博文Linux 下编译 ...
随机推荐
- PE 001~010
题意: 001(Multiples of 3 and 5):对小于1000的被3或5整除的数字求和. 002(Even Fibonacci numbers):斐波那契数列中小于等于4 000 000的 ...
- NowCoder牛客练习赛7-A.骰子的游戏 B.购物-优先队列
A.骰⼦的游戏 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 在Alice和Bob面前的是两个骰 ...
- 2017ecjtu-summer training #3 POJ3264
...
- MYSQL数据库增量备份
MySQL数据库增量备份,在这之前修改我们的数据库配置文件/etc/my.cnf开启bin-log日志功能即可.接下来是我参考了下网上的一些方法,自己写的,主要还是要能学到他的一些思路和方法. #fu ...
- ThinkPHP基础知识
1.入口文件中定义的内容 // 检测PHP环境if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 ! ...
- ubuntu下使用nginx搭建流媒体服务器,实现视频点播
首先我们看如何实现视频点播,视频点播支持flv文件及H264编码视频,ACC编码音频的mp4文件: 第一步,创建单独的目录(因为软件较多,容易混乱),下载需要的软件: 我们需要下载nginx,pcre ...
- springcloud干活之服务消费者(feign)
springcloud系列文章的第三篇 本章将继续讲述springcloud的消费者(feign) Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端. ...
- java如何获取一个对象的大小
When---什么时候需要知道对象的内存大小 在内存足够用的情况下我们是不需要考虑java中一个对象所占内存大小的.但当一个系统的内存有限,或者某块程序代码允许使用的内存大小有限制,又或者设计一个缓存 ...
- NopCommerce用core重写ef
最近看了NopCommerce源码,用core学习着写了一个项目,修改的地方记录下.项目地址 NopCommerce框架出来好久了.18年的第一季度 懒加载出来后也会全部移动到.net core.那么 ...
- Linux初学者必知的5个学习网站
分享几个Linux初学者一定要知道的5个学习网站 工具/原料 有一颗学习Linux的心 电脑 方法/步骤 1 推荐一:鸟哥的Linux私房菜(http://vbird.dic.ksu.edu.tw/) ...