เสร็จแล้วจะได้ออกมาเป็นวิดีโอ ลดน้ำหนัก 10 กิโลใน 2 สัปดาห์กับพี่โชโกะและพี่หมี EPT แบบนี้
ขอขอบคุณวิดีโอต้นฉบับจาก はいだしょうこ - 笑顔で本気のHAND CLAP〜3回リピート10分ver.〜
ท่านผู้อ่านรู้จัก Motion Capture กันไหมครับ? Motion Capture เป็นกระบวนการแปลการเคลื่อนไหวของคนหรือสิ่งต่าง ๆ จากโลกจริงให้เป็นข้อมูลดิจิทัลที่คอมพิวเตอร์สามารถเข้าใจได้ ซึ่งเป็นเรื่องที่มีประโยชน์มากตั้งแต่ใช้ทำงานวิจัยไปจนถึงอุตสาหกรรมบันเทิงที่ทุกท่านน่าจะเคยเห็นผ่านตากันมาบ้าง เพราะเป็นกระบวนการที่อยู่เบื้องหลังภาพยนตร์และแอนิเมชันหลาย ๆ เรื่องเลยทีเดียว ตัวอย่างเช่นเรื่อง Avatar ของเจมส์ คาเมรอน ก็ใช้ Motion Capture มาจับทั้งท่าทางและสีหน้าของนักแสดงเช่นกันครับ

