gstreamer บน Windows

qtgst-win

จริงๆเขียนโปรแกรมแบบนี้มาหลายปีแล้ว แต่วิธีการก็ต่างกันไปเรื่อยๆครับ คราวนี้มาเขียนบน Windows เพราะเริ่มจะกลับมา deploy งานบน x86 และ win10 บ้าง

ใช้ gstreamer บน Windows ค่อนข้างน่าเวียนหัว โดยเฉพาะเมื่อ อยากใช้ qt-gstreamer และ ms visual studio compiler ทำให้รู้ว่าการมี pkg-config บน linux ช่วยได้เยอะ แต่ลอง pkg-config (win 64) แล้วมัน crash ก็งงๆอยู่ว่าทำไม เดี๋ยวค่อยหาสาเหตุอีกที

gstreamer นี่เอามาใช้ เพื่อ แสดง live preview จาก stream rtsp ของกล้อง IP

ตอนแรกจะใช้ command line ด้วย ffmpeg เพื่อ capture ภาพ ติดตรงต้องเก็บเป็นไฟล์ก่อน แล้วถึงจะดึงภาพมาแสดงได้ พอรู้ว่า OpenCV สามารถดึงภาพจาก stream rtsp ได้ด้วย ก็เลยเปลี่ยนมาใช้ เพราะทำให้สามารถเอามาทำ image processing ต่อและเอาไปแสดงบน Qt/QML Quick control ได้โดยการ copy memory ได้เลย ไม่ต้อง save ก่อน (เอ แต่เดี๋ยวก็ต้อง save อยู่ดีนี่ – – !) ส่วนนี้ต้องให้มันทำงาน แยก thread ออกมาจาก main thread ที่ทำ GUI ไม่งั้น live preview ก็จะกระตุกเวลา capture ภาพ อันนี้เป็นสิ่งที่ผมชอบใช้ Qt เพราะทำให้การใช้ thread เป็นเรื่องง่ายขึ้นเยอะ

ข้อสังเกต คือปัจจุบัน สามารถแยกงานออกแบบ GUI ออกมาได้เกือบสิ้นเชิง ด้วยการใช้ Qt/QML ซึ่งดีต่อการทำงานเป็นทีมมาก

สุดท้าย เอา command line สำหรับ capture ภาพจาก stream rtsp มาฝาก มี 2 วิธี

  1. ใช้ gstreamer แต่คำสั่งนี้ บางทีก็ capture ไม่ได้ ไม่รู้ทำไมเหมือนกัน
    D:\gstreamer\1.0\x86_64\bin>gst-launch-1.0  rtspsrc location=”rtsp://admin:admin@192.168.1.108:554″ latency=10 num_buffers=10 ! decodebin ! videoconvert ! pngenc snapshot=TRUE ! filesink location=img.png
  2. ใช้ ffmpeg อันนี้ ชัวร์ป้าบ
    ffmpeg.exe -i rtsp://192.168.1.xx:554 -y -f image2 -vframes 1 test.jpg

อัพเดต 10 มี.ค. 2560 ไม่รู้มีใครเจอเหมือนกับผมมั้ย การใช้ OpenCV เปิด stream จะมี dalay อยู่พอสมควร เมื่อเทียบกับ gstreamer ที่สามารถกำหนด option เพื่อลด delay ได้ สุดท้ายก็เลยเปลี่ยนมาใช้การ capture frame ด้วย gstreamer ครับ

อ่านบัตรประชาชนรุ่นใหม่

ไม่ค่อยได้มาเขียนในนี้เท่าไรเลยพักนี้ ด้วยเหตุที่ทำหลายอย่างพร้อมๆกัน หากจะมีอะไรอยากเขียนนิดๆหน่อยๆก็ไปเขียนลงใน facebook แบบทันทีทันใดเลย

