OpenPose เป็นระบบตรวจจับบุคคล ขั้นเทพตัวหนึ่ง
ตัวนี้เป็น AI (deep learning)
มันตรวจจับบุคคลหลายคน ได้ในภาพนิ่ง วีดีโอ
หรือแม้กระทั่งทำงานแบบเรียลไทม์ก็ได้ด้วย
…แต่ที่เด็ดดวง เสียเหลือเกิน
มันตรวจจับจุดบนเรื่องร่างของมนุษย์
ไม่ว่าจะเป็นตามตัว มือ สีหน้า เท้า ทำได้ถึง 135 จุด
แล้วเชื่อมโยงแต่ละจุดได้ ในภาพเดียว
นับว่าเป็นความสามารถของมนุษย์
ที่จะพยายามสร้าง AI เลียนแบบสายตาคน
เพราะเท่ากับว่าคอมสามารถเข้าใจ
การเคลื่อนไหวทุกเรื่องร่าง และย่างก้าวของคนได้
มันตรวจจับได้หมด
ถ้าคิดต่อยอดอีก
โปรแกรมเมอร์ก็สามารถนำเอาข้อมูลที่คอมมองเห็น
ไปดัดแปลงประยุตต์ใช้ทำโน่นทำนี้ต่อไปได้อีกนะ
สุดแล้วแต่จะพลิกแพลง
ไม่ใช่แค่วาดเส้นเชื่อมโยงโชว์ในภาพอย่างเดียว
โปรเจคนี้มี API รองรับภาษา C++ กับ Python และมี Unity Plugin.ด้วยครับ
ใครอยากลองเล่นเฉยๆ บนวินโดว์หรือลินุกซ์ ก็จะมีตัว demo ครับ
ถ้าเป็นวินโดว์จะมีไฟล์ .exe ให้ดาวน์โหลดมาเล่นเลยครับ
ถ้าสนใจก็ไปตามลิงค์
https://github.com/CMU-Perceptual-Computing-Lab/openpose
เขาจะบอกวิธีติดตั้งเสร็จสรรพ
เท่าที่ผมลองเล่นดู
ก็ตามรูปที่โชว์
ตัวโปรแกรมจะพล็อตจุดตามร่างกายคนได้
แล้วก็ลากเส้นเชื่อมต่อจุดต่างๆ ให้
เพื่อความสวยงามในการแสดงผล
แต่ทว่ามันกินพลังคอมมากเหลือ
แนะนำเครื่องต้องมี GPU ดีกว่า ได้ทั้ง Nvidia และ AMD
เพื่อรีดประสิทธิภาพ ความแรงในการประมวลผลครับ
ใช้ CPU ไม่ไหว ยอมแพ้
เลยต้องเปลี่ยนไปใช้โปรเจคนี้แทนครับ??tf-pose-estimation ซึ่งโปรเจคที่ว่านี้ เขาเอา OpenPose มาลดความซับซ้อนลง เพื่อให้รันได้บน CPU เครื่องธรรมดาก็ได้ ประสิทธิภาพต่ำแบบเรียลไทมก็ได้ครับ (ถ้าเครื่องแรงก็จะดีมาก)
ลองดูตัวอย่างการทำงานตามคลิปข้างล่างที่ผมทำได้เลยครับ
วิธีติดตั้งและใช้งานโปรเจค?tf-pose-estimation
ในหัวข้อนี้ผมจะพูดถึงการติดตั้ง tf-pose-estimation แล้วกัน ซึ่งจะเป็นแบบคอมมานไลน์ทั้งหมด อ้างอิงบนวินโดวส์นะครับ
การติดตั้ง
1) แนะนำให้ลง Anaconda ซึ่งเป็นแพลตฟอร์มสำหรับงาน machine learning และ Deep learning?โดยเฉพาะ ทำให้เราสามารถใช้ python ได้?ลิงค์ดาวน์โหลด?https://www.anaconda.com/download/
2) ดาวน์โหลดโค้ดเป็น zip จากโปรเจคต้นตำรับ
https://github.com/ildoonet/tf-pose-estimation
ดาวน์โหลดเสร็จก็แตกไฟล์ด้วยครับ
ถ้าใครใช้ git เป็น ก็ใช้คำสั่งบนคอมมานไลน์
git clone https://github.com/ildoonet/tf-pose-estimation.git
เดี่ยวโค้ดของโปรเจคจะดาวน์โหลดมาอยู่ที่เครื่องเรา (อย่าลืมต่อเน็ตด้วย)
3) cd ไปที่โฟลเดอร์?tf-pose-estimation ที่ได้แตกไฟล์ก่อนหน้า หรือดาวน์โหลผ่านคำสั่ง git
cd?tf-pose-estimation
4) ติดตั้งมอดูล
pip install tensorflow pip install opencv-python
รันคำสั่งนี้ต่อด้วย
pip install -r requirements.txt
5) ไปดาวน์โหลด swig ซึ่งเป็นโปรแกรมที่จะช่วยเราห่อโค้ดที่เขียนขึ้นด้วย C/C++? ทำให้เรียกใช้งานภาษาระดับสูงเช่น Python, C# เป็นต้น เมื่่อดาวนโหลดเสร็จ ก็ให้แตกไฟล์ และติดตั้งตามเว็บที่เราไปดาวน์โหลดมา ซึ่งในเว็บจะเห็นรูปประกอบการอธิบาย ก็ให้ทำตามนั้น? เพื่อให้สามารถรันผ่านคอมมานไลน์ได้
แต่ถ้าสรุปวิธีติดตั้ง swig ง่ายๆ ก็คือ
- แตกไฟล์ zip ที่ดาวน์โหลดมา แล้วนำไปวางไว้ที่โฟลเดอร์ไหนก็ได้? ยกตัวอย่างผมวางไว้ที่ D:\Program\swigwin-3.0.12 ซึ่งควรจะเห็นตัว?swig.exe อยู่ใต้โฟล์เดอร์ swigwin-3.0.12 นะครับ เป็นต้น
- จากนั้นไปเซท ?environment variable?ของวินโดวส์ ให้ path มีค่า ;D:\Program\swigwin-3.0.12 นี้ต่อท้ายค่าเก่า
6) ไปโฟลเดอร์ pafprocess
cd tf_pose/pafprocess
จากนั้นก็รันคำสั่งเพื่อเชื่อมโค้ด python เข้ากับโค้ดที่เขียนจาก C++ ครับ
swig -python -c++ pafprocess.i && python setup.py build_ext --inplace
หมายเหตุ ถ้าคำสั่งรัน swing แล้วหา path ไม่เจอ ก็ให้เรียก swing.exe เต็ม path บนคอมมานไลน์แล้วกัน เช่น
D:\Program\swigwin-3.0.12\swig -python -c++ pafprocess.i && python setup.py build_ext --inplace
เสร็จแล้วอย่าลืม cd กลับมาที่ tf-pose-estimation
cd ..\..
ควรอยู่ที่ไดเรคเทอรี่ tf-pose-estimation นะครับ
7) ดาวน์โหลดโมเดลที่ถูกเทรนแล้ว?คือโปรเจคนี้มี 2 โมเดล
- cmu ทำงานช้า แต่ได้ครบทุกฟีเจอร์ของ Open pose
- mobilenet_thin ทำงานเร็ว เพราะลดฟีเจอร์ต่างๆ ลง
ซึ่งโมเดลตัวที่ 1 ไม่ได้เก็บอยู่ในโปรเจค? tf-pose-estimation ต้องไปดาวน์โหลดมาเองที่นี้
http://www.mediafire.com/file/qlzzr20mpocnpa3/graph_opt.pb
จากนั้นแตกไฟล์?graph_opt.pb วางไว้ที่โฟลเดอร์?tf-pose-estimation\models\graph\cmu\graph_opt.pb
8) ทดสอบว่าใช้งานได้ยัง ด้วยคำสั่งต่อไปนี้
python run.py --model=mobilenet_thin --resize=432x368 --image=./images/p1.jpg
9) คำสั่งรันต่อไปนี้ มันจะไปเปิดกล้องเว็บแคม แล้วเราก็ลองเล่นได้เลยครับ
python run_webcam.py --model=mobilenet_thin --resize=432x368 --camera=0
ข้อสังเกต คำสั่ง?run.py กับ run_webcam.py จะอยู่ใต้??โฟลเดอร์ tf-pose-estimation นะครับ เข้าให้ถูกโฟลเดอร์นะครับ
ในส่วนตัวโค้ดไปไล่เองแล้วกันนะครับ?แต่พอไกด์ไลน์ได้นิดหน่อย
e = TfPoseEstimator(get_graph_path("mobilenet_thin"), target_size=(w, h)) humans = e.inference(image) image = TfPoseEstimator.draw_humans(image, humans, imgcopy=False)
โค้ดข้างบน ตรงบรรทัดแรก เราจะบุเป็นโมเดล “mobilenet_thin” ตรง?get_graph_path(“mobilenet_thin”)
ซึ่งสามารถแก้เป็นอีกโมเดลหนึ่งได้เลยคือ “cmu” ก็ที่เราไปดาวน์โหลดไฟล์?cmu\graph_opt.pb ก่อนหน้านี้แหละครับ
API ตัวนี้ง่ายครับ หลักการทำงานในโค้ด เราแค่ส่งรูปด้วยประโยค?e.inference(image)
ผลการทำงานจะได้ค่าออกมาเก็บไว้ในตัวแปร humans
โดยมันจะเก็บข้อมูลจุดต่างๆ ของร่างกายมนุษย์ เช่น ตำแหน่งข้อมือ อยู่ตำแหน่ง x,y ตรงไหนในรูปบ้าง
จากนั้นจะนำข้อมูลที่เป็นตัวเลขพวกนี้ มาวาดรูปเป็นเส้นเชื่อมโยงแต่ละจุดด้วยประโยค
image = TfPoseEstimator.draw_humans(image, humans, imgcopy=False)
คงพอนึกภาพออกนะ ข้อมูลที่ AI ให้ออกมามันเป็นแค่ตัวเลข
แล้วแต่เราจะนำตัวเลขไปแปลความหมาย และประยุกต์ใช้อย่างไรต่อไป
ส่วนเวลานำไปใช้กับไฟล์วีดีโอ หรือกล้องเว็บแคมแบบเรียลไทม์ ก็ให้อ่านรูปที่ละเฟรม แล้วโยนเข้า AI
จากนั้นนำผลลัพธ์ที่ได้มาวาดรูปลากเส้นเชื่อมโยงแต่ละจุด ซึ่งรูปพวกนี้ที่เปลี่ยนไป ก็นำกลับมาเล่นวีดีโอใหม่
หมายเหตุ นอกจาก OpenPose แล้ว ก็ยังมีอีกโปรเจคที่ทำได้คล้ายกัน
คือ AlphaPose?https://github.com/MVIG-SJTU/AlphaPose
และ Posenet?https://github.com/tensorflow/tfjs-models/tree/master/posenet
แนะนำหนังสือ AI (ปัญญาประดิษฐ์)
“AI ไม่ยาก เข้าใจได้ด้วยเลขม.ปลาย? (เนื้อหาภาษาไทย) เล่ม 1”?
เขียนโดย แอดมินโฮ โอน้อยออก