สมัครเรียนโทร. 085-350-7540 , 084-88-00-255 , ntprintf@gmail.com

Tutorial AI

AI001 The brief history of AI AI101 Jupyter Notebook on AWS AI102 Pandas Tutorials AI103 Animated Drawings AI104 Video to BVH AI105 Hand Landmarks Detection Using MediaPipe AI106 Object Detection Using MediaPipe AI107 Image Segmentation Using MediaPipe AI108 Pose Landmarks Detection Using MediaPipe

 

AI104 - Video to BVH

สร้างไฟล์ท่าเต้นสุดคิวท์ให้ตัวการ์ตูนเต้นตามใน 1 คำสั่ง!

เสร็จแล้วจะได้ออกมาเป็นวิดีโอ ลดน้ำหนัก 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 

  • ดาวน์โหลดไฟล์ duc_se.pth จากที่นี่ แล้วนำไปใส่ในโฟลเดอร์ joints_detectors\Alphapose\models\sppe ที่อยู่ในโฟลเดอร์ Project 
  • ดาวน์โหลดไฟล์ yolov3-spp.weights จากที่นี่ แล้วนำไปใส่ในโฟลเดอร์ joints_detectors\Alphapose\models\yolo ที่อยู่ในโฟลเดอร์ Project 

2. 3D Joint detectors

  • ดาวน์โหลดไฟล์ pretrained_h36m_detectron_coco.bin จากที่นี่ แล้วนำไปใส่ในโฟลเดอร์ checkpoint ที่อยู่ในโฟลเดอร์ Project 

 

แปลงไฟล์วิดีโอเป็นไฟล์ BVH เพื่อสร้างไฟล์ท่าเต้น

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 ดังภาพ

 

กำหนดท่าเต้นให้ตัวการ์ตูนด้วยไฟล์ BVH ของเราเอง

ก่อนจะทำตามขั้นตอนต่อไปนี้จะต้องทำตามบทความ 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



บทความนี้อาจจะมีที่ผิด กรุณาตรวจสอบก่อนใช้

หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor

ไม่อยากอ่าน Tutorial อยากมาเรียนเลยทำอย่างไร?

สมัครเรียน ONLINE ได้ทันทีที่ https://elearn.expert-programming-tutor.com

หรือติดต่อ

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM

แผนที่ ที่ตั้งของอาคารของเรา

C Article


C++ Article


Java Article


C#.NET Article


VB.NET Article


Python Article


Golang Article


JavaScript Article


Perl Article


Lua Article


Rust Article


Article


Python


Python Numpy


Python Machine Learning



แผนผังการเรียนเขียนโปรแกรม

Link อื่นๆ

Allow sites to save and read cookie data.
Cookies are small pieces of data created by sites you visit. They make your online experience easier by saving browsing information. We use cookies to improve your experience on our website. By browsing this website, you agree to our use of cookies.

Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com

ติดต่อเราได้ที่

085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
แผนที่ ที่ตั้งของอาคารของเรา