ปลายปีอีกละ ก็เอาซะหน่อย ลองสรุปดูว่าทำอะไรไปบ้าง

  • ความคืบหน้าการเปิด mocap studio ก็ต้องเลื่อนออกไปก่อน กำลังศึกษา 3D modeling จากประสบการณ์การทำเดโม การพูดคุยกับ modeller รวมทั้ง animator ยังต้องพัฒนาการสื่อสาร ประเด็นหลักคือ เรายังรู้ด้านกราฟิกน้อยเกินไป แม้ว่าจะมีความรู้ด้าน technical และเครื่องมือพอสมควรแล้ว แต่ยังไม่สามารถทำงานร่วมกันได้อย่างราบรื่น ก็เลยต้องถอยมาตั้งหลักก่อน
  • หลังจากที่ทำ signage ทำ kiosk มาบ้างแล้ว ปีหน้าจะเริ่มโปรเจ็คใหม่ๆ อย่างเช่น การทำตู้ check-in , car parking system และ target board ในโรงงาน จากที่ปีนี้ ได้งานเขียนทั้ง อ่าน 1D, 2D barcode, อ่านบัตรประชาชน, RFID รวมทั้งการใช้งานเครื่องพิมพ์ใบเสร็จ ก็ทำมาหมดแล้ว ต่อไปก็จะพัฒนา ตู้ที่สามารถจ่ายบัตร ทอนเงินได้ ยังมี requirement อ่านข้อมูลจาก passport เข้ามาด้วย

พูดถึงการอ่านบัตรประชาชน เคยเขียนโปรแกรมไปเมื่อนานมาแล้ว โดยอาศัยข้อมูลจาก code c# ที่มีผู้เผยแพร่เอาไว้ (ThaiNationalIDCard) มาแปลงเป็น c++ เมื่อเร็วๆนี้ได้พบว่า บัตรประชาขนมีรุ่นใหม่ออกมา และโค้ดเดิมไม่สามารถอ่านได้ ก็ได้ข้อมูลจากท่านเดิมนี่ละที่อุตส่าห์มาอัพเดตโค้ดไว้ ขอขอบคุณมา ณ ที่นี้ด้วยครับ เพราะได้ลองเข้าไปหาข้อมูลในเว็บของกรมการปกครอง ก็ไม่อยู่เสียแล้ว (อันนี้ไม่เข้าใจ) สอบถามจากผู้ขายเครื่องอ่านบัตร เค้าก็ไม่อยากตอบเท่าไร เพราะเค้าขายโปรแกรมด้วย (อันนี้ก็พอเข้าใจ)

LoRa

ลองสั่งทำ PCB บอร์ดมาจากต่างประเทศ สำหรับการทำเดโมหรือทดลอง ราคาไม่แพงเลยครับ เดี๋ยวนี้ไอซีทำออกมาเป็นโมดูลมากขึ้น ทำให้เราเอามาพัฒนาต่อยอดได้ง่ายและรวดเร็วกว่าเมื่อก่อน ดูอย่างเจ้า LoRasPi ที่ผมสั่งทำจำนวนไม่กี่บอร์ดก็ยังทำให้ได้ รายได้ก็กลับไปที่นักพัฒนาด้วย CooL!

แต่ว่ายังไม่ได้สั่งโมดูล LoRa เข้ามาจำหน่ายเลย รอก่อนนะเจ้าบอร์ด เอิ๊ก เอิ๊ก

IMG_20160823_104300-s

รีโมทควบคุมหุ่นยนต์

2wheels-3

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

  1. จอยต่อกับโมดูล nrf24l01
  2. wifi to serial
  3. bluetooth
  4. raspberry pi

1 กับ 2 ก็น่าสนใจ ติดตรง ต้องหาจอยมาใช้ร่วมกัน ขอหาก่อน
3 กับ 4 นี่ คิดถึง wiimote ขึ้นมา wiimote เป็น HID device (เหมือนเมาส์ คีย์บอร์ด จอยสติ๊ก) ใช้ bluetooth ในการสื่อสาร มันมีประเด็นขึ้นมาให้เลือกคือ

A. ถ้าเลือกใช้ arduino ต่อ จะคุยกับ HID bluetooth device ได้ ต้องมี USB host shield และ bluetooth USB dongle วิธีนี้โค้ดที่เคยเขียนควบคุมมอเตอร์ไม่ต้องเปลี่ยน

