数字人:试用FACEGOOD-Audio2Face的不愉快经历

说明

最近对数字人的相关技术感兴趣,所以找了一个国内开源的语音驱动嘴型的方案试用了下。最后试用下来,感觉这家公司还是想推广自己的方案,开源的东西不完整,没法生成ARKit的blendshapes权重用于自己的模型。

介绍

就像名字中的那样,这其实是一个Audio2Face。主要就是将语音转口型的一个算法,内含了tensorflow的预训练模型,也提供了训练代码。但是该方案还包含了ASR和TTS的流程,包含了一整个问答的流程。中间只缺了连gpt生成内容的部分,这部分代码可以自己加。整体框图如下:

在这里插入图片描述
上图ASR和TTS之间插入调用大预言模型的代码。不加的话会比较奇怪,自己识别后又TTS。

Audio2Face模型

这个开源方案包含了一个预训练的模型,可以将语音生成口型的权重。facegood的权重是116维的,不是ARKit的52维。开源方案提供的模型输出的并不是全部的116维权重,而是其中37个,主要是嘴巴相关的权重。

数据处理流程:

  1. 将语音切片,按照fps每一帧动画都切成一段,帧数为frames。
  2. 用LPC处理每一帧数据切片,生成数据形状为(frames, 32, 64, 1)
  3. 将LPC的输出送入网络,输出数据形状是(frames, 37)

如何将网络输出转换为ARKit的权重

先说结论:代码里提供了转换方法,但是没法用。
上面说了,模型输出的权重是37维数据,这37维是116维数据的子集。

facegood的116维数据如下:

"brow_lower_l",
"tongue_Scale__X",
"tongue_Scale_Y",
"tongue_Scale__Y",
"tongue_Scale_Z",
"tongue_Scale__Z",
"nose_out_l",
"nose_out_r",
"tongue_u",
"tongue_u_u",
"brow_raise_d",
"cheek_suck_r",
"mouth_stretch_u",
"tongue_u_d",
"tooth_d_d",
"tongue_d",
"tooth_r",
"tooth_d_u",
"cheek_UP",
"eye_blink1_l",
"eye_blink1_r",
"eye_blink2_l",
"eye_blink2_r",
"eye_lidTight_l",
"eye_lidTight_r",
"eye_shutTight_l",
"eye_shutTight_r",
"brow_lower_r",
"eye_upperLidRaise_l",
"eye_upperLidRaise_r",
"eye_downLidRaise_l",
"eye_downLidRaise_r",
"jaw_sideways_l",
"jaw_sideways_r",
"jaw_thrust_c",
"mouth_chew_c",
"mouth_chinRaise_d",
"mouth_chinRaise_u",
"brow_raise_c",
"mouth_dimple_l",
"mouth_dimple_r",
"mouth_funnel_dl",
"mouth_funnel_dr",
"mouth_funnel_ul",
"mouth_funnel_ur",
"mouth_lipCornerDepressFix_l",
"mouth_lipCornerDepressFix_r",
"mouth_lipCornerDepress_l",
"mouth_lipCornerDepress_r",
"brow_raise_l",
"mouth_lipCornerPullOpen_l",
"mouth_lipCornerPullOpen_r",
"mouth_lipCornerPull_l",
"mouth_lipCornerPull_r",
"mouth_lipStretchOpen_l",
"mouth_lipStretchOpen_r",
"mouth_lipStretch_l",
"mouth_lipStretch_r",
"mouth_lowerLipDepress_l",
"mouth_lowerLipDepress_r",
"brow_raise_r",
"mouth_lowerLipProtrude_c",
"mouth_oh_c",
"mouth_oo_c",
"mouth_pressFix_c",
"mouth_press_l",
"mouth_press_r",
"mouth_pucker_l",
"mouth_pucker_r",
"mouth_screamFix_c",
"mouth_sideways_l",
"cheek_puff_l",
"mouth_sideways_r",
"mouth_stretch_c",
"mouth_suck_dl",
"mouth_suck_dr",
"mouth_suck_ul",
"mouth_suck_ur",
"mouth_upperLipRaise_l",
"mouth_upperLipRaise_r",
"nose_wrinkle_l",
"nose_wrinkle_r",
"cheek_puff_r",
"tooth_l",
"eye_lookDown1_l",
"eye_lookDown2_l",
"eye_lookLeft_l",
"eye_lookRight_l",
"eye_lookUp_l",
"eye_lookDown1_r",
"eye_lookDown2_r",
"eye_lookLeft_r",
"eye_lookRight_r",
"cheek_raise_l",
"eye_lookUp_r",
"tongue_Rot_1X",
"tongue_Rot__1X",
"tongue_Rot_2X",
"tongue_Rot__2X",
"tongue_Rot_3X",
"tongue_Rot__3X",
"tongue_Rot_1Y",
"tongue_Rot__1Y",
"tongue_Rot_2Y",
"cheek_raise_r",
"tongue_Rot__2Y",
"tongue_Rot_3Y",
"tongue_Rot__3Y",
"tongue_Rot_1Z",
"tongue_Rot__1Z",
"tongue_Rot_2Z",
"tongue_Rot__2Z",
"tongue_Rot_3Z",
"tongue_Rot__3Z",
"tongue_Scale_X",
"cheek_suck_l",

