- ระหว่างมองหาแอปเพื่อเข้าร่วม "Push-Up Challenge วันละ 100 ครั้ง" ของ Cancer Research UK จึงตัดสินใจลองทำอะไรสนุก ๆ ที่นับจำนวนวิดพื้นด้วยตัวเอง
- สำรวจเฟรมเวิร์ก Core Motion ของ iOS
- ระหว่างหาวิธีใช้ข้อมูลจากเซ็นเซอร์ จึงเลือกใช้
CMHeadphoneMotionManager เพื่อดึงข้อมูลการเคลื่อนไหวจาก AirPods
- Core Motion ให้ข้อมูลจาก accelerometer, gyroscope และ magnetometer
- มีประโยชน์สำหรับการวัดการเคลื่อนไหวและทิศทางที่แม่นยำและเชื่อถือได้
- ต้องขอสิทธิ์เข้าถึงข้อมูลเพื่อคุ้มครองความเป็นส่วนตัวของผู้ใช้
- แนวคิดในการนำ AI มาใช้
- มีแอปจำนวนมากที่ใช้เฟรมเวิร์กอย่าง ARKit อยู่แล้ว
- จึงมองว่า AI น่าจะช่วยให้ทำไอเดียนี้ให้เป็นจริงได้
- ใช้ GPT ที่เรียนรู้เกี่ยวกับ Core Motion เพื่อถามคำถามด้วยภาษาธรรมชาติและหาทางแก้ปัญหา
- การออกแบบสถาปัตยกรรมของแอป
- Motion Manager: สตรีมข้อมูลจากเซ็นเซอร์และจัดการการอัปเดตจากเซ็นเซอร์ของอุปกรณ์
- Pushups Detector: วิเคราะห์ข้อมูลที่สตรีมเข้ามา เพื่อตรวจจับและนับการวิดพื้นตามค่า threshold ที่กำหนดไว้ล่วงหน้า
- SwiftUI View: มอบ UI แบบตอบสนองที่อัปเดตแบบเรียลไทม์ขณะผู้ใช้กำลังวิดพื้น
- การพัฒนา Motion Manager
- ใช้ delegate pattern เพื่อเข้าถึงค่าที่อัปเดต
- ใช้
CMHeadphoneMotionManager เพื่อดึงข้อมูล motion ของอุปกรณ์
- ใช้
startUpdates() และ stopUpdates() เพื่อเริ่มและหยุดการอัปเดตจากเซ็นเซอร์
- อัปเดตค่า
pitch และ accelerationY พร้อมแจ้งไปยัง delegate
- การพัฒนา Pushups Detector
- นำแนวคิดเรื่อง "session" มาใช้เพื่อเริ่มและหยุดการวิเคราะห์สตรีมข้อมูล
- ตีความข้อมูลดิบเพื่อพิจารณาท่าทางของผู้ใช้และตรวจว่ากำลังวิดพื้นหรือไม่
- ใช้ค่า threshold เพื่อตรวจจับช่วงลงและช่วงขึ้นของการวิดพื้น แล้วเพิ่มจำนวนครั้ง
- พัฒนา
MotionManagerDelegate เพื่อจัดการการเปลี่ยนแปลงของค่า acceleration และ pitch
- สร้าง View แบบเรียบง่ายด้วย SwiftUI
- ประกอบด้วยปุ่มเริ่ม/หยุด session และตัวเลขขนาดใหญ่สำหรับแสดงจำนวนครั้งของการวิดพื้น
- เพิ่มข้อความสำหรับบอกว่าท่าทางของผู้ใช้ถูกต้องหรือไม่
- การวิเคราะห์และทำภาพข้อมูล
- ใช้ Swift Charts เพื่อทำภาพข้อมูลดิบจากเซ็นเซอร์และระบุแพตเทิร์น
- พบแพตเทิร์นการวิดพื้นในค่า acceleration แกน Y คือช่วงลง (-1.0) และช่วงขึ้น (+0.5)
- ปรับค่า threshold ผ่านการทดสอบจริงเพื่อเพิ่มความแม่นยำ (+0.4, -0.7)
- เสน่ห์ของการติดตามแบบเรียลไทม์
- เมื่อสวม AirPods แล้วกดปุ่มเริ่ม จำนวนครั้งของการวิดพื้นจะอัปเดตโดยอัตโนมัติ
- ทำงานได้โดยแทบไม่ต้องมีการโต้ตอบจากผู้ใช้
- สิ่งที่ได้เรียนรู้จากโปรเจกต์
- ตอกย้ำความสำคัญของการตรวจสอบตั้งแต่เนิ่น ๆ และการปรับปรุงแบบวนซ้ำ
- รู้สึกถึงความสนุกและความพึงพอใจจากการสร้างสิ่งที่มีความหมาย
- ยังมีจุดที่ควรปรับปรุง เช่น UI และการนับการวิดพื้นข้ามหลายวัน
- เพิ่ม audio feedback ผ่าน AirPods เพื่อยกระดับประสบการณ์ผู้ใช้นอกเหนือจากอินเทอร์เฟซแบบภาพ
- บทสรุป
- พัฒนาแอปภายใน 24 ชั่วโมงที่ผสาน Core Motion, SwiftUI และ AI เพื่อเพิ่มมิติใหม่ให้กับการติดตามฟิตเนส
- ความท้าทายสำคัญคือการคิดว่าจะนำเทคโนโลยีใหม่ไปใช้แก้ปัญหาในชีวิตประจำวันได้อย่างไร
2 ความคิดเห็น
พอมาคิดดูอีกที Galaxy Watch ที่นับจำนวนครั้งของ 3 ท่าหลักได้เนี่ย สุดยอดจริง ๆ
เมื่อหลายปีก่อนผมเคยทำแอปชาเลนจ์วิดพื้นชื่อ Thirty ที่ใช้เซ็นเซอร์ระยะใกล้ของ iPhone อยู่เหมือนกัน แต่ดูเหมือนว่าจะมีวิธีทำกับ AirPods ได้ด้วยนะครับ.. รู้สึกว่าความแม่นยำของเซ็นเซอร์ระยะใกล้น่าจะลดลงไปบ้างหลังจากเพิ่ม Dynamic Island เศร้า