B. ถ้าเลือกใช้ raspberry pi แทน มี usb port ให้เสียบ bluetooth dongle หรือ ถ้าเป็น pi 3 ก็มีให้เลย(แต่แค่ควบคุมหุ่นยนต์ ไม่น่าใช้ น่าจะเปลืองแบตกว่า pi1 หรือ pi2) แต่ ต้องหาทางควบคุมทิศทางและความเร็วของมอเตอร์ ซึ่งถ้าจะใช้ hardware ก็ง่าย มีบอร์ด pwm เช่นของ adafruit เอามาต่อใช้ หรือถ้าจะเป็น software ก็ใช้ pi-blaster ซึ่งใช้ DMA ในการควบคุม เท่าที่ดูก็มีความแม่นยำโอเค

อืม ตกลงว่า ลองข้อ A ก่อนละกัน น่าจะง่ายที่สุด bluetooth usb dongle ก็มีอยู่แล้ว เหลือสั่ง usb host shield มาเท่านั้น

แต่ถ้าของมาช้า ก็อาจจะลอง B ก่อน ไว้จะมาอัพเดต ตอนต่อไป

อัพเดต พอดีไปเจอ joystick shield สามารถใช้ร่วมกับ nrf24l01 และ arduino ทำเป็นรีโมทคอนโทรลได้ ก็เป็นอีกหนึ่งทางเลือกครับ

RFID overview

พอดีจะใช้งาน RFID หลายๆแบบ ก็เลยต้องทบทวนความรู้กันนิดหน่อย ส่วนใหญ่เอามาจาก http://www.idautomation.com/barcode-faq/rfid/ และ http://blog.atlasrfidstore.com/

RFID (Radio Frequency Identification) เอามาใช้งานในด้าน ระบุตัวตน, access control เดี๋ยวนี้เอามาใช้งานหลากหลายขึ้น เช่น เก็บค่าทางด่วน, logistics, supply chain

ชนิดของ tag แบ่งตามความถี่ที่มันทำงาน

  • Low frequency, or LF, (125 – 134 kHz)
  • High frequency, or HF, (13.56 MHz)
  • Ultra-high frequency, or UHF, (433, and 860-960 MHz)

LF, HF, UHF ต่างก็มีข้อดี ข้อเด่นต่างกันไป เช่น LF ทะลุผ่านแผ่นโลหะบางๆได้ แต่ระยะการอ่านก็ได้เพียงสั้นๆ ส่วน UHF อ่านเขียนความเร็วสูงกว่า ระยะไกลกว่า แต่ก็ถูกลดทอนได้ง่ายกว่า

การเก็บข้อมูลใน tag แบ่งเป็น 3 ชนิด
class 0 – data ถูก encoded หรือ เขียนลงไป จากโรงงาน เรียกว่าเป็น read-only tag
class 1 – เอามาเขียนเองได้ แต่ได้แค่ครั้งเดียว เรียกอีกแบบ ว่า GEN1
class 1 GEN 2 EPC – อ่านเขียนได้หลายครั้ง มีฟีเจอร์เพิ่มเติมเข้าไปได้ เช่น lock after write, CRC read verification

ข้อดีของการใช้ RFID นั้นมีเยอะ ดูได้จากการเอามาใช้งานในหลายด้าน มาดูข้อเสียดีกว่า

ข้อเสีย

  1. เนื่องจากมันใช้สัญญาณวิทยุ ดังนั้น ถ้ามีการรบกวนเกิดขึ้น การอ่านก็จะทำไม่ได้ คือ มองไม่เห็น tag นั่นคือเรื่องของความแม่นยำของข้อมูล เช่น ในโกดัง ถ้าอ่านไม่เจอ tag อาจไม่ได้หมายความว่ามันไม่ได้อยู่ที่นั่นก็ได้ อาจจะโดนอะไรบังหรืออยู่ในตำแหน่งที่เครื่องอ่านไม่สามารถอ่านได้
  2. สาเหตุเดียวกับข้อแรก มันก็อาจจะถูกดักจับข้อมูล โดยผู้ไม่หวังดีได้

