尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LivePortrait 肖像重定向(Retargeting)实战指南:用 eyes-open / lip-open 滑块实时编辑人像

LivePortrait 肖像重定向(Retargeting)实战指南:用 eyes-open / lip-open 滑块实时编辑人像 LivePortrait 肖像重定向Retargeting实战指南用 eyes-open / lip-open 滑块实时编辑人像【免费下载链接】LivePortraitBring portraits to life!项目地址: https://gitcode.com/GitHub_Trending/li/LivePortraitLivePortrait 的 Gradio 交互界面内置了一套**肖像重定向Retargeting与精修Precise Portrait Editing**能力上传一张源肖像后系统会自动计算其eyes-open ratio眼睛睁开程度与lip-open ratio嘴唇张开程度你只需拖动滑块即可实时看到人像被编辑后的效果。本指南以仓库中的 assets/gradio/gradio_description_retargeting.md 为骨架结合 app.py、src/gradio_pipeline.py、src/utils/retargeting_utils.py 等源码带你完整掌握该功能的使用方法、全部滑块参数与底层实现原理。一、什么是“重定向”在 LivePortrait 中重定向Retargeting指的不是用一段驱动视频去“驱动”源人像而是直接通过数值控制源人像的局部运动眼睛重定向调整目标eyes-open ratio00.8控制双眼睁开的程度嘴唇重定向调整目标lip-open ratio00.8控制嘴唇张开的程度头部姿态编辑调整相对 pitch / yaw / roll 以及 x / y / z 轴平移控制头部转向与位置表情精修通过 smile、wink、eyebrow、lip variation 等滑块微调局部肌肉表情并支持实时预览。与视频驱动动画不同重定向不需要外部驱动素材它作用于人脸关键点landmark之间的几何比例再由 LivePortrait 的生成网络把编辑后的关键点“渲染”回人像。因此你可以把重定向理解为“对人像的数字雕刻”改一个数值人脸立即跟着变。界面描述文档给出了一条有趣的验证建议将 eyes-open 与 lip-open 两个目标比率同时设为 0.8观察源人像会发生什么——眼睛会被撑到最大、嘴巴张大直观展示出这两个滑块的强大控制力。二、界面工作流从上传到实时预览根据 assets/gradio/gradio_description_retargeting.md 的描述图像重定向的完整操作流程为上传源肖像在 “Retargeting Image Input” 区域上传一张单人像图片可点击示例图一键填充示例位于 assets/examples/source自动计算初始值上传瞬间系统自动检测人脸关键点并据此算出该人像当前的eyes-open ratio与lip-open ratio同步回填到两个滑块上对应源码 init_retargeting_image拖动滑块移动任意滑块编辑结果实时刷新到 “Retargeting Result” 与 “Paste-back Result” 两个输出框中随时重置点击 Reset按钮将所有滑块恢复默认值对应 app.py 中reset_sliders的返回值所有姿态/表情滑块归零mov_z回到 1.0crop scale回到 2.5stitching 与 do crop 回到 True清空点击 Clear清空输入与输出。在 app.py 中可以看到实时预览的实现方式15 个滑块眼睛比率、嘴唇比率、pitch、yaw、roll、mov_x/y/z、四组 lip variation、smile、wink、eyebrow、eyeball_direction_x/y的change事件全部绑定到execute_image_retargeting每次滑动都会触发一次重新生成并更新两个输出图。注意代码注释提示 gradio 4.0.0 可能导致响应变慢见 app.py若遇到卡顿可留意 Gradio 版本。三、图像重定向滑块参数全解析以下是 app.py 中定义的全部重定向相关控件及其取值范围Gradio 组件参数即真实约束控件label类型取值范围默认值步长语义target eyes-open ratioSlider0 ~ 0.8随源人像自动计算0.01目标眼睛睁开程度target lip-open ratioSlider0 ~ 0.8随源人像自动计算0.01目标嘴唇张开程度crop scaleretargetingNumber1.8 ~ 3.22.50.05源人像裁剪缩放越大脸占比越小relative pitchSlider-15.0 ~ 15.001头部相对俯仰角度relative yawSlider-25 ~ 2501头部相对偏航角度relative rollSlider-15.0 ~ 15.001头部相对翻滚角度x-axis movementSlider-0.19 ~ 0.190.00.01头部 x 轴平移y-axis movementSlider-0.19 ~ 0.190.00.01头部 y 轴平移z-axis movementSlider0.9 ~ 1.21.00.01头部 z 轴前后缩放poutinglip_variation_zeroSlider-0.09 ~ 0.0900.01噘嘴幅度pursing lip_variation_oneSlider-20.0 ~ 15.000.01抿嘴幅度grin lip_variation_twoSlider0.0 ~ 15.000.01咧嘴幅度lip close - openlip_variation_threeSlider-90.0 ~ 120.001.0嘴唇闭合↔张开的双向调节smile Slider-0.3 ~ 1.300.01微笑幅度wink Slider0 ~ 3900.01眨眼幅度eyebrow Slider-30 ~ 3000.01眉毛幅度eye gaze (horizontal) Slider-30.0 ~ 30.000.01眼球水平方向eye gaze (vertical) Slider-63.0 ~ 63.000.01眼球垂直方向stitchingCheckbox-True-是否启用拼接模块do crop (source)Checkbox-True-是否先裁剪人脸到裁剪空间3.1 自动计算初始比率上传人像后init_retargeting_image 会执行以max_dim1280加载图片并裁剪人脸crop_source_image见 src/utils/cropper.py调用calc_eye_close_ratio/calc_lip_close_ratio计算当前人像的眼睛/嘴唇比率四舍五入到两位小数后写回滑块若未检测到人脸则抛出Source portrait NO face detected错误提示。这套自动回填让滑块始终以“源人像当前状态”为基准拖到 0 表示完全闭眼/闭嘴拖到 0.8 表示最大程度睁眼/张嘴因此文档中“都设为 0.8”的实验能产生最夸张的编辑效果。3.2 比率背后的几何定义所谓eyes-open ratio与lip-open ratio本质是人脸关键点landmark距离的比值定义在 src/utils/retargeting_utils.pydef calculate_distance_ratio(lmk, idx1, idx2, idx3, idx4, eps1e-6): return (np.linalg.norm(lmk[:, idx1] - lmk[:, idx2], axis1, keepdimsTrue) / (np.linalg.norm(lmk[:, idx3] - lmk[:, idx4], axis1, keepdimsTrue) eps)) def calc_eye_close_ratio(lmk, target_eye_ratioNone): lefteye_close_ratio calculate_distance_ratio(lmk, 6, 18, 0, 12) # 左眼上下眼睑/眼角距离 righteye_close_ratio calculate_distance_ratio(lmk, 30, 42, 24, 36) # 右眼上下眼睑/眼角距离 ... def calc_lip_close_ratio(lmk): return calculate_distance_ratio(lmk, 90, 102, 48, 66) # 上下嘴唇中点/嘴角距离眼睛比率 眼睑开合距离 / 眼角横向跨度左右眼各一个值嘴唇比率 上下唇中点的纵向距离 / 左右嘴角的横向跨度分母加入eps1e-6防止除零。比值越大表示越“张开”0 即完全闭合——这也是lip-open ratio 0能实现“闭嘴”效果的几何基础。3.3 从比率到关键点位移重定向模块单纯改变比率并不会直接渲染出人像关键一步是把目标比率交给重定向网络换算成关键点位移deltacalc_combined_eye_ratio拼接[源人像眼睛比率, 目标眼睛比率]得到 1×3 向量calc_combined_lip_ratio拼接[源人像嘴唇比率, 目标嘴唇比率]得到 1×2 向量retarget_eye 与 retarget_lip将“源关键点 组合比率”送入stitching_retargeting_module[eye]/[lip]两个子网络输出关键点位移delta形状为 B×N×3。这两个子网络与拼接模块共用同一个权重文件 pretrained_weights/liveportrait/retargeting_models/stitching_retargeting_module.pth其网络结构为简单的 MLPLinear ReLU见 src/modules/stitching_retargeting_network.py。之所以需要独立的眼睛/嘴唇重定向子网络是为了解决跨身份驱动时“小眼睛驱动大眼睛导致闭眼不彻底”等问题模块注释见 stitching_retargeting_network.py。3.4 从位移到图像一次重定向的完整数据流execute_image_retargeting 完整展示了单图重定向的流水线预处理prepare_retargeting_image读取图片 → 可选裁剪 →prepare_source归一化 → 用 motion_extractorM提取pitch/yaw/roll/exp/scale/t/kp见 get_kp_info→ 用外观特征提取器F提取 3D 特征f_s→ 用get_rotation_matrix构造源姿态旋转矩阵R_s姿态编辑R_d R(源pitchΔpitch, 源yawΔyaw, 源rollΔroll)最终目标关键点按经典公式合成x_d_new mov_z * scale_new * (x_c_s R_d_new delta_new) t_new见 gradio_pipeline.py即“缩放 ×旋转关键点 表情增量 平移”表情增量叠加依次按非零条件调用update_delta_new_smile / _wink / _eyebrow / _lip_variation_* / _mov_x / _mov_y / _eyeball_directiongradio_pipeline.py这些函数对 motion_extractor 输出的表情基expB×N×3中特定关键点索引如 11/15 为眼周、14/17 为唇周、5 为鼻尖等叠加经验系数微调眼睛/嘴唇比率重定向若目标比率 ≠ 源比率分别调用retarget_eye/retarget_lip得到eyes_delta/lip_delta并叠加到x_d_new拼接stitching若勾选调用 stitching 修正关键点消除裁剪空间与原始图像空间的错位渲染warp_decode 依次经过 warping_moduleW与 spade_generatorG生成图像parse_output转回 uint8 输出贴回原图paste-back若勾选do crop用paste_back与mask_ori将结果贴回原图空间否则直接输出裁剪空间的编辑结果。两个输出框的含义由此而来“Retargeting Result” 为裁剪空间的编辑结果“Paste-back Result” 为贴回原图的结果。四、视频重定向批量修嘴唇除单张图像外界面还提供Retargeting Video板块界面说明见 assets/gradio/gradio_description_retargeting_video.md用于对源视频逐帧统一修改嘴唇张开程度对应实现 execute_video_retargeting上传源视频后prepare_retargeting_video 逐帧计算每个源帧的lip_delta并用 smooth输入driving_smooth_observation_variance_retargeting做时序平滑避免帧间抖动主循环对每帧执行x_d_new x_s lip_delta→stitching→warp_decode→parse_output输出两个文件{视频名}_retargeting.mp4结果与{视频名}_retargeting_concat.mp4源帧/结果并排对比若源视频带音轨会自动保留音频add_audio_to_video。视频重定向的控件app.py控件类型取值范围默认值语义crop scalevideoNumber1.8 ~ 3.22.3视频帧裁剪缩放target lip-open ratioSlider0 ~ 0.8-目标嘴唇张开程度motion smooth strengthNumber1e-11 ~ 1e-23e-6帧间平滑强度越大越平滑但可能损失精度keeping the lip silentCheckbox-False勾选后走 prepare_video_lip_silence 分支将嘴唇强制闭合使用inference_cfg.lip_array模板并保留眼睛区域运动实现“闭嘴”效果对应视频版说明文档的实验建议是将 target lip-open ratio 设为 0观察人像嘴唇被完全闭合的效果。五、命令行启动与配置Gradio 界面入口为 app.py启动前请确保已安装 FFmpeg脚本启动时会先做ffmpeg -version检查见 app.py并已按 assets/docs/how-to-install-ffmpeg.md 完成依赖安装与模型下载# 默认 127.0.0.1:8890 启动 python app.py # 指定端口、共享链接 python app.py --server_port 7860 --share启动参数由 tyro 解析定义于 src/config/argument_config.py如-p/--server_port、--share、--flag_force_cpu、--flag_use_half_precision、--scale等。若想关闭半精度推理某些 GPU 可能出现黑块可传--flag_use_half_precision False参数注释见 argument_config.py。重定向相关的一些底层推理参数位于 src/config/inference_config.pyflag_stitching默认 True、flag_lip_retargeting/flag_eye_retargeting默认 False注释标注为 WIP 不建议开启、lip_normalize_threshold0.03等。裁剪参数scale、vx_ratio、vy_ratio、dsize512位于 src/config/crop_config.py。六、实践要点与限制先裁剪再编辑默认do crop (source)为 True即先裁剪出人脸再重定向效果更稳定关闭后系统会对整图直接重定向flag_do_crop_input_retargeting_imageFalse见 execute_image_retargetingstitching 按需开关头部姿态变化小时建议保持 stitchingTrue参考 argument_config.py 的说明头部运动大时或动物源图可考虑关闭实时预览的代价滑块每次change都会触发一次完整推理追求实时性时可优先拖动单组滑块观察或使用 Reset快速复位对比注意输入约束重定向要求源图单人脸且可检测到人脸否则会抛出错误提示比率滑块的物理上限 0.8 与几何定义开合距离/跨度比值相匹配超出范围会导致不自然形变因此界面将其限制在 00.8视频重定向的两个分支默认分支按目标比率重定向嘴唇勾选 “keeping the lip silent” 后则强制闭唇模板lip_array加载自 src/utils/resources。通过以上界面操作与源码级原理解读你可以把 LivePortrait 的重定向能力用在人像微调、口型修正、表情素材批处理等场景中——核心始终是“改一个比率值让模型替你把关键点运动补齐”。【免费下载链接】LivePortraitBring portraits to life!项目地址: https://gitcode.com/GitHub_Trending/li/LivePortrait创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表