乐于分享
好东西不私藏

AI完成多个3D虚拟人表情唇形迁移的深入探索(一)

AI完成多个3D虚拟人表情唇形迁移的深入探索(一)
之前花大量文章介绍过我们的3D数字人表情唇形同步目前有两大方案,一个是骨骼绑定动画,一个是用音素驱动52个ARKIT形态键来完成。但无论是骨骼绑定还是制作形态键,每次有新的模型都需要花大量的时间去绑定、雕刻、修改,成本非常高,因此急需AI来完成这个繁琐的操作过程。我们的目标是制作一个标准的面部骨骼和标准的52个形态键的头部。然后如果有新的人物模型,我们就用AI识别面部特征,把骨骼或者形态键一键迁移到新的人物模型上,这样就大大节省了制作成本。
前面文章提到过,目前我们已经探索出一条通过AI完成从图片到建模、重新布线、重新贴图到骨骼绑定、制作自定义动画等系列流程,整个过程仅需半天时间完成。现在唯一的优化点就是面部表情这块。在国外大神的启发下,我们准备解决这个问题。
已关注
关注
重播 分享
做之前先看两个案例:
1. 用骨骼来驱动表情的案例效果:(vibe-human)
已关注
关注
重播 分享
  • 面部表情系统
    预定义了多种情绪(Neutral、Smile、Angry、Sad、Surprised、Disgusted、Fearful),每个情绪通过精确的骨骼位移(position/worldPosition)和旋转(rotation)数据实现。支持强度(intensity)调节(0-1)。
  • 骨骼变形与调试
    加载人物模型(带变形骨骼),支持骨骼可视化(showBones)、点击选中骨骼查看调试信息(位置、rest pose、delta 等)。
  • 眼部与头部注视
    Eye Look(眼睛跟随目标)和 Focus Lock(头部/颈部跟随 + 眼睛锁定),实现自然的注视行为。
  • 其他交互
    • Wireframe 模式。
    • Transform Controls(可拖拽变换模型)。
    • FOV 调节、OrbitControls。
    • 实时 lerp 动画平滑过渡。