ชนิดของหน่วยความจำใน GEN 2 tag แบ่งได้เป็น 4 ชนิด คือ

  1. reserved – เอาไว้ เก็บ access และ killing password
  2. EPC – มีขนาดทั่วไปอย่างน้อย 96 bits เอาไว้เก็บ Electronics Product Code ตามชื่อมันนั่นเอง
  3. TID – เก็บ tag ID เปลี่ยนแปลงไม่ได้
  4. user – เป็น memory ส่วนที่เพิ่มเติมเข้า ให้ user สามารถเก็บข้อมูลลงไปเพิ่มเติมได้ ขนาดก็มีได้หลายขนาด เช่น 1k, 4k หรือ 8k bytes

Node.js กับ ARM device และ ubuntu 12.04

zigbee-meshลองเอา z-stack linux gateway ขึ้นมา ด้วยความที่ ไม่มีบอร์ด beaglebone มองซ้ายขวา มี pandaboard เก่าอยู่ cpu พี่น้องกันน่าจะใช้แทนกันได้ ก็ปรากฏว่า ได้จริงๆ แต่ดันมาเจอปัญหาใหม่

พยายามลง node.js เพื่อใช้งานทำ web server app สำหรับ IoT อย่างที่เค้านิยมทำกัน เลยลองลงจาก repository ปกติ แต่ไม่สามารถทำงานได้ cpu 100% ตลอดเวลา พยายามลง ppa ที่เค้าแนะนำกัน ก็ไม่ได้อีก หาจนเจอว่า เวอร์ชั่นใหม่ๆนั้น ไม่สามารถทำงานได้กับ ubuntu version เก่าๆ สืบเนื่องจาก javascript V8

ก็ต้องเอา version เก่าที่ support ARMV7 มาลงถึงจะใช้งานได้ ต่อมาก็มาติดปัญหาเรื่อง cyclic dependencies อีก (ด้วยความที่ลองแก้ปัญหาหลายวิธีมาก เลยสรุปไม่ได้ว่า สุดท้ายแล้วแก้ได้อย่างไร ทำทั้ง clear cache ลบ module ออกไปทั้ง folder เองเลยก็ทำ) แต่เรียกได้ว่า ลองใช้งาน node.js ครั้งแรก ก็เจอสารพัดปัญหา

นี่ก็เป็นอย่างนึง ที่คิดว่า ถ้าเราเอาสารพัดเทคนิคมายำรวมๆกัน ให้เป็น solution ขึ้นมา ก็จะสร้าง dependency problem ขึ้นมาเยอะมาก ไม่สนุกที่ต้องมานั่งหา root cause และจัดการกับผลกระทบที่เกิดกับส่วนอื่นๆ

C++ อย่างเดียวจบเลยดีกว่ามั้ย อย่างที่นำเสนอในตอนที่ผ่านๆมา

Qt Web framework

สมัยนี้จะเขียนโปรแกรมอะไรก็ต้องเชื่อมต่อเข้ากับเว็บและฐานข้อมูลได้ ไม่เว้นแม้แต่ hardware จึงเป็นที่มาของคำว่า IoT ใช่มั้ยครับ อย่างตอนนี้ผมกำลังดูเรื่อง ZigbBee ซึ่งมันก็จะมี linux gateway ก็เลยจะอยากจะทำ web app ที่สามารถเข้าถึงและจัดการ device พวกนี้ได้บ้าง ดังนั้นจึงได้เวลาที่จะมานั่งหากันดูว่า คนที่ยังนั่งเขียน C++/Qt จะมี framework อะไรมั่งมั้ยนะ ที่มาช่วยทำเรื่องพวกนี้

