Android 多人脸贴图

1. 效果图

多人人脸贴图
单人人脸贴图

2. 前置条件

1. 通过GLSurfaceView 以及自定义Render(OES纹理)绘制相机画面,同时创建FBO纹理,用于进行贴图
2. 同时通过ImageReader读取相机原画面,传入人脸关键点识别,获取关键特征点

3. 人脸关键点以及偏转角度计算

3.1 选取关键点,计算顶点坐标
    我们可以选取人脸特点中具备对称的2个点。出现头部方向旋转时,可以通过这两个点来计算出头部倾斜的夹角。
    然后利用倾斜角便可以计算出运算后四个顶点坐标

Texture_Vertext

3.2 绘制
    glViewport(0,0,width,height)//这里的绘制的GL宽高仍然为全屏幕
    贴图的顶点坐标由3.1获取,实现2D贴图绘制即可。这里注意的是使用的FBO纹理,Y轴坐标获取后都需要进行反转
    

4. 上传2D纹理贴图

    此处省略

5. 其他实现思路

   5.1 定义glViewPort(x,y,widht,height),直接将其设置为贴图的位置。存在问题:由于此处设置的矩形,在旋转时,便会出现矩形某个方向拉伸变形问题。
   5.2 仅定义左下,右下顶点,(左上右上均在2者基础上加入图片高度),通过Matrix矩阵进行旋转,通过测试结果显示会产生形变,效果不好。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!