在运行时创建 3D 面罩背后的数学

信息处理 图像处理 机器学习
2022-02-10 13:28:23

我是图像处理和机器学习领域的新手。我想在运行时创建面部的 3d 蒙版。

import numpy as np
import dlib

cap = cv2.VideoCapture(0)

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

while True:
    _, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    faces = detector(gray)
    for face in faces:
        x1 = face.left()
        y1 = face.top()
        x2 = face.right()
        y2 = face.bottom()

        landmarks = predictor(gray, face)

        for n in range(0, 68):
            x = landmarks.part(n).x
            y = landmarks.part(n).y
            cv2.circle(frame, (x, y), 3, (255, 0, 0), -1)


    cv2.imshow("Frame", frame)

    key = cv2.waitKey(1)
    if key == 27:
        break

我在网上找到了提及代码,在脸上找到了 68 个点。我想知道它背后的数学。我只知道使用了偏微分,但我不明白如何。此外,有关如何在运行时创建 3d 面罩的一些细节将不胜感激。

2个回答

在上面的例子中,数学非常简单:

  1. 使用级联 Haar 滤波器从图像中提取特征。
    您可以查看OpenCV Explained Visually 中的 Haar Cascade Classifiers
  2. 使用Ada Boost生成分类器集成来检测人脸。

有关这种方法的概述(首先由 Viola Jones Detector 完成),您可以查看Haar Cascades, Explained

很抱歉这个天真的答案,但为什么不考虑阅读您使用过的库的文档呢?

http://dlib.net/

http://dlib.net/python/index.html#dlib.get_frontal_face_detector

http://dlib.net/python/index.html#dlib.shape_predictor

快速谷歌搜索还揭示了许多关于这个库如何工作以及如何使用它的帖子

https://www.pyimagesearch.com/2019/12/16/training-a-custom-dlib-shape-predictor/

DLIB 似乎是一个机器学习/深度学习库,这意味着他们会在一些训练数据上训练一个预测器,如深度神经网络,然后使用该网络在图像上放置点。其背后的数学与任何其他神经网络没有什么不同。只要找到一些机器学习/深度学习的课程,你就会学到你需要的东西。