ดูไปดูมา ก็เจอ 2 ตัวที่น่าลองคือ TreeFrog กับ Cutelyst (จริงๆ search google ขึ้นมามันก็เจอสองตัวนี้ก่อนเพื่อนน่ะแหละ อิอิ) เคยเลือกที่จะดู TreeFrog มาก่อนหน้านี้ ซึ่งดูแล้วใช้งานง่ายกว่า Cutelyst แต่เอาเข้าจริง สำหรับคนที่ไม่รู้คอนเซ็ปต์อะไรเลย แนะนำให้ลองเล่นกับ Cutelyst ก่อน เพราะมี tutorial เจาะไปทีละขั้น ทำให้เราเข้าใจได้ว่า web framework พวกนี้นั้น มีองค์ประกอบอะไรบ้าง เช่น เรื่องของ protocol parser, template engine, REST, การเขียนแบบ MVC และเรื่องของ ORM ซึ่งถ้าเป็น Cutelyst จะใช้หรือไม่ก็ได้ ซึ่งถ้าไม่ใช้ก็เขียนติดต่อฐานข้อมูลด้วย QtSql เอาเองก็ได้

ถ้าเข้าใจคอนเซ็ปต์แล้ว กลับไปเล่นกับ TreeFrog จะเข้าใจมันง่ายมากขึ้นเลย ส่วนใครชอบอันไหนมากกว่าก็เอาตามที่ท่านสบายใจเลยครับ

ทดลองเล่น ZigBee

ผมเริ่มสนใจ ZigBee ตั้งแต่ได้รู้จักและทดลองสินค้า smart home ของ xiaomi จริงๆก็ได้ยินชื่อมานานแล้ว แต่ที่เห็นขายกันเป็นโมดูลสำหรับนักพัฒนา จะเป็น xbee ซะมาก ราคาค่อนข้างสูง และผมก็ไม่ใช่นักอิเล็กทรอนิกส์จ๋าซะด้วย เลยไม่กล้าซื้อมาเล่น ผ่านมาหลายปี ตอนนี้พี่จีนทำโมดูลออกมาได้ถูกลงมาก (ที่พูดถึงนี่คือโมดูลที่ใช้ cc2530 ของ TI นะครับ) ประกอบกับยุค internet of things ทำให้ smart things หรืออุปกรณ์ต่างๆ ถูกเชื่อมต่อเข้ามาถึงคอมพิวเตอร์และมือถือได้ง่ายดายขึ้น เพื่อมอนิเตอร์และสั่งงาน ดังนั้นช่วงนี้จีงน่าเอามาศึกษา ผมก็เลยเริ่มเล่นและเขียนถึงมันนี่แหละครับ

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

เรื่องหลักการเรื่องอะไร มีคนศึกษาไว้เยอะแล้ว ลองเล่นเลยดีกว่า อิอิ ตัว cc2530 core โปรเซสเซอร์ มันก็คือ 8051 นั่นเอง เริ่มแรกก็หัดเขียนมันเพื่อควบคุม I/O port ต่างๆก่อน และมันมี serial port มาให้ด้วย ก็เริ่มอ่านค่าและสั่งงาน I/O ผ่าน serial port

ขั้นต่อมาเมื่อจะต้องทำให้มันคุยกันเองได้ระหว่างอุปกรณ์ ZigBee ด้วยกัน ทาง TI ก็ให้ framework เรามาเพื่อช่วยให้เราพัฒนา application ต่างๆได้ง่ายดายยิ่งขึ้น มันคือ ZStack นั่นเอง ดูเผินๆเหมือนเป็นระบบปฏิบัติการตัวนึงเลยทีเดียว ดูยุ่งยากมากขึ้นเยอะ แต่หากศึกษาตามตัวอย่างไปเรื่อยๆ ทดลองเล่นไป ก็จะเริ่มคุ้นเคยกับมันมากขึ้นนะครับ

ขั้นต่อไปก็คือ การที่เราต้องการติดต่อ ZigBee ผ่านทาง TCP/IP เน็ตเวอร์คได้ โดย TI ก็ได้ให้ Z-Stack Linux gateway มา ซึ่งเป็นโปรแกรม ที่เราสามารถเอามาลงใน ARM embedded board อย่าง BeagleBone ได้ (ก็มันของเจ้าเดียวกันนี่เนาะ) แต่ TI ก็ไม่ได้ใจร้ายขนาดนั้น มันมีทางที่เราสามารถนำ sourcecode มาคอมไพล์และรันบนบอร์ดอื่นได้เหมือนกัน เช่น Raspberry Pi โดยที่อาจจะต้องมีการปรับแก้อะไรนิดหน่อย