การทำ Motion Capture มีมาตั้งแต่ช่วงคริสต์ทศวรรษ 1970 ตลอดหลายปีที่ผ่านมานี้มีผู้คิดค้นเทคนิคต่าง ๆ ขึ้นมามากมาย เทคนิคที่นิยมใช้มากที่สุดจนถึงสมัยนี้คือวิธีใช้ตัว Marker สะท้อนแสงติดตามจุดต่าง ๆ ที่ตัวนักแสดง เช่นตัวอย่างจากเรื่อง Avatar ในภาพด้านบน เวลาถ่ายทำจะใช้กล้องถ่ายจากหลาย ๆ มุมแล้วประมวลผลออกมา ถือเป็นระบบที่นิยมที่สุด แม่นยำที่สุด ยืดหยุ่นที่สุด อยากจับการเคลื่อนไหวของอะไรก็ทำได้ทั้งนั้น แต่แน่นอนว่าของดีแบบนี้ย่อมต้องมาพร้อมขั้นตอนการใช้งานที่ยุ่งยากและค่าใช้จ่ายที่ค่อนข้างสูงมาก มีตั้งแต่หลักหลายแสนไปจนหลายล้าน ดังนั้นเราจึงมักจะเห็นระบบนี้ได้ตามมหาวิทยาลัยหรือตามสตูดิโอหรือตามบริษัทใหญ่ ๆ เท่านั้น นอกจากเทคนิคนี้ก็ยังมีเทคนิคที่ใช้เซนเซอร์ในการตรวจจับการเคลื่อนไหวด้วยซึ่งจะมีราคาถูกกว่าแต่แม่นยำสู้ไม่ได้ครับ
อ่าว แล้วถ้าอยากทำ Motion Capture ที่บ้านแต่ไม่อยากเสียเงินล่ะ?
สำหรับท่านผู้อ่านที่กำลังมีคำถามนี้ในใจ ไม่ต้องกังวลไปครับ ทาง EPT หาคำตอบและวิธีการมาเสิร์ฟให้ท่านถึงที่แล้ว ๆ ๆ นั่นคือ AI นั่นเอง! เทคนิคการทำ Motion Capture ด้วย AI นั้นเป็นเทคนิคที่ใหม่ที่สุด ต้นทุนต่ำที่สุด และเชื่อว่าจะเป็นที่นิยมที่สุดในอนาคตด้วย เทคนิคนี้ใช้เพียงแค่ไฟล์วิดีโอที่ถ่ายภาพเคลื่อนไหวของคนเท่านั้น ดังนั้นแน่นอนว่าย่อมต้องมีจุดอ่อนเรื่องความแม่นยำ แต่ถ้าเราไม่ได้จะเอาไปทำงานวิจัยที่เกี่ยวพันกับชีวิตมนุษย์ซึ่งต้องการความแม่นยำสูงหรือเอาไปทำภาพยนตร์หรือเกมระดับ AAA แค่เทคโนโลยี AI ณ ขณะที่เขียนบทความนี้ก็เพียงพอสำหรับใช้ในครัวเรือนหรือบริษัทเล็ก ๆ แล้วครับ
ในบทความ AI103 - Animated Drawings เราได้สร้างแอนิเมชันจากตัวการ์ตูนที่เราวาดเองกันไปแล้ว แต่ตัวการ์ตูนของเราทำได้แค่ท่าทางจากตัวอย่างที่มีให้แล้วเท่านั้น ซึ่งแน่นอนว่าหลายคนคงอยากให้ตัวการ์ตูนขยับตามท่าที่กำหนดเองมากกว่า ดังนั้นในบทความนี้เราจะมาสร้างไฟล์ท่าเต้นจากไฟล์วิดีโอสำหรับนำไปกำหนดท่าให้ตัวการ์ตูนขยับตามด้วย AI กันครับ ทั้งนี้ถึงแม้บทความนี้จะไม่ยากแต่จะยุ่งยากตอนเตรียมตัวอยู่สักหน่อย ผู้อ่านจำเป็นต้องมีความรู้เรื่องคอมพิวเตอร์และการใช้ Command Line พื้นฐานนะครับ
ใครงงตั้งแต่คำว่า Command Line ขอแนะนำคอร์ส SUPER USER (SU101) เพื่อปูพื้นฐานก่อนเลยครับ สำหรับใครที่สนใจคอร์สเรียน AI แต่ยังไม่มีพื้นฐานเขียนโปรแกรมมาก่อน ขอแนะนำคอร์ส Python + Web Programming + Machine Learning (PY203) ของทาง EPT ที่สอนแบบจัดเต็มตั้งแต่พื้นฐาน Python จนลงลึกถึงทฤษฎี AI ซึ่งเป็นคอร์สที่มีหลักสูตรเทียบเท่าเรียนในมหาวิทยาลัยชั้นนำ 2-3 ปีเลยครับ
พิเศษวันนี้! หากสมัครคอร์ส Python + Web Programming + Machine Learning (PY203) แล้วแจ้งผ่านทางกล่องข้อความของเพจ Expert.Programming.Tutor ว่ามาสมัครเพราะอ่านบทความนี้ ทางเราจะแถมคอร์ส SUPER USER (SU101) ให้ไปเรียนด้วยแบบฟรี ๆ เลยครับ
ก่อนจะทำตามบทความนี้จะต้องทำตามบทความ AI103 - Animated Drawings ให้ได้แอนิเมชันออกมาก่อนนะครับ
สร้าง Virtual environment และติดตั้ง Library และ Package ที่จำเป็นต้องใช้
1. เปิดโปรแกรม Anaconda Prompt ขึ้นมาแล้วพิมพ์คำสั่งต่อไปนี้และรันทีละคำสั่ง เพื่อสร้างและ activate virtual environment ซึ่ง virtual environment ที่ใช้ในบทความนี้จะตั้งชื่อว่า bvh
หมายเหตุ: ระหว่างสร้าง environment จะมีข้อความถามว่า Proceed ([y]/n)? ให้พิมพ์ y แล้วกด Enter เพื่อดำเนินการต่อ
| conda create --name bvh python=3.8.13 | 
| conda activate bvh | 
2. พิมพ์คำสั่งต่อไปนี้และรันทีละคำสั่งเพื่อโคลน Project และติดตั้ง Library ที่จำเป็น
หมายเหตุ: คำสั่งแต่ละช่องคือ 1 บรรทัด
| git clone https://github.com/HW140701/VideoTo3dPoseAndBvh.git | 
| cd VideoTo3dPoseAndBvh | 
| pip install -e git+https://github.com/ncullen93/torchsample.git#egg=torchsample | 
| pip install visdom nibabel h5py tqdm pillow scipy pandas opencv-python matplotlib torchvision yacs | 
3. ติดตั้ง PyTorch โดยคลิกเลือกและดูคำสั่งสำหรับติดตั้งจากเว็บ PyTorch
- ตัวอย่างคำสั่งติดตั้งสำหรับเครื่องที่จะใช้ CPU คำนวณอย่างเดียว
| pip3 install torch torchvision torchaudio | 
- ตัวอย่างคำสั่งติดตั้งสำหรับเครื่องที่จะใช้ GPU ก่อนอื่นต้องดูเวอร์ชันของ CUDA ในเครื่องเราก่อนด้วยคำสั่ง
| nvcc --version | 
จากนั้นถึงจะดูคำสั่งสำหรับติดตั้งจากเว็บ PyTorch เพราะต้องใช้ Compute Platform ให้ตรงกับที่เครื่องเรามี เช่นถ้ามี CUDA 11.7 คำสั่งสำหรับติดตั้งจะเป็นดังนี้
| pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117 | 

 
4. ติดตั้ง FFmpeg
- ดาวน์โหลดไฟล์ ffmpeg.exe จากเว็บ FFmpeg
- เอาไฟล์ ffmpeg.exe ที่ดาวน์โหลดมาไปใส่ไว้ในโฟลเดอร์เดียวกับโฟลเดอร์ที่ติดตั้ง Python ของ Environment ถ้าไม่รู้ว่าอยู่ไหนสามารถดูได้โดยพิมพ์คำสั่งดังนี้
| where python | 
 
