python-opencv 人脸68点特征点检测

python-opencv 人脸68点特征点检测

不是很难,主要还是掉包,来看一下代码啊:

python 复制代码
# coding: utf-8
# 导包
import numpy as np
import dlib
import cv2


class face_emotion(object):
    def __init__(self):
        # 人脸检测器对象,通过它拿到人脸矩形框坐标
        self.detector = dlib.get_frontal_face_detector()

        # 加载预训练模型,创建 人脸关键点检测器 对象
        self.predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

        # 创建 cv2 视频捕捉对象 or 摄像头对象
        # 将视频流从默认的摄像头(设备索引0)读取到内存中
        # 0 是设备索引号,可以替换为其他设备 1、2。。。
        # ls /dev/video* 查看设备号
        self.cap = cv2.VideoCapture(0)

    def feature_point_detection(self):
        # 循环读取视频帧 or 图像
        if True:
            # 读入 1 帧视频
            # flag:一个布尔值,指示是否成功读取到了视频帧
            # img:一个 numpy 数组,存储了图像的像素值,(0-255)
            # flag, img = self.cap.read()

            # 读入 1 张图像
            img = cv2.imread("image/beauty.png")

            # 取灰度
            # gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

            # 使用人脸检测器检测人脸,返回 faces 矩形框坐标数据
            faces = self.detector(img, 0)
            print(faces)
            # exit()

            # 如果检测到人脸
            if faces:
                # 对每张人脸都标出 68 个特征点
                # for i in range(len(faces)):
                for k, d in enumerate(faces):
                    shape = self.predictor(img, d)
                    print(shape)
                    # 用圆圈标识每个特征点,(shape.part(i).x, shape.part(i).y) 每个特征点的坐标
                    for i in range(68):
                        index = str(i)
                       
                        cv2.putText(
                            img,
                            index,
                            (shape.part(i).x, shape.part(i).y),  # 左下角
                            cv2.FONT_HERSHEY_SIMPLEX,
                            0.4,  # 0.4:表示文本的缩放因子,可以调整文本的大小
                            (255, 0, 0)
                        )

            # 窗口显示
            cv2.imshow("img", img)
            

            # cv2.waitKey(1) 监听键盘输入,0xFF == 27 键盘 ESC 键值 27
            if cv2.waitKey(0) & 0xFF == 27:
                cv2.destroyAllWindows()

        # 释放摄像头
    #    self.cap.release()

        # 删除建立的窗口
        


if __name__ == "__main__":
    my_face = face_emotion()
    my_face.feature_point_detection()

运行结果如下:

相关推荐
数据小爬虫@2 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python
健胃消食片片片片2 小时前
Python爬虫技术:高效数据收集与深度挖掘
开发语言·爬虫·python
井底哇哇4 小时前
ChatGPT是强人工智能吗?
人工智能·chatgpt
Coovally AI模型快速验证4 小时前
MMYOLO:打破单一模式限制,多模态目标检测的革命性突破!
人工智能·算法·yolo·目标检测·机器学习·计算机视觉·目标跟踪
AI浩4 小时前
【面试总结】FFN(前馈神经网络)在Transformer模型中先升维再降维的原因
人工智能·深度学习·计算机视觉·transformer
可为测控5 小时前
图像处理基础(4):高斯滤波器详解
人工智能·算法·计算机视觉
ℳ₯㎕ddzོꦿ࿐5 小时前
解决Python 在 Flask 开发模式下定时任务启动两次的问题
开发语言·python·flask
CodeClimb5 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
一水鉴天5 小时前
为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约
开发语言·人工智能·python
Channing Lewis5 小时前
什么是 Flask 的蓝图(Blueprint)
后端·python·flask