ขั้นสุดท้าย หากคิดจะมาทำเป็นโปรดักส์ก็คงเป็นเรื่องของความปลอดภัยในการรับส่งข้อมูล อันนี้ยังไม่ได้เข้าไปดูรายละเอียดเหมือนกัน

เดี๋ยวค่อยว่ากันไปเป็นตอนๆครับ

Qt5.6/OpenCV compilation on Raspbian Jessie

ยังไม่ได้ลอง Raspberry Pi 3 ตัวใหม่เลยครับ แต่วันนี้จะมาเล่าเรื่องการคอมไพล์ Qt และ OpenCV ให้ฟัง

สืบเนื่องจากการใช้งาน Qt บน Wheezy จากการทำ cross compilation ตาม http://www.ics.com/blog/building-qt-5-raspberry-pi ไปใช้งานคราวก่อน มีปัญหากับ qml/UI ไม่ทราบว่าเป็นเพราะอะไรเหมือนกัน พอต้องพัฒนาโปรแกรมต่อก็เลยตัดสินใจย้ายมา Jessie ตัวล่าสุด นี่อาจเป็นการตัดสินใจที่พลาดอีกครั้ง อย่างไรก็ดี ปัญหามีไว้ให้แก้ครับ ก็เลยตัดสินใจเปลี่ยนมาใช้ Qt5.6 ซะเลย ซึ่งก็นั่งคอมไพล์ใหม่เนื่องจาก ไม่อยากใช้งานแพคเกจ Qt/x11 ซึ่งทำให้การบูทช้า ก็เลยทำตาม https://wiki.qt.io/RaspberryPi2EGLFS ทำให้ได้ใช้ Qt แบบ cross platform development กะเค้ามั่ง ทดสอบ QML/UI แล้วไม่มีปัญหา

ต่อมาก็มาถึงเรื่องการใช้งาน OpenCV แน่นอนว่าก็ต้องใช้กับ RaspiCam เพื่อดีงภาพจากกล้อง ปัญหามันอยู่ตรงนี้ละฮะท่านผู้ชมฮะ เกิดปัญหาว่า compiler ของ cross กับบน jessie เวอร์ชั่นไม่ตรงกัน ซึ่งของ cross จะเก่ากว่าบน jessie ทำให้การคอมไพล์โปรแกรมไม่สำเร็จ หลังจากที่หาทางแก้อยู่สองวันสองคืน ก็สรุปได้ว่า ต้องกลับไปใช้ gcc4.8 สำหรับ jessie แล้วคอมไพล์ OpenCV ใหม่ รวมถึง dependency หรือ 3rd party ของมันด้วย จึงจะสามารถทำงานต่อได้

Screenshot from 2016-03-25 12:03:22การเขียนโปรแกรมจึงไม่ใช่แค่การเขียนโปรแกรมนะครับ …

14 Mocap : Motion Capture Studio

สวัสดีปีใหม่คร้าบ ปีใหม่ก็เอาข่าวล่าสุด สำหรับการเตรียมความพร้อมในการเปิดให้บริการ motion capture studio ของเรามาฝากกันนะครับ อีกไม่นานนี้แน่นอน
เพื่อเป็นการทดสอบและเก็บข้อมูลเพื่อการเตรียมความพร้อมก่อนการเปิดให้บริการ รวมไปถึงจะได้เอาข้อมูลไปใช้ทำ show reel เพื่อการประชาสัมพันธ์ต่อไป เราจึงทำการทดสอบการทำ motion capture ด้วยท่ารำหนุมานของโขน การแสดงซึ่งเป็นเอกลักษณ์ประจำชาติไทยของเรา และมีท่วงท่าที่ซับซ้อนเหมาะกับการทดสอบใช้งานครับ ตัววิดิโอข้างล่างนี้เป็นการเก็บ raw data กำลังรอ โมเดล 3d หนุมาน มาเพื่อจะใส่ท่ารำที่ได้จากการทำ mocap นี้เข้าไปครับ โปรดติดตาม