《深度学习》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、完整代码

python 复制代码
import numpy as np
import dlib
import cv2



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)  # 绘制检测到的凸包轮廓,-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、实时摄像头或视频检测

python 复制代码
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()
运行结果:
相关推荐
QY_Research_33 分钟前
2026房地产NFT平台创业机遇与落地指南分析报告
大数据·人工智能·物联网·机器人·制造
机器人零零壹2 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
电子元件小说家3 小时前
2026年四季度电感市场观察:AI算力与汽车电子驱动下的选型与验证建议智能硬件
人工智能·汽车
网易CodeWave-小码哥3 小时前
支持多模块 Java 微服务导入|CodeWave SDD V4.5.10 上线
人工智能
AI你一生一世3 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
belldeep3 小时前
python:genesis-world, Genesis-Embodied-AI
人工智能·python·ai·genesis
怕浪猫3 小时前
小程序成长计划上新:10 亿 Token 现在能调 DeepSeek-v4.1-flash了
人工智能·aigc·ai编程
ss2734 小时前
为什么PostgreSQL适合AI场景?
数据库·人工智能·postgresql
七牛云行业应用5 小时前
DeepSeek Super-agent 与 Grok Bot:开源 Agent 架构和聊天助手有何区别
人工智能·ai·架构·ai编程
维克兜率天5 小时前
【维克】趋势型CTA:期货市场的“追涨杀跌“
人工智能·python