發(fā)布時間:2024-04-11 11:03:33 瀏覽量:211次
在本文中,我們將嘗試通過跟蹤 2D 視頻中的動作來渲染人物的 3D 動畫。
在 3D 圖形中制作人物動畫需要大量的運動跟蹤器來跟蹤人物的動作,并且還需要時間手動制作每個肢體的動畫。 我們的目標是提供一種節(jié)省時間的方法來完成同樣的任務。
NSDT工具推薦: Three.js AI紋理開發(fā)包 - YOLO合成數(shù)據(jù)生成器 - GLTF/GLB在線編輯 - 3D模型格式在線轉(zhuǎn)換 - 可編程3D場景編輯器 - REVIT導出3D模型插件 - 3D模型語義搜索引擎
我們對這個問題的解決方案包括以下步驟:
讓我們在本文的其余部分詳細討論這些步驟。
如上所述,只需指定 17 個關鍵點(在深度學習社區(qū)中稱為landmark points)即可完整描述人體姿勢。 你可能已經(jīng)猜到,我們正在使用深度學習來估計人類的姿勢(即跨視頻幀跟蹤人類的姿勢)。 有很多最先進的框架(例如 PoseFlow 和 AlphaPose)可以在github上找到,它們已經(jīng)實現(xiàn)了相當準確的姿勢估計。
第一個框架是由 Yuliang Xiu 等人開發(fā)的 PoseFlow。 PoseFlow 算法的基本概述是,該框架首先通過最大化視頻所有幀的整體置信度來構(gòu)建姿勢。 下一步是使用稱為非極大值抑制(通??s寫為 NMS)的技術(shù)刪除檢測到的冗余姿勢。
可以在下面附加的 GIF 中看到,使用 PoseFlow(左側(cè))估計的姿勢在某些幀中存在輕微故障。 這給我們帶來了下一個框架:AlphaPose。 AlphaPose由Hao-Shu Fang等人開發(fā)。 該框架在幀中檢測到的人周圍繪制邊界框,并估計他們在每個幀中的姿勢。 即使一個人被另一個人部分遮擋,它也可以檢測姿勢。
左:PoseFlow 右:AlphaPose
AlphaPose 框架的代碼可以在這里找到。
我們使用 Alpha Pose 來檢測視頻中人類的姿勢。 下一步是跟蹤他們的動作,以便能夠構(gòu)建平滑的移動動畫。 DeepSORT 框架的研究論文可以在這里找到。
使用 DeepSORT 和 FaceReid 邊界框的輸出,我們通過以下方式分離不同人的姿勢。
在每一幀中繪制人體周圍的邊界框
檢查姿勢關鍵點是否在邊界框內(nèi)的函數(shù)
分離不同人的姿勢的循環(huán)
如上所述,我們在姿態(tài)估計步驟中獲得的坐標是二維的(即它們位于二維空間中)。 但為了實現(xiàn) 3D 動畫的主要項目目標,這些坐標必須映射到 3 維空間。 這也是使用......你猜對了!......深度學習! Github 上有一個存儲庫以及 ICCV ’17 接受的一篇研究論文。 可以在此處找到存儲庫的鏈接。
3d-pose-baseline 存儲庫在 Human3.6M 數(shù)據(jù)集上訓練了他們的模型。 該數(shù)據(jù)集包含約 360 萬人在 17 種不同場景下的 3D 姿勢及其相應圖像。 簡而言之,模型的輸入是 360 萬人類的圖像,所需的輸出是數(shù)據(jù)集中存在的 3D 姿勢。 現(xiàn)在,可以構(gòu)建和調(diào)整深度學習模型,直到達到相當?shù)臏蚀_度:
一旦我們從姿勢估計框架中獲得了關鍵點的坐標,就可以將這些坐標提供給 3D 角色身體的每個肢體。 在這里,我們使用Unity作為3D動畫環(huán)境來完成任務。
每幀的 17 個關鍵點的坐標存儲在一個文本文件中,該文本文件是在 Unity 中使用 C# 讀取的。 從文件中讀取的坐標現(xiàn)在重新定位到 3D 人形模型中。 這17個關鍵點與Unity內(nèi)置的人形頭像的身體關鍵點進行映射。
現(xiàn)在,動畫是使用 Unity 的逆運動學(inverse kinematics)、骨骼旋轉(zhuǎn)和四元數(shù)完成的。首先看 charanim.cs 的渲染更新函數(shù) update():
void Update()
{
if (pos == null) {
return;
}
play_time += Time.deltaTime;
int frame = s_frame + (int)(play_time * 24.057f);
if (frame > e_frame) {
play_time = 0;
frame = s_frame;
}
if (debug_cube) {
UpdateCube(frame);
}
Vector3[] now_pos = pos[frame];
Vector3 pos_forward = TriangleNormal(now_pos[7], now_pos[4], now_pos[1]);
bone_t[0].position = now_pos[0] * scale_ratio + new Vector3(init_position.x, heal_position, init_position.z);
bone_t[0].rotation = Quaternion.LookRotation(pos_forward) * init_inv[0] * init_rot[0];
for (int i = 0; i < bones.Length; i++) {
int b = bones[i];
int cb = child_bones[i];
bone_t[b].rotation = Quaternion.LookRotation(now_pos[b] - now_pos[cb], pos_forward) * init_inv[b] * init_rot[b];
}
bone_t[8].rotation = Quaternion.AngleAxis(head_angle, bone_t[11].position - bone_t[14].position) * bone_t[8].rotation;
}
其中的 updateCube() 定義如下:
void UpdateCube(int frame)
{
if (cube_t == null) {
cube_t = new Transform[bone_num];
for (int i = 0; i < bone_num; i++) {
Transform t = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
t.transform.parent = this.transform;
t.localPosition = pos[frame][i] * scale_ratio;
t.name = i.ToString();
t.localScale = new Vector3(0.05f, 0.05f, 0.05f);
cube_t[i] = t;
Destroy(t.GetComponent<BoxCollider>());
}
}
else {
Vector3 offset = new Vector3(1.2f, 0, 0);
for (int i = 0; i < bone_num; i++) {
cube_t[i].localPosition = pos[frame][i] * scale_ratio + new Vector3(0, heal_position, 0) + offset;
}
}
}
最終我們得到的結(jié)果如下,視頻點擊這里:
還不錯!
總而言之,我們能夠?qū)崿F(xiàn)視頻中多個人的姿勢估計,并使用 Unity 等 3D 環(huán)境制作運動動畫,同時還保持視頻中兩個不同人之間的相對位置。我們項目的 Github 存儲庫鏈接可以在這里找到。
熱門資訊
想了解動畫制作和影視特效的區(qū)別嗎?本文將帶您深入探討動畫制作和影視特效之間的關系,幫助你更好地理解這兩者的差異。
想知道快影、剪映、快剪輯這三款軟件哪個更適合小白?看看這篇對比評測,帶你了解這三款軟件的功能和特點,快速選擇適合自己的視頻剪輯軟件。
剪映專業(yè)版新增全局預覽縮放功能,可以輕松放大或縮小時間軌道。學習如何使用時間線縮放功能,提升剪輯效率。
4. 豆瓣8.3《鐵皮鼓》|電影符號學背后的視覺盛宴、社會隱喻主題
文|悅兒(叮咚,好電影來了!)《鐵皮鼓》是施隆多夫最具代表性的作品,影片于... 分析影片的社會隱喻主題;以及對于普通觀眾來說,它又帶給我們哪些現(xiàn)實啟發(fā)...
5. 從宏觀蒙太奇思維、中觀敘事結(jié)構(gòu)、微觀剪輯手法解讀《花樣年華》
中觀層面完成敘事結(jié)構(gòu)、以及微觀層面的剪輯手法,3個層次來解讀下電影《花樣年華》的蒙太奇魅力。一、 宏觀層面:運用蒙太奇思維構(gòu)建電影劇本雛形。蒙...
6. 15種電影剪輯/轉(zhuǎn)場藝術(shù),賦予影片絕妙魅力
15種電影剪輯/轉(zhuǎn)場手法,讓影片更吸引眼球!回顧電影中豐富多樣的專場技巧,比如瞬間從一個場景中變換到空中... 現(xiàn)在是測試技術(shù)的時候了!以下是一些常見剪輯手法,讓你觀影過程更加華麗動人!
本文介紹了十款強大的PR視頻剪輯插件,幫助提升視頻剪輯效率,提高創(chuàng)作品質(zhì),并降低創(chuàng)作難度。
1、每個切點需要理由和動機 很剪輯師認為,賦予每一個切點動機是非常困難的。很多...
電影創(chuàng)作者可以通過表意、造型、畫面展示等元素對隱身性的含義進行隱喻,打... 電影和夢境都具有普遍性的象征意義,夢境中的元素能夠代表人內(nèi)心的欲望,...
10. 《肖申克的救贖》通過鏡頭語言,向觀眾展現(xiàn)了安迪自我救贖的過程
以突出劇情的緊張氛圍和角色的情感變化。此外,電影的拍攝手法和剪輯方案還與影片的敘事結(jié)構(gòu)和主題緊密相連。導演巧妙地運用回憶、閃回和象征性鏡頭等...
同學您好!