ดาวน์โหลดโมเดลที่จำเป็นต้องใช้
1. 2D Joint detectors ในบทความนี้จะใช้ Alphapose
2. 3D Joint detectors
1. นำวิดีโอที่มีภาพเคลื่อนไหวของท่าทางที่ต้องการไปใส่ในโฟลเดอร์ outputs\inputvideo ที่อยู่ในโฟลเดอร์ Project เช่นในตัวอย่างนี้คือวิดีโอชื่อ handclap.mp4 ซึ่งตัดส่วนหนึ่งมาจากคลิปนี้

2. เปิดไฟล์ videopose.py ที่อยู่ในโฟลเดอร์ Project ขึ้นมาและแก้ชื่อไฟล์วิดีโอในคำสั่ง inference_video('outputs/inputvideo/kunkun_cut.mp4', 'alpha_pose') ที่อยู่บรรทัดล่างสุดของไฟล์เป็นชื่อวิดีโอในขั้นตอนที่ 1 ของเราเอง เช่นในตัวอย่างนี้จะแก้เป็นดังนี้
หมายเหตุ: หลังจากแก้คำสั่งแล้วอย่าลืมบันทึกไฟล์ด้วย
| inference_video('outputs/inputvideo/handclap.mp4', 'alpha_pose') | 

 
3. กลับมาที่หน้าต่าง Anaconda Prompt (ที่ activate environment ชื่อ bvh อยู่) แล้วพิมพ์คำสั่งต่อไปนี้เพื่อรันโปรแกรมสร้างไฟล์ BVH
| python videopose.py | 
หมายเหตุ 1: สำหรับเครื่องที่รันแล้วเกิดข้อผิดพลาดเกี่ยวกับโมดูล torch._six ให้เปิดไฟล์ joints_detectors/Alphapose/fn.py ขึ้นมาแล้วคอมเมนต์หรือลบบรรทัด from torch._six import string_classes, int_classes (ประมาณบรรทัดที่ 9)
หมายเหตุ 2: สำหรับเครื่องที่รันแล้วเกิดข้อผิดพลาดเกี่ยวกับที่อยู่โฟลเดอร์ ให้สร้างโฟลเดอร์ตามชื่อที่โปรแกรมต้องการด้วยตนเอง
4. รอจนเสร็จจะได้ไฟล์ผลลัพธ์ที่โฟลเดอร์ outputs\outputvideo และไฟล์ BVH จะอยู่ในโฟลเดอร์ outputs\outputvideo\alpha_pose_handclap\bvh ที่อยู่ในโฟลเดอร์ Project ดังภาพ

