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操作系统。

1.jpeg

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 图

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 图

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 图

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 操作效果图

下一次讲,dlib的目标检测和实时视频的行人计数。

deepin如何布署python_Dlib库教程(2):联合python的人脸检测、标记、识别相关推荐

  1. python实现人脸检测及识别(2)---- 利用keras库训练人脸识别模型

    前面已经采集好数据集boss文件夹存放需要识别的对象照片,other存放其他人的训练集照片,现在,我们终于可以尝试训练我们自己的卷积神经网络模型了.CNN擅长图像处理,keras库的tensorflo ...

  2. 人脸检测和识别的开源库总结

    背景 人脸相关的任务有以下几种: 人脸检测(将图片中包含的人脸进行初步定位,以及关键点如眼睛.鼻子.嘴巴等更精细的定位,文章封面即为典型人脸检测结果): 人脸跟踪(视频中跟踪人脸位置变化): 人脸验证 ...

  3. 人脸检测和识别(中文标记)完整项目源代码(基于深度学习+python3.6+dlib+PIL+CNN+(tensorflow、keras)10分钟实现 区分欢乐颂中人物详细图文教程和完整项目代码)

    转载请注明:https://blog.csdn.net/wyx100/article/details/80428424 效果展示 未完待续... 环境配置 win7sp1 python         ...

  4. python开源库dlib入门,并进行人脸检测,看看周杰伦和东尼大木到底有多相似?看完本文再不要说,周和东像。。

    重点关注:强调一下,这里没有任何侮辱周董的意思,我也是一名Jay迷.只是为了学习,大家见谅..源代码戳这里 开启dlib库的学习 第一步:首先得安装dlib库,这里建议直接下载dlib,不然用pip直 ...

  5. deepin如何布署python_【玩转deepin】简单三步,教你在deepin15.11上安装Python3.7.4

    小编在论坛中看到有同学询问如何安装Python3.7,考虑到不少同学从panda进化到Lion后,也有了安装Python最新版本的需求,下面小编就来带着大家一起在deepin15.11上从源代码编译安 ...

  6. cvpr2020 人脸检测与识别_Python人脸检测识别实例教程

    前言 随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付.银行身份验证.手机人脸解锁等等. 识别 废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 ...

  7. 慕学在线--2、开发准备及布署上线

    Django项目开发规范 Django项目开发顺序: 分析项目初步明确: a. 预估需要引入的第三方开源工具包 b. 明确将要使用的数据库 c. 初步预估项目模块 i. 初步分析数据之间的关系,一对多 ...

  8. OpenCV4Android开发实录(2): 使用OpenCV3.4.1库实现人脸检测

    OpenCV4Android开发实录(2): 使用OpenCV3.3.0库实现人脸检测 转载请声明出处:http://write.blog.csdn.net/postedit/78992490 Ope ...

  9. Dlib库中实现正脸人脸检测的测试代码

    Dlib库中提供了正脸人脸检测的接口,这里参考dlib/examples/face_detection_ex.cpp中的代码,通过调用Dlib中的接口,实现正脸人脸检测的测试代码,测试代码如下: #i ...

  10. 加量不加价!极速人脸检测库libfacedetection升级v3版,新增五点检测

    点击我爱计算机视觉标星,更快获取CVML新技术 在众多人脸检测开源库中,南方科技大学于仕琪老师组开源的libfacedetection向来以CPU下极速而著称,又因为其使用BSD协议故可商用,一直在开 ...

最新文章

  1. python : unindent dose not math any outer indentation level
  2. Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题
  3. wireshark 总体结构
  4. flask简单的登录demo
  5. 查看linux mysql 账户权限设置_Linux下mysql新建账号及权限设置各种方式总结
  6. CL_GUI_PICTURE
  7. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
  8. git没有冲突 但是提示有_git 代码冲突处理
  9. pip安装第三方库以及版本
  10. Matlab之eval函数
  11. 学python lesson4
  12. sql server安装
  13. char *转为pansichar
  14. 智能网联汽车云控系统第2部分:车云数据交互规范
  15. weblogic启动项目失败查看_weblogic 部署项目成功,但是再界面上取不到数据
  16. 轴承系统动力学模型matlab程序代码
  17. 电脑很大,电脑内存很大为什么还是很卡
  18. css能更换图片颜色的,css改变图片的颜色
  19. python人机猜拳游戏代码_python 实现人和电脑猜拳的示例代码
  20. 工业机器人的自由度是什么?

热门文章

  1. 【语音分析】基于matlab GUI语音信号分析【含Matlab源码 1718期】
  2. 毕设题目:Matlab手写或印刷数字字母识别
  3. 【图像分割】基于matalb GUI遗传神经网络图像分割【含Matlab源码 659期】
  4. python执行sql语句慢很多_Python学习教程:面试问:一条SQL语句执行得很慢的原因有哪些?...
  5. tensorflow Dataset API diff between make_initializable_iterator and make_one_shot_iterator
  6. 用java求解八枚银币问题_算法笔记_004:8枚硬币问题【减治法】
  7. python强制声明变量类型_python声明变量类型吗
  8. fb静态区域_西门子 PLC FC和FB用法讲解
  9. ajax 循环php数组,使用Jquery,AJAX,PHP和数组进行实时更新
  10. c语言警告文件末尾没有换行符,“文件末尾没有换行符”编译器警告