基于 DamoFD-0.5G 的 AR 虚拟试妆系统实现
引言
网购口红常因色差困扰用户。传统方式依赖想象或他人试色,难以匹配个人肤色唇形。利用 DamoFD-0.5G 构建的 AR 虚拟试妆系统,能通过手机摄像头实时检测人脸并叠加彩妆效果,直观展示上妆结果。这不仅优化购物体验,也降低了品牌营销成本。下文将拆解如何利用该模型搭建高精度试妆流程。
DamoFD-0.5G 技术优势
达摩院推出的 DamoFD-0.5G 是轻量级人脸检测模型,计算量仅 0.5G,却在 WiderFace hard 集达到 71.03% 精度,优于同级模型。其核心输出包含人脸边界框及五个关键点(双眼、鼻尖、双嘴角),这是妆容定位的基础。相比重型模型,它更适合移动端实时运行,无需服务器支持即可在普通手机上流畅体验。
AR 虚拟试妆核心技术
人脸检测与关键点定位
视频流中的人脸检测是第一步。调用 DamoFD-0.5G 接口可快速获取位置信息:
import cv2
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
# 初始化人脸检测 Pipeline
face_detection = pipeline(
task=Tasks.face_detection,
model='damo/cv_ddsar_face-detection_iclr23-damofd'
)
def process_frame(frame):
result = face_detection(frame)
return result['boxes'], result['keypoints']
返回的坐标和关键点顺序通常为左眼、右眼、鼻尖、左嘴角、右嘴角,后续纹理映射将依赖这些点。
妆容纹理映射
确定关键点后,需将妆容贴图变形贴合面部。这里涉及仿射变换原理:
import numpy as np
def apply_lipstick(texture, keypoints, frame):
# 提取嘴唇区域关键点
left_lip = keypoints[3]
right_lip = keypoints[4]
# 计算嘴唇尺寸比例
lip_width = np.linalg.norm(right_lip - left_lip)
lip_height = lip_width * 0.5
# 定义源点与目标点
src_points = np.array([[0, 0], [texture.shape[1], 0], [texture.shape[1], texture.shape[]]], dtype=np.float32)
dst_points = np.array([left_lip, right_lip, [right_lip[], right_lip[] + lip_height]], dtype=np.float32)
matrix = cv2.getAffineTransform(src_points, dst_points)
warped_texture = cv2.warpAffine(texture, matrix, (frame.shape[], frame.shape[]))
alpha = warped_texture[:, :, ] /
c ():
frame[:, :, c] = ( - alpha) * frame[:, :, c] + alpha * warped_texture[:, :, c]
frame