代码里提供了Voice2Face_blendshape2ARkit.xlsx这个文档,说明如何转换到ARKit(下方左侧是ARKit,右侧是facegod数据),其中valid的行是有用的,Invalid的行目前无效:

在这里插入图片描述
doc\README.md这个文档中说明了模型输出的37维数据是:

{'mouth_stretch_u', 'tooth_d_d', 'tongue_d', 'tooth_r', 'eye_blink1_l', 'jaw_thrust_c', 
'mouth_dimple_l', 'mouth_funnel_dl', 'mouth_funnel_dr', 'mouth_funnel_ul', 'mouth_funnel_ur', 
'mouth_lipCornerDepressFix_l', 'mouth_lipCornerDepressFix_r', 'mouth_lipCornerPull_l', 
'mouth_lipCornerPull_r', 'mouth_lipStretchOpen_l', 'mouth_lipStretchOpen_r', 'mouth_lowerLipDepress_l',
 'mouth_lowerLipDepress_r', 'brow_raise_r', 'mouth_lowerLipProtrude_c', 'mouth_pressFix_c', 
 'mouth_press_l', 'mouth_pucker_l', 'mouth_pucker_r', 'mouth_screamFix_c', 'mouth_sideways_l', 
 'mouth_suck_dr', 'mouth_suck_ul', 'mouth_suck_ur', 'mouth_upperLipRaise_l', 'mouth_upperLipRaise_r',
  'nose_wrinkle_l', 'nose_wrinkle_r', 'cheek_puff_r', 'tooth_l', 'eye_lookDown2_l'}

可以看到转换需要的jaw_sideways_l、jaw_sideways_r、mouth_stretch_c等好几个都不在这里,所以那37个数据到底是不是doc\README.md说的那37个就不知道了。

调用代码流程

我将FACEGOOD-Audio2Face工程里的ASR和TTS去掉,写了一段代码将处理音频文件到生成权重的流程串起来了。下面的代码保存为单独的文件,放到code\test\AiSpeech\下执行就可以了。

import numpy as np
import scipy.io.wavfile as wavfile
import time

from lib.audio.api_audio import AudioRecognition, AudioPlay
from lib.tensorflow.input_wavdata_output_lpc import c_lpc, get_audio_frames
from lib.tensorflow.input_lpc_output_weight import WeightsAnimation

wav_path = "./res/xxx_00005.wav" #zisumei.wav"
save_npy_path = "./out-005.npy"

