前言
考虑到之前学习的OpenCV主要用于物体分割识别啥的,太多人搞了这玩意,已经没有什么新意,想着看看能不能用OpenCV能玩出什么花样来。观察某些直播当中有些技术例如人脸上方会有动态的猫耳朵并且时刻随着人脸姿态变化而变化感觉就像是真的长了猫耳朵一样。突然想起来如果能够将猫耳朵模型和人脸同样姿态展现是否就可以实现,因此编写了此趣味性的代码博大伙一乐。
该代码主要作用是 利用人脸识别先识别人脸的位姿然后将位姿(由于是图像位置量只考虑xy,z通过人脸框大小和距离对应关系)这些信息和一个眼镜模型的位姿对应上然后在对应视角得到这个模型的二维图片,最后将这个图片覆盖到人脸上实现自动戴模型效果。
准备工作
同样需要安装python,并且需要依赖多个库
首先为了不影响或者破坏其他python库,需要创建一个虚拟环境,参考YOLOv8实战和matlab建模:检测监控站视频的车流量、速度、车辆时间占用率以及预估拥堵模型_yolov8可以在matlab上运行吗-优快云博客
先创建虚拟环境
进入环境后输入:
pip install opencv-python
pip install boost cmake build
pip install dlib
pip install face_recognition trimesh pyrender pillow
在安装过程当中可能会出现问题,主要的问题应该出现在dlib的安装上,如果是win10/win11系统一般出现dlib安装失败的问题,解决方法是安装VS2015版本及以上、cmake等依赖
参考:dlib 安装教程(三种方法)_dlib库安装-优快云博客
如果是使用python310尝试多次还是不能解决的可以下载下列当中的dlib直接安装:
dlib-19.22.99-cp310-cp310-win_amd64.whl · huangxiaohuok/Install-dlib - Gitee.com
安装指令:
pip install ./dlib-19.22.99-cp310-cp310-win_amd64.whl
安装完成后输入:
python
然后再依次输入:
import cv2
import dlib
import face_recognition
import trimesh
import pyrender
如果显示如下表示安装成功:

人脸识别
在人脸识别这部分。首先利用OpenCV和Face_Recognition库,我们可以快速地找到脸部所在的位置。确认了脸的位置之后,我们还能进一步提取到一些重要的特征点,比如眼睛、鼻子和嘴巴的具体位置。
然后我们需要把这些特征点运用起来。使用一些空间几何变换能够计算出头部在三维空间里的角度,也即推理出这张脸朝向哪个方向。于是,我们得到了所谓的人脸姿态,也就在图像上显示为roll、pitch和yaw的角度。RPY转角参考欧拉角机器人RPY角和Euler角 -- 基本公式-优快云博客
同时还缺少人脸深度数据,因此考虑用dlib检测并利用opencv勾勒一个人脸相框来表示人脸在图像当中的大小,这个相框越大人脸距离摄像头也越近。
接下来描述部分数学公式作为编写代码的基础:
人脸姿态识别及姿态矩阵的推导
-
解PnP问题:
使用的是
cv2.solvePnP函数。解PnP问题的目的是根据已知的3D模型点与对应的2D图像平面点,求解摄像机的姿态——即平移向量T和旋转向量R。这一过程基于以下矩阵公式:
用OpenCV等库实现任意角度人脸戴眼镜效果

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



