使用paddlehub face_landmark_localization进行面部图像精确处理

本文介绍了使用PaddleHub进行面部关键点识别,通过识别出的关键点进行面部区域处理,结合opencv进行图像填充和融合。代码中以RGB方式判断肤色,并直接在原图上绘图,而非采用图片叠加,以保持图像质量。作者在思考和总结中提到,面部关键点在动态场景中的精确定位还需考虑更多因素,如比例、肤色和光照,同时对比了图片叠加与像素替换两种方法的影响。
摘要由CSDN通过智能技术生成
人脸关键点检测是人脸识别和分析领域中的关键一步,它是诸如自动人脸识别、表情分析、三维人脸重建及三维动画等其它人脸相关问题的前提和突破口。
paddlehub提供了face_landmark_localization模型,可以快速的提供人脸部68个关键点(人脸轮廓17个点,左右眉毛各5个点,左右眼睛各6个点,鼻子9个点,嘴巴20个点)。
我计划试验在这68个点的基础上,为目标图像进行一个唐代妆容的美化。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200501212047172.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tlbnNoaW41MTYxNjM=,size_16,color_FFFFFF,t_70)

设计思路

利用识别出的关键点进行面部区域划定,然后使用opencv的方式进行填充和图像融合。

代码

import paddlehub as hub
import cv2
import numpy as np
from matplotlib import pyplot as plt
import os
import random
%matplotlib inline

#展示图片效果
def img_show_bgr(image,size=8):
#cv2.cvtColor,plt.imshow,plt.axis
#节省空间,不填代码了
#返回两点中点坐标
def mid_point(p1,p2):
    point=(np.array(p1)+np.array(p2))/2
    point=point.astype(int)
    return (point[0],point[1])
 #返回两点距离
def dis_point(p1,p2):
    x_dis=p1[0]-p2[0]
    x_dis**=2
    y_dis=p1[1]-p2[1]
    y_dis**=2
    return (x_dis+y_dis)**0.5
#肤色判定RGB
def skin_rgbrange(R,G,B):
    skin = 0
                
    if (abs(R - G) > 15) and (R > G) and (R > B):
        if (R > 95) and (G > 40) and (B > 20) and (max(R,G,B) - min(R,G,B) > 15):               
            skin = 1    
        elif (R > 220) and (G > 210) and (B > 170)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值