2. 用Blendshapes驱动表情的案例效果:(TalkingHead
已关注
关注
重播 分享

实时唇同步(lip-sync)、表情、头部/眼睛动作和姿势控制

模型必须兼容 Mixamo rig(骨骼结构)和包含 ARKit + Oculus viseme blend shapes(混合形状,用于唇部变形)。

  • 唇同步(Lip-Sync)机制
    • Viseme 驱动
      使用 Oculus/ARKit 标准的 viseme(视觉音素,如 sil、PP、FF、TH 等,通常 15 个左右)。Viseme 是嘴型形状,对应音素组。
    • 内置语言模块
      (lipsync-*.mjs):针对英语(en)、德语(de)、法语(fr)、芬兰语(fi)、立陶宛语(lt)等。每个模块包含文本 → phoneme(音素)→ viseme 的映射规则,根据单词/音素生成时间序列(visemes、times、durations)。
    • Google TTS 集成
      默认使用 Google Cloud TTS(需支持 SSML <mark> 标签获取 word-level timestamps)。TTS 返回音频 + 时间戳 → 语言模块转换为 viseme 序列 → 实时驱动 blend shapes。
    • speakText
      文本 → TTS 生成音频 + 时间戳 → 唇同步队列处理。
    • speakAudio
      支持外部音频 + 手动提供 words/wtimes/visemes 等元数据,实现任意音频驱动唇同步(如 MP3 + Whisper 转录)。
    • 实时平滑
      使用 Web Audio API(AudioContext、GainNode)、Animation Mixer 和 lerp 插值实现自然过渡。支持 trim(调整 viseme 起始/结束偏移)。
  • 动画与表情系统
    • Blend Shapes
      直接修改 Oculus/ARKit morph targets 实现唇部、眼睛、眉毛等。
    • 骨骼动画
      Mixamo FBX 动画播放、姿势(pose)、手势(gesture,如 thumbup、shrug)。
    • Dynamic Bones + Physics
      dynamicbones.mjs 支持头发、衣服等物理模拟(动态骨骼)。
    • Idle / Speaking 行为
      随机微动作(头部移动、眼神接触比例可调)、情绪(mood:neutral、happy、angry 等)映射到 blend shapes。
    • Eye / Head Tracking
      lookAt、makeEyeContact 等方法控制注视方向。
  • 内置/默认TTS
    Google Cloud TTS(推荐支持 SSML <mark> 的声音,如 Standard/Wavenet/Neural2)。提供 word-level timestamps,便于 viseme 生成。支持多语言,通过代理/JWT/Apikey 配置。
  • 外部 TTS(推荐生产使用)
    • ElevenLabs WebSocket API
      实时流式,支持高质量声音。
    • Microsoft Azure Speech SDK
      直接输出 viseme 或 blend shapes,支持 100+ 语言,无需额外 lipsync 模块。
    • HeadTTS
      (官方 add-on):完全浏览器内运行的免费开源 TTS(基于 Kokoro/StyleTTS 2 等神经声音),提供 phoneme-level timestamps + viseme IDs。WebGPU 支持,无 API 费用。
  • 其他集成
    • OpenAI、Gemini、Grok 等 LLM 生成文本 → 任意 TTS。
    • HeadAudio
      (官方 add-on):纯音频驱动唇同步(Audio Worklet + MFCC 特征提取),无需文本/时间戳,适用于任何音频流(实时 speech-to-speech)。
    • 本地/自建:Whisper 转录 + 本地 TTS 等。
上面两个案例一个是用骨骼做表情,一个是用BS做表情,各有优劣。接下来准备基于下面思路来迁移骨骼和BS。
迁移BS:
将 ARKit blendshapes 从一个任意的人形网格转移到另一个网格上——无需手动放置地标或权重绘制。

在底层,它使用 Sapiens2 模型来预测顶点组,这些顶点组作为两个网格之间的对应关系,然后我们使用 变形转移(deformation transfer) 将 blendshapes 从一个网格重新映射到另一个。然后做逆向的面部骨骼绑定

实现思路(针对 Blender 插件,将 52 个 ARKit BS 复制/转移到另一个没有 BS 的 Mesh)

这个工具的核心是无监督/半自动的 blendshape 转移,特别适合将一个已有 ARKit 52 个 blendshape 的标准面部网格(source)转移到另一个拓扑不同的人形面部网格(target)上。你可以用 Python + Blender API 来实现类似插件。

1. 核心流程(基于原帖描述)

  1. 建立顶点/面片对应关系(Correspondences)
    • 使用 Sapiens2(Meta 的高分辨率人体视觉模型)预测 vertex groups 或 dense correspondences(如 body-part segmentation、normals、pointmap)。
    • Sapiens2 可以输出高精度的语义分割和几何预测,帮助在两个拓扑不同的网格上找到“眼睛对应眼睛、嘴巴对应嘴巴”等区域,即使顶点数量和连接方式完全不同。
  2. 变形转移(Deformation Transfer)
    • Deformation Gradient Transfer(Sumner & Popović 等经典论文)。
    • 优化求解每个对应三角面的线性变换。
    • 经典技术:对于 source 的每个 blendshape(相对 neutral 的变形),计算 deformation gradients(仿射变换:旋转+缩放+剪切 + 平移),然后应用到 target 网格上对应的三角面。
    • 最小化源和目标变形之间的差异,同时保持 target 网格的局部形状(local detail preservation)。
    • 常见数学方法:
  3. 生成 target 的 52 个 Blendshapes
    • 对 source 的每个 ARKit BS,应用转移后得到 target 的对应形状键(Shape Key)。
    • 结果:target 网格获得 52 个命名正确的 Shape Keys,可直接用于 ARKit / Live Link Face 驱动。

2. 在 Blender 中如何实现(实用建议)

前提准备:

  • Source 网格:已有 52 个 ARKit Shape Keys(标准命名,如 eyeBlinkLeft、mouthSmileRight 等)。
  • Target 网格:只有 neutral 基础形状,人形面部拓扑(不一定相同顶点数)。

实现步骤(插件架构):

步骤 1:开发 Blender 插件基础 UI 和数据读取

你需要创建一个侧边栏面板,让用户选择“源模型”和“目标模型”。

codePython

import bpyclassVIEW3D_PT_BSTransfer(bpy.types.Panel):    bl_space_type = 'VIEW_3D'    bl_region_type = 'UI'    bl_category = "AI BS Transfer"    bl_label = "Blendshape Transfer"defdraw(self, context):        layout = self.layout        scene = context.scene        layout.prop_search(scene, "source_mesh", scene, "objects", text="Source")        layout.prop_search(scene, "target_mesh", scene, "objects", text="Target")        layout.operator("object.transfer_bs", text="Transfer Blendshapes")

步骤 2:使用 AI 获取特征对齐点 (Sapiens2 / MediaPipe)

难点:AI 视觉模型通常处理的是 2D 图像,而不是 3D Mesh。工程实现方法

  1. 在代码中自动在正前方创建一个正交摄像机(Orthographic Camera)。

  2. 渲染源模型和目标模型的前视图深度图或法线图。

  3. 将图像送入 AI 模型(例如 MediaPipe Face Mesh 可输出 468 个面部特征点)。

  4. 反向投影 (Raycast):将 2D 特征点通过摄像机射线打回到 3D Mesh 上,获取对应的 3D 坐标和顶点 ID。

步骤 3:核心算法 - 形变传递 (Deformation Transfer)

如果严格按照图形学论文《Deformation Transfer for Triangle Meshes (SIGGRAPH 2004)》实现,需要解拉普拉斯方程。但为了在 Python 中快速实现,径向基函数插值 (RBF Interpolation) 是一种非常有效且容易用 SciPy 实现的替代方案:

你可以根据两组特征点的对应关系,使用 RBF 构建一个空间变形场。

codePython

import numpy as npfrom scipy.interpolate import RBFInterpolatordefcalculate_deformation(source_base_verts, target_base_verts, source_shape_verts):# 1. 计算源模型当前Shape Key的顶点位移 (Delta)    delta_source = source_shape_verts - source_base_verts# 2. 使用特征点建立 RBF 插值函数# 注意:这里为了简化,假设已经做好了粗略的顶点对应。# 实际工程中,这里传入的应该是 AI 识别到的关键点对应的坐标。    rbf = RBFInterpolator(source_landmarks, delta_source_landmarks, kernel='thin_plate_spline')# 3. 将目标模型的所有顶点送入变形场,预测它们的位移    delta_target = rbf(target_base_verts)# 4. 计算出目标模型新Shape Key的顶点绝对坐标    target_shape_verts = target_base_verts + delta_targetreturn target_shape_verts

步骤 4:将计算结果写回 Blender Shape Keys

遍历源模型的 52 个形态键,计算变形后,利用 Blender API 创建目标模型的形态键。

codePython

defapply_shape_keys(source_obj, target_obj):# 确保目标模型有 Basis 形态键ifnot target_obj.data.shape_keys:        target_obj.shape_key_add(name="Basis")    target_verts = np.array([v.co for v in target_obj.data.vertices])# 遍历源模型的所有形态键for sk in source_obj.data.shape_keys.key_blocks:if sk.name == "Basis":continue# 获取源模型的形变坐标        source_sk_verts = np.array([v.co for v in sk.data])# --- 在这里调用 步骤3 的机器学习/插值算法 ---# new_target_verts = run_ai_deformation_transfer(source_obj, target_obj, source_sk_verts)        new_target_verts = ... # 在目标模型上创建新的形态键        new_sk = target_obj.shape_key_add(name=sk.name)# 将新坐标写入目标形态键for i, vert inenumerate(new_target_verts):            new_sk.data[i].co = vert
  1. 后续优化(下一步骨骼绑定)
    • 生成 BS 后,可进一步提取骨骼 rig(自动放置 jaw/eye/lip bones,根据 landmarks 或预测的 vertex groups)。
    • 支持 corrective shape keys 解决穿模/ artifact。

3. 现有 Blender 资源可参考/复用

  • ARKit Blendshape Helper 等插件(自动添加 52 个 Shape Keys)。
  • ShapeKeyGen Pro 等工具(一键生成 ARKit BS)。
迁移骨骼:

在Blender中,将一个已有的面部骨骼(Armature)和绑定(Rigging)转移到一个全新的、没有绑定的头部模型上,是角色制作中非常常见的操作。

由于两个头部的长相、大小和拓扑(布线)通常不一样,你不能直接“生搬硬套”。标准的行业工作流分为三步:对齐网格 -> 调整骨骼位置 -> 传递顶点权重(Weight Transfer)


准备工作:位置重合

将“源头部(有骨骼的)”和“目标头部(无骨骼的)”放在同一个场景中。

缩放并移动目标头部,使其大小和位置尽可能与源头部完全重合(眼睛对眼睛,下巴对下巴)。


第一步:适配骨骼到新脸庞

因为两张脸的长相不同,你需要把骨骼的位置稍微挪一挪,匹配新脸的五官。

1.复制骨架:为了不破坏原文件,选中源模型的骨架(Armature),按 Shift + D 复制一份,作为目标头部的新骨架。

2.显示在最前:选中这个新骨架,在右侧属性面板的 “物体数据属性(绿色小人图标)” -> “视图显示 (Viewport Display)” 中,勾选 “在最前 (In Front)”,这样你能看清骨骼。

3.调整骨骼位置

选择新骨架,按 Tab 进入 “编辑模式 (Edit Mode)”

打开 “X轴对称”(在视口右上角的蝴蝶图标,或者按 N 侧边栏的 Tool 里勾选 X-Axis Mirror)。

手动拖拽骨骼的节点,使其贴合目标头部的五官(比如把下颌骨对准新下巴,眼球骨对准新眼球的中心,嘴唇骨移到新嘴唇的边缘)。


第二步:传递权重(最核心的一步)

这一步是把旧模型上的“哪根骨头控制哪块肉”的信息,自动映射给新模型。即使两个头部的布线(拓扑)完全不同,Blender也能通过空间位置“猜”出来。

添加修改器

  1. 在 物体模式 (Object Mode) 下。

  2. 只选中你的目标头部(那个没有骨骼的新Mesh)。

  3. 去右侧属性面板,点击 “修改器属性”(蓝色的扳手图标)

  4. 点击“添加修改器 (Add Modifier)”,在列表中找到并添加 “数据传递 (Data Transfer)”。(在 Blender 4.0+ 中,它可能在 编辑 (Edit) 分类下)。

设置参数(跟着填即可)在添加好的“数据传递”修改器面板中,进行以下设置:

  1. 源物体 (Source):用吸管吸取(或在下拉菜单选择)你的 源头部(旧模型)

  2. 勾选 顶点数据 (Vertex Data)

  3. 展开“顶点数据”的折叠菜单,勾选里面的 顶点组 (Vertex Groups)

  4. 在下方的 映射 (Mapping) 选项中,点击下拉菜单,选择 “最近面插值 (Nearest Face Interpolated)”。(这一步很关键,能保证不同布线的模型传递准确)。

第 3 步:生成并应用

  1. 在修改器面板的底部,点击那个长长的按钮:生成数据层 (Generate Data Layers)(点击后貌似没发生什么,但其实内部数据已经传过去了)

  2. 确认无误后,应用 (Apply) 这个修改器。(鼠标放在修改器上按快捷键 Ctrl + A,或者点击修改器名称旁边的小箭头选择“应用”)。

完成这一步后,新模型的数据面板里(绿色三角图标 -> 顶点组 Vertex Groups),就会自动生成所有骨骼的名字和权重数据!


第三步:将新模型绑定到新骨架

现在新模型已经有了权重,我们只需要把它和刚才调整好的新骨架“连”起来。

1.回到 “物体模式 (Object Mode)”

2.先选中 目标头部模型(新Mesh)

3.按住 Shift 键,选中刚才调好位置的 新骨架 (Armature)

4.按下快捷键 Ctrl + P 打开父级菜单。

5.选择 “骨架形变 (Armature Deform)”

(⚠️警告:千万不要选“带自动权重”,因为我们已经在第二步精确传递了旧模型的权重!选第一项普通的骨架形变即可)


第四步:检查与修补

现在,你的新头部已经被骨骼驱动了!你可以选中骨架,进入 “姿态模式 (Pose Mode)”,旋转下巴、眼睛的骨骼,看看新脸是否跟着动。

常见问题与修补建议

嘴唇内部粘连/拉扯:因为面部传递是基于空间距离的,如果新旧模型的嘴唇厚度不同,上下嘴唇的权重可能会互相串门(比如张嘴时下嘴唇拉扯上嘴唇)。

如何修复:选中新模型进入 “权重绘制模式 (Weight Paint)”,在右侧的“顶点组”里找到上下嘴唇的骨骼名字,使用左侧工具栏的 “减淡/相减 (Subtract)” 画笔,把错误粘连部位的权重擦除掉。

眼睛/牙齿不跟着动:眼睛和牙齿属于刚体,通常不需要平滑过渡的权重。建议进入编辑模式,全选眼球顶点,在右侧顶点组里找到对应的眼球骨骼,点击 “指定 (Assign)” 权重为 1.0。

通过这套流程,你可以把任何优秀的骨骼绑定系统(例如Rigify面部、Auto-Rig Pro或者你自己做的骨架)移植到无数个不同的角色头上,而不需要每次都从零开始刷权重!

写在最后
这个实现后将对目前的3D数字人流程进一步简化,直接让我们的模型师解放双手。有对这个项目感兴趣的欢迎评论区交流,项目的开发速度完全来自大家互动的动力。
如何联系我们?
公众号后台私信我们。如果后台在1天内没有回复,就可能被系统屏蔽了,想添加我们微信的,可以加入知识星球获取微信号和体验群进一步沟通。
关于作者
做一只爬的最久的乌龟,保持学习保持好奇,即使慢一点,遇到一点困难,只要最后能到达终点,又有什么关系呢。
毕竟人生没有白走的路,每一步都算数。

https://vibe-stack.github.io/vibe-human/

https://github.com/vibe-stack/vibe-human
https://github.com/met4citizen/TalkingHead/
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-05-09 05:46:42 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/588974.html
  2. 运行时间 : 0.110360s [ 吞吐率:9.06req/s ] 内存消耗:4,755.92kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=73229fb2cd13ceb4df64e779ca657c38
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000501s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000726s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000400s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000328s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000707s ]
  6. SELECT * FROM `set` [ RunTime:0.000200s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000593s ]
  8. SELECT * FROM `article` WHERE `id` = 588974 LIMIT 1 [ RunTime:0.005677s ]
  9. UPDATE `article` SET `lasttime` = 1778276802 WHERE `id` = 588974 [ RunTime:0.003001s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000260s ]
  11. SELECT * FROM `article` WHERE `id` < 588974 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000439s ]
  12. SELECT * FROM `article` WHERE `id` > 588974 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000410s ]
  13. SELECT * FROM `article` WHERE `id` < 588974 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000920s ]
  14. SELECT * FROM `article` WHERE `id` < 588974 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.012198s ]
  15. SELECT * FROM `article` WHERE `id` < 588974 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003893s ]
0.112876s