范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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操作系统。
  1.jpeg
  2.jpeg
  2 dlib+opencv+python的人脸检测、识别和标示
  ====================================
  2.1 代码:#人脸检测,画框和画68点特征显示  #第1步:导入模块 import dlib import 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 dlib import numpy as np import 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-8  import dlib import numpy as np import 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进行resize def 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 cv2 import dlib  # dlib模型加载 predictor_path = "/home/xgj/Desktop/dlib/shape_predictor_68_face_landmarks.dat" # 初始化landmark predictor = 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 time import 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.jpeg  import sys import cv2  import dlib  #采用skimage读取图片代码简单些,img全部为img #from skimage import io  #add1  detector = 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的目标检测和实时视频的行人计数。

赖弘国千字文控诉阿娇,网友如果这都不算爱,还有什么好悲哀离婚是解决错误爱情和错误婚姻的最妙良法。柏杨1hr阿娇的离婚的消息铺天盖地,信息量大到像一部电视剧,从结婚到离婚,她用了14个月。很多人说阿娇是个恋爱脑,对婚姻没有什么概念,甚至有写作多久能实现自由职业,哪个平台比较适合新人?写作多久能实现自由职业,哪个平台比较适合新人?小白写多久能实现自由职业者,哪个平台比较适合我?如标题问题,我几乎每天都能遇见这样的咨询。他们很多人对写作抱有很大的期待,也可以说有很来了解这7个平台渠道,你也能实现睡后收入这几年斜杠青年,斜杠中年,这几个词语比较红火。如何实现斜杠,让自己实现副业创收,哪怕人在睡觉也能产生被动收益,这应该是无数人的梦想。我们绝大多数人都是普普通通的人,不是富二代,不是视频号刚做2月,实现单条阅读量15万,点赞1300视频号已经出来半年了,最早一批在2月份就已经开通注册了视频号,但是很多人发几条又放弃了,有人从这月才做视频号,反而坚持日更。各人各自的选择和他的发展时区。有人通过视频号给公众号引流26岁姑娘无心发了条微博带来数亿价值,引爆世界关注安徽合肥26岁姑娘无心发了条微博带来数亿价值,引爆世界关注安徽合肥安徽安庆岳西女孩王琪,她的一条微博价值上亿。她妇女节发条微博邀请马云吃火锅,本是无心之举,却让合肥这个新一线城市一夜之间火齐帆齐微刊一个写作者的自白,你是我不及的梦齐帆齐微刊一个写作者的自白,你是我不及的梦参加过多个写作社群之后,我确认了一件事情齐帆齐是一位被严重低估的作家和写作老师她太过于真实,以至于少了偶像在粉丝心中的神秘感,毕竟距离产生50岁姐姐重拾文学梦,6个月成为签约作者50岁是半百之人,人生已走过一半。50岁,有的人生,星辰陨落,繁华落尽已结束。有的人生,枯枝焕发,风华正茂刚开始。韩荆是一位53岁的姐姐,原籍河南省,1993年随丈夫迁居我们安徽黄用手机5年,300万字到成为自由写作者的成长之路(3)点击蓝色链接可以查看用手机写作5年300万字到成为自由写作者成长之路(1)用手机写作5年300万字到成为自由写作者成长之路(2)关于我生病的那处,我在最开始写作初期有写过,由于简书14岁半辍学,8年流水工到年入50万的写作者,我是如何做到的?我和小妹作者齐帆齐我和家乡我出生于安徽安庆桐城,一个被叫做文都的地方。清朝桐城派文化曾雄霸文坛200多年,那时有句话天下文章皆出桐城乎。我一直以出生于文都桐城倍感自豪和骄傲,一方水我是如何用手机写作300万字,走上自由写作者之路?(1)我是如何用手机写作300万字,走上自由写作者道成长路?(上)有时,我也在想,当初为什么走上写作之路呢?时光追忆到我的小时候,因为性格特别自卑话少,那时候我家里没有一本课外书,没有电时间都去了哪里?我的热恋是一份畸形的爱,却耗光了我所有的时间不经意间已是匆匆数年虚度,细数光阴,却总是经不起这来自灵魂的拷问这些年,我的时间都去了哪里?今日头条西瓜视频抖音快手?还是微信群聊以及和朋友之间的闲聊?好像都是,又好像都不是。时间
怎么能看出一个人开车水平高低?作者老李不喝酒链接httpswww。zhihu。comquestion390627646answer1806326487来源知乎著作权归作者所有。商业转载请联系作者获得授权,非商业最近的一些计划2021。4。9这是学习笔记的第2341篇文章最近打算完善如下的一些事情1)梳理工作中的一些难点问题,整理成相关的分享,把这些经验传递给小组成员,让大家了解到一些看不到的技术工作,对个人有一些成长MySQLAbortedconnection日志分析一前言作为运维DBA,我们经常会在数据库的err。log中查看到如下种类的报错信息WarningAbortedconnectionxxtodbdbuserxxxhosthostna图表分析2020年和2018年北京积分落户数据一年一度的积分落户工作马上要开始了,刚好对于2020年的分数情况还做了一些统计,总体的感觉就是水涨船高。2020年10月15日,2019年北京积分落户人员名单出炉最低分值93。58MySQL8。0的预研清单和计划这是学习笔记的第2342篇文章最近在团队内聊了下关于MySQL8。0的特性调研工作,其实线上已经稳定运行了近20的业务,但是很多思维模式和习惯还是继承自5。7,所以需要与时俱进,在MySQL语法之union和unionall,你使用哪一个?相信有不少同学都看过DBA随笔,幕后的作者是我前同事小叶,作为小叶的导师,我教过他正事,也教过一些坏的习惯,不过写笔记这个习惯算是小叶自己开窍了,他已经坚持了很长一段时间了,这股学干货帖TDSQLA核心架构揭秘5月18日,腾讯云首款分布式分析型数据库TDSQLA正式发布公有云版本。TDSQLA作为领先的分析型数据库,是腾讯首款分布式分析型数据库,采用全并行无共享架构,具有自研列式存储引擎对比Excel,学习pandas数据透视表Excel中做数据透视表选中整个数据源依次点击插入数据透视表选择在Excel中的哪个位置,插入数据透视表然后根据实际需求,从不同维度展示结果结果如下pandas用pivottabl没有万能的数据库,核心系统数据库我该怎么选?Gdevops峰会2021Gdevops全球敏捷运维峰会广州站,将在5月28日盛大举办。这个事情我得大力支持下。Gdevops经过创办6年成功举行近20场大会的经验积淀,本次峰会结合行业趋势与技术热独自带娃到5岁,婆婆突然说我来帮你带,你每个月给我2500块文乔治麻麻最近闺蜜因为婆婆的一个电话甚是烦恼。闺蜜婆婆有两个儿子,闺蜜的老公是老二,老大家的媳妇先生的孩子,所以婆婆将大部分的精力放在了大儿子家,不辞辛苦的照料着大孙子。闺蜜生了孩08年奥运,那个站在林妙可幕后献唱的女孩,目前现状如何?文乔治麻麻01hr杨沛宜这个名字,可能让人不太熟悉。她就是08年奥运会,站在林妙可在幕后献唱的那个女孩,她的现状如何呢?奥运会幕后唱歌结束后,杨沛宜被送到老家一段时间,父亲杨慧松有