deepin如何布署python_Dlib库教程(2):联合python的人脸检测、标记、识别
1 说明
=====
1.1 准备篇《Dlib库教程(1):介绍、linux下的安装与避坑》。
1.2 本次讲解Dlib库的强大的联合python的人脸检测、标记和识别功能。
1.3 熟悉Dlib库的python的API功能函数。
1.4 熟悉python编程相关知识,讲解思路清晰,注释仔细,干货满满,由浅入深,一秒入门。
1.5 图片来自今日头条正版免费图库,表示对女神的喜爱,致敬,仅供学习。
1.6 环境:python3.8+dlib19.21.99+opencv4.4.0+deepin-linux操作系统。
![](/assets/blank.gif)
1.jpeg
![](/assets/blank.gif)
2.jpeg
2 dlib+opencv+python的人脸检测、识别和标示
====================================
2.1 代码:
#人脸检测,画框和画68点特征显示#第1步:导入模块import dlibimport cv2#第2步:模型加载#这是人脸68点特征检测器模型,提前官网下载好shape_predictor_path = '/home/xgj/Desktop/dlib/shape_predictor_68_face_landmarks.dat' #获取人脸分类器detector = dlib.get_frontal_face_detector() #获取人脸 68 点特征检测器,进行人脸面部轮廓特征提取:predictor = dlib.shape_predictor(shape_predictor_path)#第3步:被检测图片#载入被检测图片路径imgpath ='/home/xgj/Desktop/dlib/pic/2.jpeg'#读图片,cv.imread()共两个参数,第二个为如何读取图片,#包括cv2.IMREAD_COLOR: 读入一个彩色图片#img = cv2.imread(imgpath, cv2.IMREAD_COLOR) img = cv2.imread(imgpath) #默认,等同于上面读取彩色图片#这个是cv2特有的图片读取,需要转换,否则不是原图b, g, r = cv2.split(img)img2 = cv2.merge([r, g, b])#侦测人脸dets = detector(img2, 1)#第4步:for index, face in enumerate(dets): left = face.left() top = face.top() right = face.right() bottom = face.bottom() #在人脸上标示绿色方框 cv2.rectangle(img,(left, top),(right, bottom),(0, 255, 0), 1) shape = predictor(img, face) for index, pt in enumerate(shape.parts()): pt_pos = (pt.x, pt.y) #标示人脸68个特征圆点 cv2.circle(img, pt_pos, 1, (255, 0, 0), 1)#第5步:#展示已经人脸识别后的带有标示图片cv2.imshow('pic',img)cv2.namedWindow('pic',cv2.WINDOW_AUTOSIZE)#窗口关闭设置k = cv2.waitKey(0)cv2.destroyAllWindows()
2.2 图
![](/assets/blank.gif)
3 dlib+cv2+numpy法人脸检测和识别
===========================
3.1 代码
# encoding:utf-8#代码来源#https://blog.csdn.net/liuxiao214/article/details/83411820?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param#人脸检测,画框import dlibimport numpy as npimport cv2# 获得人脸矩形的坐标信息函数def rect_to_bb(rect): x = rect.left() y = rect.top() w = rect.right() - x h = rect.bottom() - y return (x, y, w, h)# 图片大小调整函数def resize(image, width=1200): # 将待检测的image进行resize r = width * 1.0 / image.shape[1] dim = (width, int(image.shape[0] * r)) resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA) return resized# 人脸检测函数def detect(): #加载待检测的图片 image_file = "/home/xgj/Desktop/dlib/pic/1.jpeg" image = cv2.imread(image_file) #调整大小 image = resize(image, width=1200) #灰度转换 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) #dlib人脸检测器和人脸检测画框 detector = dlib.get_frontal_face_detector() #dlib人脸检测矩形框4点坐标和对图像画人脸框 rects = detector(gray, 1) #画框和输出文字 for (i, rect) in enumerate(rects): (x, y, w, h) = rect_to_bb(rect) cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.putText(image, "Face:{}".format(i + 1), (x - 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) #图片展示 cv2.imshow("Output", image) cv2.waitKey(0)if __name__ == "__main__": detect()
3.2 图
![](/assets/blank.gif)
3.3 增加功能,标注68人脸特征点
=========================
3.3.1 代码
# encoding:utf-8import dlibimport numpy as npimport cv2# 获得人脸矩形的坐标信息def rect_to_bb(rect): x = rect.left() y = rect.top() w = rect.right() - x h = rect.bottom() - y return (x, y, w, h)# 将包含68个特征的的shape转换为numpy array格式def shape_to_np(shape, dtype="int"): coords = np.zeros((68, 2), dtype=dtype) for i in range(0, 68): coords[i] = (shape.part(i).x, shape.part(i).y) return coords# 将待检测的image进行resizedef resize(image, width=1200): r = width * 1.0 / image.shape[1] dim = (width, int(image.shape[0] * r)) resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA) return resized#人脸检测、识别、标注68特征点def feature(): #加载被检测图片 image_file = "/home/xgj/Desktop/dlib/pic/2.jpeg" image = cv2.imread(image_file) image = resize(image, width=1200) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) #加载dlib功能函数 detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor("/home/xgj/Desktop/dlib/shape_predictor_68_face_landmarks.dat") rects = detector(gray, 1) shapes = [] #人脸检测、识别和画框 for (i, rect) in enumerate(rects): shape = predictor(gray, rect) #获取特征点 shape = shape_to_np(shape) #存入列表中 shapes.append(shape) (x, y, w, h) = rect_to_bb(rect) cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.putText(image, "Face: {}".format(i + 1), (x - 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) #获取68关键点并画圈标注 for shape in shapes: for (x, y) in shape: cv2.circle(image, (x, y), 2, (0, 0, 255), -1) cv2.imshow("Output", image) cv2.waitKey(0)if __name__ == "__main__": feature()
3.3.2 图
![](/assets/blank.gif)
4 高级一点:视频实时检测人脸和标注
=============================
4.1 代码:
# coding=utf-8#参考文章#https://blog.csdn.net/m0_37477175/article/details/78151320?locationNum=2&fps=1&utm_medium=distribute.pc_relevant.none-task-blog-title-6&spm=1001.2101.3001.4242#摄像头实时,人脸检测和画框和画弧,默认红色框和蓝色人脸特征线import cv2import dlib# dlib模型加载predictor_path = "/home/xgj/Desktop/dlib/shape_predictor_68_face_landmarks.dat"# 初始化landmarkpredictor = dlib.shape_predictor(predictor_path)# 初始化dlib人脸检测器detector = dlib.get_frontal_face_detector()# 初始化dlib自带显示窗口win = dlib.image_window()# opencv加载视频文件#cap = cv2.VideoCapture('/home/xxx.mp4')#摄像头读取cap = cv2.VideoCapture(0)if cap.isOpened(): print("Unable to connect to camera !")#循环while cap.isOpened(): ret, cv_img = cap.read() if cv_img is None: break # RGB TO BGR img = cv2.cvtColor(cv_img, cv2.COLOR_RGB2BGR) #侦测和检测人脸 dets = detector(img, 0) shapes = [] for i, d in enumerate(dets): shape = predictor(img, d) shapes.append(shape) win.clear_overlay() win.set_image(img) if len(shapes)!= 0 : for i in range(len(shapes)): win.add_overlay(shapes[i]) win.add_overlay(dets)cap.release()
4.2 再高级一点的代码
# 调用摄像头,进行人脸捕获,和 68 个特征点的追踪# 参考原作者,感谢原作者# Author: coneypo# Blog: http://www.cnblogs.com/AdaminXie# GitHub: https://github.com/coneypo/Dlib_face_detection_from_camera#第1步:导入模块import dlib import numpy as np import cv2#时间模块用于截图保存后生成的文件名import timeimport timeit#第2步:初始化# 储存截图的目录path_screenshots = "/home/xgj/Desktop/dlib/data/screenshots/"# dlib模块加载detector = dlib.get_frontal_face_detector()predictor = dlib.shape_predictor('/home/xgj/Desktop/dlib/shape_predictor_68_face_landmarks.dat')# 创建 cv2 摄像头对象cap = cv2.VideoCapture(0)# cap.set(propId, value)# 设置视频参数,propId 设置的视频参数,value 设置的参数值cap.set(3, 480)# 截图 screenshots 的计数器cnt = 0#时间列表time_cost_list = []#第3步:# cap.isOpened() 返回 true/false 检查初始化是否成功while cap.isOpened(): # cap.read() # 返回两个值: # 一个布尔值 true/false,用来判断读取视频是否成功/是否到视频末尾 # 图像对象,图像的三维矩阵 flag, im_rd = cap.read() # 每帧数据延时 1ms,延时为 0 读取的是静态帧 k = cv2.waitKey(1) # 取灰度 img_gray = cv2.cvtColor(im_rd, cv2.COLOR_RGB2GRAY) # start point start = timeit.default_timer() # 人脸数 faces = detector(img_gray, 0) # 待会要写的字体 font = cv2.FONT_HERSHEY_SIMPLEX # 标 68 个点 if len(faces) != 0: # 检测到人脸 for i in range(len(faces)): landmarks = np.matrix([[p.x, p.y] for p in predictor(im_rd, faces[i]).parts()]) for idx, point in enumerate(landmarks): # 68 点的坐标 pos = (point[0, 0], point[0, 1]) # 利用 cv2.circle 给每个特征点画一个圈,共 68 个 cv2.circle(im_rd, pos, 2, color=(139, 0, 0)) # 利用 cv2.putText 输出 1-68 cv2.putText(im_rd, str(idx + 1), pos, font, 0.2, (187, 255, 255), 1, cv2.LINE_AA) cv2.putText(im_rd, "faces: " + str(len(faces)), (20, 50), font, 1, (0, 0, 0), 1, cv2.LINE_AA) # end point stop = timeit.default_timer() time_cost_list.append(stop - start) else: # 没有检测到人脸 cv2.putText(im_rd, "no face", (20, 50), font, 1, (0, 0, 0), 1, cv2.LINE_AA) # 添加说明 im_rd = cv2.putText(im_rd, "press 'S': screenshot", (20, 400), font, 0.8, (255, 255, 255), 1, cv2.LINE_AA) im_rd = cv2.putText(im_rd, "press 'Q': quit", (20, 450), font, 0.8, (255, 255, 255), 1, cv2.LINE_AA) # 按下 's' 键保存 if k == ord('s'): cnt += 1 cv2.imwrite(path_screenshots + "screenshot" + "_" + str(cnt) + "_" + time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) + ".jpg", im_rd) # 按下 'q' 键退出 if k == ord('q'): break # 窗口显示 # 参数取 0 可以拖动缩放窗口,为 1 不可以 cv2.namedWindow("camera", 0) #cv2.namedWindow("camera", 1) cv2.imshow("camera", im_rd)# 释放摄像头cap.release()# 删除建立的窗口cv2.destroyAllWindows()
5 备注:附注学习和复习opencv的色彩转换问题
====================================
5.1 代码
# -*- coding: utf-8 -*-#熟悉opencv色彩转换问题#代码所在终端打开输入#python3.8 11.py /home/xgj/Desktop/dlib/pic/1.jpegimport sysimport cv2 import dlib#采用skimage读取图片代码简单些,img全部为img#from skimage import io #add1detector = dlib.get_frontal_face_detector()win = dlib.image_window()for f in sys.argv[1:]: #img = io.imread(f) #add2 img = cv2.imread(f) #opencv的增加色彩转换,增加2行 b, g, r = cv2.split(img) img1 = cv2.merge([r, g, b]) dets = detector(img1,1) #使用detector进行人脸检测 for i, d in enumerate(dets): x = d.left() y = d.top() w = d.right() h = d.bottom() cv2.rectangle(img1, (x, y), (w, h), (0, 255, 0)) print("({},{},{},{})".format( x, y, (w-x), (h-y))) win.set_image(img1) #io.imsave('/home/xgj/Desktop/dlib/P_Dlib_test.jpg',img) #增加2行色彩转换 r, g, b = cv2.split(img1) img2 = cv2.merge([b, g, r]) cv2.imwrite('/home/xgj/Desktop/dlib/P_Dlib_test.jpg',img2) #等待点击 dlib.hit_enter_to_continue()
5.2 操作效果图
![](/assets/blank.gif)
下一次讲,dlib的目标检测和实时视频的行人计数。
deepin如何布署python_Dlib库教程(2):联合python的人脸检测、标记、识别相关推荐
- python实现人脸检测及识别(2)---- 利用keras库训练人脸识别模型
前面已经采集好数据集boss文件夹存放需要识别的对象照片,other存放其他人的训练集照片,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的tensorflo ...
- 人脸检测和识别的开源库总结
背景 人脸相关的任务有以下几种: 人脸检测(将图片中包含的人脸进行初步定位,以及关键点如眼睛.鼻子.嘴巴等更精细的定位,文章封面即为典型人脸检测结果): 人脸跟踪(视频中跟踪人脸位置变化): 人脸验证 ...
- 人脸检测和识别(中文标记)完整项目源代码(基于深度学习+python3.6+dlib+PIL+CNN+(tensorflow、keras)10分钟实现 区分欢乐颂中人物详细图文教程和完整项目代码)
转载请注明:https://blog.csdn.net/wyx100/article/details/80428424 效果展示 未完待续... 环境配置 win7sp1 python ...
- python开源库dlib入门,并进行人脸检测,看看周杰伦和东尼大木到底有多相似?看完本文再不要说,周和东像。。
重点关注:强调一下,这里没有任何侮辱周董的意思,我也是一名Jay迷.只是为了学习,大家见谅..源代码戳这里 开启dlib库的学习 第一步:首先得安装dlib库,这里建议直接下载dlib,不然用pip直 ...
- deepin如何布署python_【玩转deepin】简单三步,教你在deepin15.11上安装Python3.7.4
小编在论坛中看到有同学询问如何安装Python3.7,考虑到不少同学从panda进化到Lion后,也有了安装Python最新版本的需求,下面小编就来带着大家一起在deepin15.11上从源代码编译安 ...
- cvpr2020 人脸检测与识别_Python人脸检测识别实例教程
前言 随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付.银行身份验证.手机人脸解锁等等. 识别 废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 ...
- 慕学在线--2、开发准备及布署上线
Django项目开发规范 Django项目开发顺序: 分析项目初步明确: a. 预估需要引入的第三方开源工具包 b. 明确将要使用的数据库 c. 初步预估项目模块 i. 初步分析数据之间的关系,一对多 ...
- OpenCV4Android开发实录(2): 使用OpenCV3.4.1库实现人脸检测
OpenCV4Android开发实录(2): 使用OpenCV3.3.0库实现人脸检测 转载请声明出处:http://write.blog.csdn.net/postedit/78992490 Ope ...
- Dlib库中实现正脸人脸检测的测试代码
Dlib库中提供了正脸人脸检测的接口,这里参考dlib/examples/face_detection_ex.cpp中的代码,通过调用Dlib中的接口,实现正脸人脸检测的测试代码,测试代码如下: #i ...
- 加量不加价!极速人脸检测库libfacedetection升级v3版,新增五点检测
点击我爱计算机视觉标星,更快获取CVML新技术 在众多人脸检测开源库中,南方科技大学于仕琪老师组开源的libfacedetection向来以CPU下极速而著称,又因为其使用BSD协议故可商用,一直在开 ...
最新文章
- python : unindent dose not math any outer indentation level
- Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题
- wireshark 总体结构
- flask简单的登录demo
- 查看linux mysql 账户权限设置_Linux下mysql新建账号及权限设置各种方式总结
- CL_GUI_PICTURE
- Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
- git没有冲突 但是提示有_git 代码冲突处理
- pip安装第三方库以及版本
- Matlab之eval函数
- 学python lesson4
- sql server安装
- char *转为pansichar
- 智能网联汽车云控系统第2部分:车云数据交互规范
- weblogic启动项目失败查看_weblogic 部署项目成功,但是再界面上取不到数据
- 轴承系统动力学模型matlab程序代码
- 电脑很大,电脑内存很大为什么还是很卡
- css能更换图片颜色的,css改变图片的颜色
- python人机猜拳游戏代码_python 实现人和电脑猜拳的示例代码
- 工业机器人的自由度是什么?
热门文章
- 【语音分析】基于matlab GUI语音信号分析【含Matlab源码 1718期】
- 毕设题目:Matlab手写或印刷数字字母识别
- 【图像分割】基于matalb GUI遗传神经网络图像分割【含Matlab源码 659期】
- python执行sql语句慢很多_Python学习教程:面试问:一条SQL语句执行得很慢的原因有哪些?...
- tensorflow Dataset API diff between make_initializable_iterator and make_one_shot_iterator
- 用java求解八枚银币问题_算法笔记_004:8枚硬币问题【减治法】
- python强制声明变量类型_python声明变量类型吗
- fb静态区域_西门子 PLC FC和FB用法讲解
- ajax 循环php数组,使用Jquery,AJAX,PHP和数组进行实时更新
- c语言警告文件末尾没有换行符,“文件末尾没有换行符”编译器警告