ก่อนจะทำตามขั้นตอนต่อไปนี้จะต้องทำตามบทความ AI103 - Animated Drawings ให้ได้ไฟล์ตัวการ์ตูนที่เราสร้างเองออกมาก่อนนะครับ ซึ่งในบทความที่แล้วเราได้สร้างพี่หมี EPT และผลลัพธ์อยู่ในโฟลเดอร์ examples\eptbear_out ที่อยู่ในโฟลเดอร์ Project AnimatedDrawings

 
ขั้นตอนต่อไปนี้จะเป็นการสั่งให้พี่หมี EPT เต้นตามท่าทางจากไฟล์ BVH ที่เราสร้าง
หมายเหตุ: อย่าลืมเปลี่ยนชื่อโฟลเดอร์หรือชื่อไฟล์ต่าง ๆ ในตัวอย่างต่อไปนี้เป็นชื่อของโฟลเดอร์หรือไฟล์ในเครื่องของตัวเอง
1. เอาไฟล์ BVH ที่เราสร้างจากหัวข้อที่แล้วไปใส่ในโฟลเดอร์ examples\bvh\handclap ที่อยู่ในโฟลเดอร์ Project AnimatedDrawings

 
2. สร้างไฟล์ examples\config\motion\handclap.yaml ในโฟลเดอร์ Project AnimatedDrawings จากนั้นเปิดไฟล์ด้วย Text editor แล้วใส่ค่าดังต่อไปนี้ และบันทึกไฟล์
filepath: examples/bvh/handclap/alpha_pose_handclap.bvh
start_frame_idx: 0
end_frame_idx: null
groundplane_joint: LeftFoot
forward_perp_joint_vectors:
  - - LeftArm
    - RightArm
  - - LeftUpLeg
    - RightUpLeg
scale: 0.005
up: +y

 
3. สร้างไฟล์ examples\config\retarget\handclap_ppf.yaml ในโฟลเดอร์ Project AnimatedDrawings จากนั้นเปิดไฟล์ด้วย Text editor แล้วใส่ค่าดังต่อไปนี้ และบันทึกไฟล์
char_starting_location: [0.0, 0.0, -0.5]
bvh_projection_bodypart_groups:
- bvh_joint_names:
  - RightArm
  - RightForeArm
  - RightHand
  - LeftArm
  - LeftForeArm
  - LeftHand
  method: pca
  name: Upper Limbs
- bvh_joint_names:
  - RightUpLeg
  - RightLeg
  - RightFoot
  - LeftUpLeg
  - LeftLeg
  - LeftFoot
  method: pca
  name: Lower Limbs
- bvh_joint_names:
  - Hips
  - Spine
  - Spine3
  - Neck
  method: frontal
  name: Trunk
char_bodypart_groups:
- bvh_depth_drivers:
  - Hips
  char_joints:
  - right_shoulder
  - left_shoulder
  - right_hip
  - left_hip
  - hip
  - torso
  - neck
- bvh_depth_drivers:
  - LeftHand
  char_joints:
  - left_elbow
  - left_hand
- bvh_depth_drivers:
  - RightHand
  char_joints:
  - right_elbow
  - right_hand
- bvh_depth_drivers:
  - LeftFoot
  char_joints:
  - left_knee
  - left_foot
- bvh_depth_drivers:
  - RightFoot
  char_joints:
  - right_knee
  - right_foot
char_bvh_root_offset:
  bvh_projection_bodypart_group_for_offset: Lower Limbs
  bvh_joints:
  - - RightFoot
    - RightLeg
    - RightUpLeg
  - - LeftFoot
    - LeftLeg
    - LeftUpLeg
  char_joints:
  - - right_foot
    - right_knee
    - right_hip
  - - left_foot
    - left_knee
    - left_hip
char_joint_bvh_joints_mapping:
  left_elbow: !!python/tuple
  - LeftArm
  - LeftForeArm
  left_foot: !!python/tuple
  - LeftLeg
  - LeftFoot
  left_hand: !!python/tuple
  - LeftForeArm
  - LeftHand
  left_knee: !!python/tuple
  - LeftUpLeg
  - LeftLeg
  torso: !!python/tuple
  - Hips
  - Spine3
  neck: !!python/tuple
  - Hips
  - Neck
  right_elbow: !!python/tuple
  - RightArm
  - RightForeArm
  right_foot: !!python/tuple
  - RightLeg
  - RightFoot
  right_hand: !!python/tuple
  - RightForeArm
  - RightHand
  right_knee: !!python/tuple
  - RightUpLeg
  - RightLeg
