การเคลื่อนไหวใบหน้าจากภาพนิ่งและวีดิโอโดยใช้ Thin-Plate-Spline-Motion-Model
Published: 2023-04-11 12:10:01

ตามปกติแล้วเรามักจะเห็นภาพนิ่งของบุคคลมากมาย ในบางครั้ง เราก็อยากที่จะนำหน้าของบุคคลนั้นๆมาทำท่าทางหรือพูดประโยคต่างๆตามที่เราต้องการ ซึ่งเป็นที่แน่นอนว่าจะเป็นที่ลำบากหากเราต้องนำเจ้าของหน้ามาถ่ายวิดีโอด้วยตัวเอง การใช้ AI ช่วยในการเคลื่อนไหวใบหน้าจึงเป็นทางเลือกหนึ่งในการทำภาพเคลื่อนไหวเพื่อนำไปประกอบกับการตัดต่อวิดีโอ หรือเพื่อความสนุกของคนกลุ่มหนึ่ง

บทความนี้จะนำเสนอวิธีการทำการเคลื่อนไหวใบหน้าจากภาพนิ่งและวิดีโอ โดยใช้ Thin-Plate-Spline-Motion-Model ในภาษา Python และเขียนโดยใช้ Google Colab ในการรันโค้ด โดยขั้นตอนการใช้จะมีดังนี้


### ขั้นตอนที่ 1 ทำการ Clone AI จาก git ที่เก็บข้อมูล Thin-Plate-Spline-Motion-Model มา

สามารถ copy git code ตามนี้ได้เลย

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ok6vblg6g58ja6hiicb3.png)

เมื่อรันจะขึ้นว่าทำการ clone สำเร็จ

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hoj1r9264d8n22acppyv.png)


### ขั้นตอนที่ 2 ทำการเรียกข้อมูล Thin-Plate-Spline-Motion-Model

ทำตามเรียกข้อมูลตามนี้

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/czpnjx1x9tq2y3x2yzpa.png)

เมื่อรันจะขึ้น path ของ Thin-Plate-Spline-Motion-Model

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v4ocxg5n8wuj2zzndbbr.png)


### ขั้นตอนที่ 3 ทำการนำเข้า Checkpoints

นำ Checkpoints เข้ามาเพื่อใช้ทำการ render animation จากจุดที่ค้างไว้หากมีการ crash เกิดขึ้น

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/liga9hrm87hctble93nv.png)

เมื่อขึ้นตามภาพนี้แสดงว่าทำการนำเข้า Checkpoints สำเร็จ

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7i0sahrjpyivvkez1nb3.png)


### ขั้นตอนที่ 4 ทำการเลือก path file สำหรับใส่ข้อมูล

copy path file ตามนี้ โดยที่ชื่อไฟล์นั้นจะต้องตรงกับชื่อไฟล์ที่ใส่ในโค้ด และขนาดของภาพที่สามารถเปลี่ยนแปลงได้ โดยในที่นี้คือกำหนดไว้ที่ 384x384 pixels

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cjbq5iyc84aev0i7nqkq.png)

โดยในที่นี้จะใช้ path ในไฟล์ของ Google colab โดยที่ในไฟล์นั้นจะมี module มากมาย โดยเราจะอธิบายไฟล์ที่เราต้องรู้ โดยมีดังนี้

- **Assets** คือไฟล์ที่เก็บวิดีโอและภาพ โดยที่เราจะต้องนำไฟล์วิดีโอและภาพมาใส่ไว้ในนี้

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wo7w4jpfd13k6vdjlnrh.png)

- **Checkpoints**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mgdhtv3f97ykgfuo2eio.png)

### ขั้นตอนที่ 5 ทำการทดสอบภาพและวิดีโอที่เราใส่ไป

โค้ดตามนี้จะทำการจัดการแสดงผลของภาพและวิดีโอ

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fkpz98i3pkbbrwnx87km.png)

เมื่อรันแล้วจะแสดงผลภาพและวิดีโอที่เราใส่ไป

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x7f7e2tdxp9k5arw3af6.png)

### ขั้นตอนที่ 6 ทำการ Load Checkpoints

load checkpoints ที่นำเข้ามาเพื่อเตรียมทำภาพ animation

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8c2a4bne2xibci331s2x.png)

### ขั้นตอนที่ 7 ทำ Animation

เขียนตามด้านล่างเพื่อทำ Animation โดย Import ตัว Make Animation เข้ามา แล้วให้มันทำการ Predict animation ในแต่ละเฟรมจากนั้นก็ให้มันแสดงออกมาในรูปแบบของวิดีโอ

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y1ytts8k59s24pmyshy5.png)

เราก็จะได้ใบหน้าเคลื่อนไหวที่ต้องการโดยวิดีโอที่เราต้องการจะอยู่ด้านขวามือ

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qvsvsdx5vi0890fc5iyc.png)

**สรุปผล**
เราสามารถทำการเคลื่อนไหวใบหน้าจากภาพนิ่งและวีดิโอตามที่เราต้องการได้โดยนำภาพและวิดีโอที่เราต้องการใส่ในที่อยู่ไฟล์ที่ถูกต้องและทำการรันโค้ดเพื่อให้ AI Thin-Plate-Spline-Motion-Model คำนวณการเคลื่อนไหวของหน้าทีละเฟรม จนได้เป็นวิดีโอที่เราต้องการในที่สุด

ปล.เนื่องจากบทความนี้มาจากการวิเคราะห์ของผู้เขียนเป็นส่วนใหญ่ ข้อมูลจึงอาจมีความผิดพลาดไม่มากก็น้อย ต้องขออภัยล่วงหน้าอย่างสูง

code
https://colab.research.google.com/drive/1DREfdpnaBhqISg0fuQlAAIwyGVn1loH_?usp=sharing#scrollTo=o84sOb7JCSY2

references
https://en.wikipedia.org/wiki/Donald_Trump
https://www.youtube.com/watch?v=PmAJwFIu_3U
https://github.com/yoyo-nb/Thin-Plate-Spline-Motion-Model.git

เย้!! 🎉