当前位置: 首页 > news >正文

《深度学习》Dlib、OpenCV 轮廓绘制

目录

一、Dlib轮廓绘制

1、什么是轮廓绘制

2、步骤

        1)导入所需的库和模型

        2)加载人脸检测器

        3)读取图像

        4)人脸检测

        5)关键点定位

        6)绘制轮廓线条

        7)展示结果

二、案例实现

1、完整代码

        运行结果:

2、实时摄像头或视频检测

        运行结果:


一、Dlib轮廓绘制

1、什么是轮廓绘制

        在Dlib中,人脸识别的轮廓绘制是指通过检测人脸的关键点位置,使用直线或曲线连接这些关键点,从而绘制出人脸的轮廓线条。这些关键点通常包括眉毛、眼睛、鼻子、嘴巴等部位的位置。通过绘制人脸轮廓,可以对人脸进行更精确的分析和识别。

2、步骤

        1)导入所需的库和模型

                使用Dlib库进行人脸识别,需要导入相应的库和模型文件。

        2)加载人脸检测器

                使用Dlib提供的人脸检测器模型,加载并初始化人脸检测器。

        3)读取图像

                将待处理的图像读取到内存中。

        4)人脸检测

                使用人脸检测器对图像进行人脸检测,获取人脸的位置信息。

        5)关键点定位

                使用Dlib提供的关键点检测器模型,对检测到的人脸进行关键点定位,即确定人脸的眼睛、鼻子、嘴巴等部位的位置。

        6)绘制轮廓线条

                通过将关键点的位置连接起来,使用直线或曲线绘制出人脸的轮廓线条。

        7)展示结果

                将绘制好的轮廓线条展示在图像上,并可将结果保存或显示出来。

二、案例实现

1、完整代码

import numpy as np
import dlib
import cv2def drawLine(start,end):  # 将指定的点连接起来pts = shape[start:end]   # 索引遍历出来关键点的坐标for l in range(1,len(pts)):ptA = tuple(pts[l-1])   # 遍历第一个点开始ptB = tuple(pts[l])     # 遍历上一个点的后一个点cv2.line(image, ptA, ptB,(0,255,0),2)  # 将两个点连接起来def drawConvexHull(start,end):# 将指定的点构成一个凸包,绘制成轮廓,一般眼睛、嘴使用凸包用来绘制Facial = shape[start:end + 1]   # 索引的方式获取关键点的坐标mouthHull = cv2.convexHull(Facial)  # 凸包函数,用于计算二维点集的凸包,凸包是覆盖所有点的最小凸多边形,返回凸包的点集,或者叫二维顶点cv2.drawContours(image,[mouthHull], -1,(0, 255, 0),  2)  # 绘制检测到的凸包轮廓,-1表示绘制所有轮廓image = cv2.imread("people2.png")   # 读取图片
detector = dlib.get_frontal_face_detector()  # 构造脸部位置检测器
faces = detector(image,0)  # 检测人脸。返回检测到的人脸
# 读取人脸关键点定位模型
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
for face in faces:  # 遍历检测到人脸shape = predictor(image,face)  # 调用关键点检测器,获取人脸的关键点# 将关键点转换为坐标(x,y)的形式shape = np.array([[p.x,p.y] for p in shape.parts()])  # 获取每个人脸的关键点坐标drawConvexHull(36,41)   # 绘制右眼凸包,因为眼睛的关键点索引为36-41,凸包是覆盖所有点的最小凸多边形drawConvexHull(48, 59)  # 绘制左眼凸包drawConvexHull(48,59)   # 绘制嘴外部凸包drawConvexHull(60, 67)   # 绘制嘴内部凸包drawLine(0,17)   # 绘制脸颊点线,将脸上的点都连接起来drawLine(17, 22)drawLine(22, 27)drawLine(27, 36)
cv2.imshow("Frame",image)
cv2.waitKey()
cv2.destroyAllWindows()
        运行结果:

2、实时摄像头或视频检测

def drawLine(start,end):#将指定的点连接起水pts = shape[start:end]  #获取点集for l in range(1,len(pts)):ptA = tuple(pts[l-1])ptB = tuple(pts[l])cv2.line(image, ptA, ptB,(0,255,0),2)def drawConvexHull(start,end):# 将指定的点构成一个凸包,绘制成轮廓,一般眼睛、嘴使用凸包用来绘制Facial = shape[start:end + 1]mouthHull = cv2.convexHull(Facial)  # 凸包函数cv2.drawContours(image,[mouthHull], -1,(0, 255, 0),  2)cap = cv2.VideoCapture("笑容.mp4")
if not cap.isOpened():   # 如果打开失败print("Cannot open camera")exit()  # 终止程序detector = dlib.get_frontal_face_detector()  # 构造脸部位置检测器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")while True:ret, image = cap.read()faces = detector(image,0)  # 检测人险方位置# 读取入脸关键点定位模型for face in faces:# 对检测到的rects,还个遍历shape = predictor(image,face)# 获取关键点# 将关键点转换为坐标(x,y)的形式shape = np.array([[p.x,p.y] for p in shape.parts()])drawConvexHull(36,41)   # 绘制右眼凸包drawConvexHull(48, 59)  # 绘制左眼凸包drawConvexHull(48,59)   # 绘制嘴外部凸包drawConvexHull(60, 67)   # 绘制嘴内部凸包drawLine(0,17)   # 绘制脸颊点线drawLine(17, 22)drawLine(22, 27)drawLine(27, 36)cv2.imshow("Frame",image)k = cv2.waitKey(20)  # 每一帧画面执行20毫秒if k == 27:  # 如果键盘点击esc键,终止循环break
cv2.destroyAllWindows()
        运行结果:


http://www.mrgr.cn/news/52695.html

相关文章:

  • snmpgetnext使用说明
  • STM32+PWM+DMA驱动WS2812
  • C语言 | Leetcode C语言题解之第491题非递减子序列
  • 苹果首部VR电影:《Submerged》的背后故事与沉浸式电影的未来
  • 语音信号去噪 Matlab语音信号去噪,GUI界面。分别添加了正弦噪声和高斯噪声,分别用了巴特沃斯低通滤波器和小波分解去噪。每步处理都可以播放出信号声音。
  • 3.Java入门笔记--基础语法
  • sankey.top - 桑基图/桑吉图/流程图/能量流/物料流/能量分析
  • 将SpringBoot项目部署到linux服务器使得本地可以访问
  • Mysql(4)—数据库索引
  • 2023年华为杯数学建模竞赛C题论文和代码
  • 物联网协议:MQTT、CoAP 和 LwM2M 的比较与应用
  • STGCN解读(论文+代码)
  • 笔记-static关键字
  • 刷爆Leetcode Day3
  • 远控代码的重构-远控网络编程的设计上
  • SQL优化 - Limit优化
  • 腾讯域名续费的步骤怎么做的? 忘记了注册的用户名和密码
  • 【编程语言】C++ 中 vector 的常用操作方法
  • 10-Python基础编程之函数
  • SpringColoud GateWay 核心组件