pythonopencv人脸相似度_dlib+opencv实现摄像头人脸68个关键点检测并标注【python版】 | 糊涂虫…

dlib库的简介

一个机器学习的开源库,包含了机器学习的很多算法,使用起来很方便,直接包含头文件即可,并且不依赖于其他库(自带图像编解码库源码)。Dlib可以帮助您创建很多复杂的机器学习方面的软件来帮助解决实际问题。目前Dlib已经被广泛的用在行业和学术领域,包括机器人,嵌入式设备,移动电话和大型高性能计算环境。

Dlib是一个使用现代C++技术编写的跨平台的通用库,遵守Boost Software licence. 主要特点如下:

1.完善的文档:每个类每个函数都有详细的文档,并且提供了大量的示例代码,如果你发现文档描述不清晰或者没有文档,告诉作者,作者会立刻添加。

2.可移植代码:代码符合ISO C++标准,不需要第三方库支持,支持win32、Linux、Mac OS X、Solaris、HPUX、BSDs 和 POSIX 系统

3.线程支持:提供简单的可移植的线程API

4.网络支持:提供简单的可移植的Socket API和一个简单的Http服务器

5.图形用户界面:提供线程安全的GUI API

6.数值算法:矩阵、大整数、随机数运算等

7.机器学习算法:

8.图形模型算法:

9.图像处理:支持读写Windows BMP文件,不同类型色彩转换

10.数据压缩和完整性算法:CRC32、Md5、不同形式的PPM算法

11.测试:线程安全的日志类和模块化的单元测试框架以及各种测试assert支持

12.一般工具:XML解析、内存管理、类型安全的big/little endian转换、序列化支持和容器类

pythonopencv人脸相似度_dlib+opencv实现摄像头人脸68个关键点检测并标注【python版】 | 糊涂虫...

第二步

在终端中打开环境。

pythonopencv人脸相似度_dlib+opencv实现摄像头人脸68个关键点检测并标注【python版】 | 糊涂虫...

第三步

输入:

pip install dlib==19.7.0

注意:直接输入安装dlib可能会出错,因为可能最新版无whl格式的安装包,所以建议安装19.7.0版本,可以跳过安装boost和Cmake。

人脸检测 + 标注

利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68点标定,利用OpenCv进行图像化处理,在人脸上画出68个点,并标明序号;

设计流程

工作内容主要以下两大块:68点标定 和 OpenCv绘点

68点标定:

借助官方的训练模型实现;

dlib中为我们提供了关于人脸检测标注训练好的文件可在http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2下载

(下载完成后解压到工程目录下)

OpenCv绘点:

介绍了用到的 画圆函数cv2.circle() 和 输出字符串函数 cv2.putText() ;

流程:

1. 调用dlib库来进行人脸识别,调用预测器“shape_predictor_68_face_landmarks.dat”进行68点标定

2. 存入68个点坐标

3. 利用 cv2.circle 来画68个点

4. 利用 cv2.putText() 函数来画数字1-68

# _*_ coding:utf-8 _*_

import numpy as np

import cv2

import dlib

import time

# 人脸识别分类器

faceCascade = cv2.CascadeClassifier(r’C:UsersAdministratorAppDataLocalProgramsPythonPython37Libsite-packagescv2datahaarcascade_frontalface_default.xml’)

# 识别眼睛的分类器

eyeCascade = cv2.CascadeClassifier(r’C:UsersAdministratorAppDataLocalProgramsPythonPython37Libsite-packagescv2datahaarcascade_eye.xml’)

# 开启摄像头

cap = cv2.VideoCapture(0)

ok = True

detector = dlib.get_frontal_face_detector()

predictor = dlib.shape_predictor(‘shape_predictor_68_face_landmarks.dat’)

while ok:

# 读取摄像头中的图像,ok为是否读取成功的判断参数

ok, img = cap.read()

# 转换成灰度图像

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

rects = detector(img_gray, 0)

for i in range(len(rects)):

landmarks = np.matrix([[p.x, p.y] for p in predictor(img,rects[i]).parts()])

for idx, point in enumerate(landmarks):

# 68点的坐标

pos = (point[0, 0], point[0, 1])

print(idx,pos)

# 利用cv2.circle给每个特征点画一个圈,共68个

cv2.circle(img, pos, 2, color=(0, 255, 0))

# 利用cv2.putText输出1-68

font = cv2.FONT_HERSHEY_SIMPLEX

cv2.putText(img, str(idx+1), pos, font, 0.2, (0, 0, 255), 1,cv2.LINE_AA)

cv2.imshow(‘video’, img)

k = cv2.waitKey(1)

if k == 27: # press ‘ESC’ to quit

break

cap.release()

cv2.destroyAllWindows()

文章知识点与官方知识档案匹配,可进一步学习相关知识OpenCV技能树首页概览10927 人正在系统学习中 相关资源:PHP寄生虫繁殖劫持程序V3.0_寄生虫程序-PHP代码类资源-CSDN文库

来源:weixin_39878991

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月8日
下一篇 2020年11月8日

相关推荐