基于 DamoFD-0.5G 的 AR 虚拟试妆系统
1. 引言
网购口红时,最头疼的就是色差问题。每个人的肤色、唇形不同,网上的试色图往往参考性有限。
引入基于 DamoFD-0.5G 的 AR 虚拟试妆系统后,这个问题迎刃而解。只需调用手机摄像头,系统实时检测人脸并精准定位五官,即可将口红、眼影等彩妆效果叠加到用户脸上。这不仅让购物体验更直观,也大幅节省了线下试妆时间,对提升电商转化率很有帮助。
今天我们就来聊聊如何利用 DamoFD-0.5G 这个轻量级模型,构建一个高精度的 AR 试妆方案。
2. DamoFD-0.5G 的技术优势
DamoFD-0.5G 是达摩院推出的一款轻量级人脸检测模型,计算量仅 0.5G,精度却相当出色。在 WiderFace 数据集的 hard 集上,其精度达到 71.03%,优于同级别模型约 2.5 个百分点。
该模型不仅能输出人脸边界框,还能同时返回五个关键点(双眼、鼻尖、双嘴角)。这五个点是后续妆容叠加的基础,定义了面部特征位置。相比重型模型,它的轻量化设计更适合移动端运行,无需依赖强大服务器,普通智能手机即可流畅体验。
3. AR 虚拟试妆的核心技术
3.1 人脸检测与关键点定位
第一步是实时捕捉视频流中的人脸。利用 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']
这段逻辑会返回每个人脸的边界框坐标和五个关键点。通常顺序为:左眼、右眼、鼻尖、左嘴角、右嘴角。拿到这些数据后,我们就能确定妆容应该贴在哪里。
3.2 妆容纹理映射
有了关键点,下一步是将妆容纹理准确映射到对应区域。这里需要用到计算机图形学的透视变换知识:
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([[, ], [texture.shape[], ], [texture.shape[], 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