tflitepath = './best_model/Audio2Face.tflite'
model_path = './best_model/Audio2Face'
#第一次运行代码时会发现Audio2Face.tflite不存在,WeightsAnimation代码会在model_path下生成tflite格式的模型
print("------------load tflite model-------------")
start_time = time.time()
pb_weights_animation = WeightsAnimation(tflitepath, model_path)
get_weight = pb_weights_animation.get_weight
print("used time:", time.time()-start_time, "s")

#0.
print("------------load audio file-------------")
start_time = time.time()
rate,signal = wavfile.read(wav_path)
#程序默认按照采样率16Khz来生成blendshapes,这里除以16000可以得到声音的时长,单位:秒
print(f"len(signal)/16000 = {len(signal)/16000}s")
print(f"type(signal) = {type(signal)}")
print(f"signal.shape = {signal.shape}")
print("used time:", time.time()-start_time, "s")

#1.
print("------------get audio frames-------------")
start_time = time.time()
audio_frame = get_audio_frames(signal)
#程序默认按照30fps来生成blendshapes,这里除以30可以得到声音的时长,单位:秒
print(f"len(audio_frame) = {len(audio_frame)}")
print(f"len(audio_frame)/30 = {len(audio_frame)/30}s")
print(f"type(audio_frame) = {type(audio_frame)}")
print("used time:", time.time()-start_time, "s")
#print(f"audio_frame.shape = {audio_frame.shape}")

#2.
print("------------get lpc out-------------")
start_time = time.time()
lpc_output = c_lpc(audio_frame)
print(f"type(lpc_output) = {type(lpc_output)}")
print(f"lpc_output.shape = {lpc_output.shape}")
print("used time:", time.time()-start_time, "s")
# save_file_path = "E:/out-005.npy"
# np.save(save_file_path,output)

#3.
print("------------get weight-------------")
start_time = time.time()
output_weight = get_weight(lpc_output)
print(f"type(output_weight) = {type(output_weight)}")
print(f"output_weight.shape = {output_weight.shape}")
print("used time:", time.time()-start_time, "s")

np.save(save_npy_path,output_weight)
print(f"output_weight has been saved into {save_npy_path}")

#for i in range(output_weight.shape[0]) :
for i in range(50) :  #这里只打印前50帧
    print("frame%04d>>"%i, end='')
    for j in range(output_weight.shape[1]) :
        print('%.2f '%output_weight[i][j], end='')
    print("<<")

输出如下:

------------load tflite model-------------
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
WARNING: Attempting to use a delegate that only supports static-sized tensors with a graph that has dynamic-sized tensors (tensor#47 is a dynamic-sized tensor).
used time: 0.026015520095825195 s
------------load audio file-------------
len(signal)/16000 = 47.4s
type(signal) = <class 'numpy.ndarray'>
signal.shape = (758400,)
used time: 0.00776219367980957 s
------------get audio frames-------------
len(audio_frame) = 1422
len(audio_frame)/30 = 47.4s
type(audio_frame) = <class 'list'>
used time: 0.02017498016357422 s
------------get lpc out-------------
type(lpc_output) = <class 'numpy.ndarray'>
lpc_output.shape = (1422, 32, 64, 1)
used time: 14.327913522720337 s
------------get weight-------------
type(output_weight) = <class 'numpy.ndarray'>
output_weight.shape = (1422, 37)
used time: 4.156126260757446 s
output_weight has been saved into ./out-005.npy
frame0000>>0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 <<
frame0001>>0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 <<
frame0002>>0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 <<
frame0003>>0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 <<
frame0004>>0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 <<
frame0005>>0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 <<
frame0006>>0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 <<
frame0007>>0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 <<
frame0008>>0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 <<
frame0009>>0.00 0.00 0.00 0.00 -0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.02 0.02 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 <<
frame0010>>0.00 0.00 0.00 0.00 -0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 0.00 0.03 0.03 0.00 0.00 0.00 0.00 0.00 0.00 0.02 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0011>>0.00 -0.00 0.00 0.00 -0.00 0.00 0.00 0.00 0.00 0.08 0.08 0.07 0.07 0.00 0.00 0.01 0.01 0.00 0.00 0.03 0.03 0.00 0.00 0.00 0.00 0.00 0.00 0.12 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0012>>0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 0.00 0.00 0.11 0.11 0.10 0.10 0.00 0.00 0.01 0.01 0.00 0.00 0.04 0.04 0.02 0.00 0.00 0.00 0.00 0.00 0.23 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0013>>-0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 0.20 0.20 0.18 0.18 -0.00 -0.00 0.01 0.01 0.00 0.00 0.03 0.03 0.00 0.00 0.00 0.00 0.00 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.01 0.00 0.00 0.00 <<
frame0014>>-0.00 -0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 -0.00 0.19 0.19 0.17 0.17 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.17 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 -0.00 <<
frame0015>>-0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 0.00 0.00 0.15 0.15 0.14 0.14 0.00 0.00 0.01 0.01 0.00 0.00 0.03 0.03 0.00 0.00 0.00 0.00 0.00 0.00 0.15 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0016>>0.00 0.00 0.00 0.00 0.00 0.00 -0.00 0.00 0.00 0.17 0.17 0.16 0.16 0.00 0.00 0.01 0.01 0.00 0.00 0.11 0.11 0.00 0.00 0.00 0.00 0.00 0.00 0.20 0.00 0.00 0.00 0.00 0.02 0.02 0.00 0.00 0.00 <<
frame0017>>0.00 0.00 0.00 0.01 0.00 0.00 -0.00 0.00 0.00 0.08 0.08 0.07 0.07 0.00 0.00 0.01 0.01 0.00 0.00 0.05 0.05 0.00 0.00 0.00 0.00 0.00 0.00 0.30 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0018>>0.00 0.00 0.00 0.01 -0.00 0.00 -0.00 0.00 0.00 0.07 0.07 0.06 0.06 0.00 0.00 0.01 0.01 0.00 0.00 0.08 0.08 0.04 0.00 0.00 0.00 0.00 0.00 0.34 0.00 0.00 0.00 0.00 0.02 0.02 0.00 0.00 0.00 <<
frame0019>>0.00 0.00 0.00 0.01 0.00 0.00 -0.00 0.00 0.00 0.09 0.09 0.08 0.08 0.00 0.00 0.01 0.01 0.00 0.00 0.06 0.06 0.00 0.00 0.00 0.00 0.00 0.00 0.34 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0020>>0.00 0.00 0.00 0.00 0.00 0.00 -0.00 0.00 0.00 0.14 0.14 0.13 0.13 0.00 0.00 0.01 0.01 0.00 0.00 0.10 0.10 0.00 0.00 0.00 0.00 0.00 0.00 0.22 0.00 0.00 0.00 0.00 0.02 0.02 0.00 0.00 0.00 <<
frame0021>>-0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 0.00 0.00 0.25 0.25 0.23 0.23 0.00 0.00 0.01 0.01 0.00 0.00 0.09 0.09 0.00 0.00 0.00 0.00 0.00 0.00 0.16 0.00 0.00 0.00 0.00 0.02 0.02 0.00 0.00 0.00 <<
frame0022>>-0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 0.00 0.00 0.29 0.29 0.26 0.26 0.00 0.00 0.02 0.02 0.00 0.00 0.06 0.06 0.00 0.00 0.00 0.00 0.00 0.00 0.08 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0023>>-0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 0.00 0.00 0.26 0.26 0.24 0.24 0.00 0.00 0.01 0.01 0.00 0.00 0.04 0.04 0.01 0.00 0.00 0.00 0.00 0.00 0.13 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0024>>0.00 -0.00 0.00 0.01 0.00 0.00 -0.00 0.00 0.00 0.18 0.18 0.17 0.17 0.00 0.00 0.01 0.01 0.00 0.00 0.04 0.04 0.00 0.00 0.00 0.00 0.00 0.00 0.30 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0025>>0.00 0.00 0.00 0.01 0.00 0.00 -0.00 0.00 0.00 0.11 0.11 0.10 0.10 0.00 0.00 0.01 0.01 0.00 0.00 0.10 0.10 0.03 0.00 0.00 0.00 0.00 0.00 0.29 0.00 0.00 0.00 0.00 0.02 0.02 0.00 0.00 0.00 <<
frame0026>>0.00 0.00 0.00 0.01 0.00 0.00 -0.00 0.00 0.00 0.11 0.11 0.10 0.10 0.00 0.00 0.01 0.01 0.00 0.00 0.08 0.08 0.06 0.00 0.00 0.00 0.00 0.00 0.30 0.00 0.00 0.00 0.00 0.02 0.02 0.00 0.00 0.00 <<
frame0027>>0.00 0.00 0.00 0.00 -0.00 0.00 -0.00 0.00 0.00 0.07 0.07 0.06 0.06 0.00 0.00 0.01 0.01 0.00 0.00 0.05 0.05 0.06 0.00 0.00 0.00 0.00 0.00 0.21 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0028>>0.00 0.00 0.00 0.01 -0.00 0.00 -0.00 0.00 0.00 0.07 0.07 0.06 0.06 0.00 0.00 0.01 0.01 0.00 0.00 0.05 0.05 0.09 0.00 0.00 0.00 0.00 0.00 0.26 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0029>>0.00 -0.00 0.00 0.00 -0.00 -0.00 -0.00 -0.00 -0.00 0.10 0.10 0.09 0.09 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.12 0.01 0.00 0.00 0.00 0.00 0.24 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 <<
frame0030>>0.00 -0.00 0.00 0.00 -0.00 -0.00 -0.00 -0.00 -0.00 0.08 0.08 0.07 0.07 -0.00 -0.00 0.01 0.01 0.00 0.00 0.01 0.01 0.14 0.00 0.00 0.00 0.00 0.00 0.24 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 <<
frame0031>>-0.00 -0.00 0.00 0.00 -0.00 -0.00 0.00 -0.00 -0.00 0.12 0.12 0.11 0.11 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.09 0.00 0.00 0.00 0.00 0.00 0.15 0.00 0.00 0.00 0.00 -0.00 0.00 0.00 0.00 -0.00 <<
frame0032>>-0.00 -0.00 0.00 0.00 0.00 -0.00 0.00 -0.00 -0.00 0.17 0.17 0.15 0.15 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.08 0.00 0.00 0.00 0.00 0.00 0.10 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 -0.00 <<
frame0033>>-0.00 -0.00 -0.00 0.00 -0.00 -0.00 -0.00 -0.00 -0.00 0.12 0.12 0.11 0.11 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.25 0.00 0.00 0.00 0.00 0.00 0.16 0.00 0.00 0.00 0.00 -0.00 0.00 0.00 0.00 -0.00 <<
frame0034>>0.00 -0.00 0.00 0.00 -0.00 -0.00 -0.00 -0.00 -0.00 0.06 0.06 0.06 0.06 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.09 0.00 0.00 0.00 0.00 0.00 0.22 0.00 0.00 0.00 0.00 -0.00 0.00 0.00 0.00 0.00 <<
frame0035>>0.00 0.00 0.00 0.01 -0.00 0.00 -0.00 0.00 0.00 0.05 0.05 0.04 0.04 0.00 0.00 0.01 0.01 0.00 0.00 0.04 0.04 0.10 0.00 0.00 0.00 0.00 0.00 0.29 0.00 0.00 0.00 0.00 0.01 0.01 0.00 0.00 0.00 <<
frame0036>>0.00 -0.00 0.00 0.01 -0.00 0.00 -0.00 -0.00 -0.00 0.04 0.04 0.03 0.03 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.04 0.00 0.00 0.00 0.00 0.00 0.31 0.00 0.00 0.00 0.00 -0.00 0.00 -0.00 -0.00 0.00 <<
frame0037>>0.00 -0.00 -0.00 0.01 -0.00 -0.00 -0.00 -0.00 -0.00 0.04 0.04 0.04 0.04 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.22 0.00 0.00 0.00 0.00 0.00 0.29 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 <<
frame0038>>0.00 0.00 0.00 0.01 -0.00 0.00 -0.00 0.00 0.00 0.05 0.05 0.05 0.05 0.00 0.00 0.01 0.01 0.00 0.00 0.02 0.02 0.11 0.00 0.00 0.00 0.00 0.00 0.26 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 <<
frame0039>>0.00 -0.00 0.00 0.01 -0.00 0.00 -0.00 -0.00 -0.00 0.03 0.03 0.02 0.02 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.03 0.00 0.00 0.00 0.00 0.00 0.31 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 <<
frame0040>>0.00 -0.00 0.00 0.01 0.00 0.00 -0.00 -0.00 -0.00 0.05 0.05 0.04 0.04 -0.00 -0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.33 0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 -0.00 0.00 <<
frame0041>>0.00 -0.00 0.00 0.01 -0.00 -0.00 -0.00 -0.00 -0.00 0.08 0.08 0.07 0.07 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.14 0.00 0.00 0.00 0.00 0.00 0.32 0.00 0.00 0.00 0.00 -0.00 0.00 -0.00 -0.00 0.00 <<
frame0042>>0.00 -0.00 0.00 0.01 -0.00 0.00 -0.00 -0.00 -0.00 0.05 0.05 0.05 0.05 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.10 0.00 0.00 0.00 0.00 0.00 0.32 0.00 0.00 0.00 0.00 -0.00 0.00 -0.00 -0.00 0.00 <<
frame0043>>0.00 -0.00 0.00 0.01 -0.00 0.00 -0.00 -0.00 -0.00 0.05 0.05 0.05 0.05 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.14 0.00 0.00 0.00 0.00 0.00 0.33 0.00 0.00 0.00 0.00 -0.00 0.00 -0.00 -0.00 0.00 <<
frame0044>>0.00 -0.00 0.00 0.01 -0.00 -0.00 -0.00 -0.00 -0.00 0.10 0.10 0.09 0.09 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.11 0.00 0.00 0.00 0.00 0.00 0.31 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 0.00 <<
frame0045>>-0.00 -0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 -0.00 0.20 0.20 0.19 0.19 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.07 0.00 0.00 0.00 0.00 0.00 0.23 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 -0.00 <<
frame0046>>-0.00 -0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 -0.00 0.23 0.23 0.21 0.21 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.06 0.00 0.00 0.00 0.00 0.00 0.17 0.00 0.00 0.00 0.00 -0.00 -0.00 0.00 0.00 -0.00 <<
frame0047>>-0.00 -0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 -0.00 0.27 0.27 0.25 0.25 -0.00 -0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.13 0.00 0.00 -0.00 -0.00 -0.00 -0.00 0.00 0.00 -0.00 <<
frame0048>>-0.00 -0.00 0.00 0.00 0.00 -0.00 -0.00 -0.00 -0.00 0.25 0.25 0.23 0.23 -0.00 -0.00 0.01 0.01 0.00 0.00 0.02 0.02 0.00 0.00 0.00 0.00 0.00 0.00 0.16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 -0.00 <<
frame0049>>-0.00 -0.00 0.00 0.00 0.00 0.00 -0.00 0.00 0.00 0.18 0.18 0.16 0.16 0.00 0.00 0.01 0.01 0.00 0.00 0.09 0.09 0.00 0.00 0.00 0.00 0.00 0.00 0.13 0.00 0.00 0.00 0.00 0.02 0.02 0.00 0.00 0.00 <<

总结

facefood的这个开源不走心,没法用于自己的ARKit方案。除非你打算用官方的116维权重的3D模型。

参考资料

FACEGOOD-Audio2Face GITHUB

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值