char_runtime_checks:
  - - above
    - neck
    - right_shoulder
    - left_shoulder
4. สร้างไฟล์ examples\eptbear_out\handclap_cfg.yaml ในโฟลเดอร์ Project AnimatedDrawings จากนั้นเปิดไฟล์ด้วย Text editor แล้วใส่ค่าดังต่อไปนี้ และบันทึกไฟล์
controller:
  MODE: video_render
  OUTPUT_VIDEO_PATH: C:\Users\NT_Desktop\AnimatedDrawings\examples\eptbear_out\eptbear_handclap.gif
scene:
  ANIMATED_CHARACTERS:
  - character_cfg: C:\Users\NT_Desktop\AnimatedDrawings\examples\eptbear_out\char_cfg.yaml
    motion_cfg: C:\Users\NT_Desktop\AnimatedDrawings\examples\config\motion\handclap.yaml
    retarget_cfg: C:\Users\NT_Desktop\AnimatedDrawings\examples\config\retarget\handclap_ppf.yaml
5. เปิดหน้าต่าง Anaconda Prompt ใหม่ขึ้นมา แล้วพิมพ์คำสั่งต่อไปนี้เพื่อ activate environment ชื่อ animated_drawings ที่สร้างในบทความ AI103 - Animated Drawings และเข้าไปในโฟลเดอร์ Project AnimatedDrawings จากนั้นสั่งเริ่มการทำงาน Python interpreter
| conda activate animated_drawings | 
| cd AnimatedDrawings | 
| python | 
6. พิมพ์คำสั่ง 2 บรรทัดต่อไปนี้ใน interpreter
| from animated_drawings import render render.start('./examples/eptbear_out/handclap_cfg.yaml')  | 
		

 
7. รอสักพักจะได้ไฟล์แอนิเมชันชื่อ eptbear_handclap.gif ในโฟลเดอร์ examples\eptbear_out ที่อยู่ในโฟลเดอร์ Project ดังภาพ

ซึ่งเมื่อนำมาใส่ในวิดีโอต้นฉบับก็จะได้วิดีโอออกกำลังกายสุดน่ารักออกมาแบบนี้
เป็นอย่างไรบ้างครับไม่ยากเลยใช่ไหมครับ ใครทำแล้วอย่าลืมส่งมาอวดทางเพจ Expert.Programming.Tutor นะครับ
สุดท้ายนี้สำหรับใครที่สนใจอยากทำ AI แต่ยังไม่มีพื้นฐานเขียนโปรแกรมมาก่อน ขอแนะนำคอร์ส Python + Web Programming + Machine Learning (PY203) ของทาง EPT ที่สอนแบบจัดเต็มตั้งแต่พื้นฐาน Python หรือหากมีพื้นฐาน Python แน่น ๆ อยู่แล้วแต่อยากเรียนเกี่ยวกับ AI แบบลงลึกถึงทฤษฎีก็ขอแนะนำคอร์ส Machine Learning (AI701) ครับ
ตอนนี้ AI กำลังพัฒนาไปอย่างรวดเร็วมาก ทำให้มีผู้พัฒนาหลายท่านสร้างโปรแกรมหรือไลบรารีเพื่อช่วยทำหรือช่วยลดเวลาในการทำงานต่าง ๆ ของมนุษย์ออกมาให้เราใช้กันอย่างมากมาย ในบทความต่อ ๆ ไป ทาง EPT จะทยอยรีวิวตัวที่น่าสนใจให้ดูเรื่อย ๆ นะครับ รอติดตามกันได้เลย
[1] https://github.com/HW140701/VideoTo3dPoseAndBvh
[2] https://github.com/facebookresearch/AnimatedDrawings
Tag ที่น่าสนใจ: ai motion_capture video_to_bvh animation python virtual_environment library_installation anaconda_prompt marker_reflective_system avatar machine_learning computer_vision command_line ai_technology video_processing
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC) 
    084-88-00-255 (AIS) 
    026-111-618 
    หรือทาง EMAIL:  NTPRINTF@GMAIL.COM