- Trong lúc tìm ứng dụng để tham gia thử thách "100 lần chống đẩy mỗi ngày" của Trung tâm Ung thư Vương quốc Anh, tác giả quyết định tự làm một thứ thú vị có thể đếm số lần chống đẩy
- Khám phá framework Core Motion của iOS
- Trong quá trình tìm cách tận dụng dữ liệu cảm biến, tác giả quyết định dùng
CMHeadphoneMotionManager để khai thác dữ liệu chuyển động từ AirPods
- Core Motion cung cấp dữ liệu từ cảm biến như gia tốc kế, con quay hồi chuyển và cảm biến địa từ
- Hữu ích cho việc đo chuyển động và phương hướng một cách chính xác, đáng tin cậy
- Cần quyền truy cập dữ liệu để bảo vệ quyền riêng tư của người dùng
- Suy nghĩ về cách áp dụng AI
- Đã có rất nhiều ứng dụng sử dụng các framework như ARKit
- Thay vào đó, tác giả cho rằng AI có thể giúp hiện thực hóa ý tưởng
- Tác giả dùng GPT đã được cho học về Core Motion để đặt câu hỏi bằng ngôn ngữ tự nhiên và nhận lời giải
- Thiết kế kiến trúc ứng dụng
- Motion Manager: truyền luồng dữ liệu cảm biến và xử lý cập nhật từ cảm biến thiết bị
- Pushups Detector: phân tích dữ liệu truyền vào để phát hiện và đếm số lần chống đẩy theo các ngưỡng được định nghĩa trước
- SwiftUI View: cung cấp UI phản hồi theo thời gian thực, cập nhật khi người dùng thực hiện chống đẩy
- Triển khai Motion Manager
- Dùng mẫu delegate để truy cập các giá trị được cập nhật
- Dùng
CMHeadphoneMotionManager để lấy dữ liệu chuyển động của thiết bị
startUpdates() và stopUpdates() dùng để bắt đầu và dừng cập nhật cảm biến
- Cập nhật các giá trị
pitch và accelerationY, đồng thời thông báo cho delegate
- Triển khai Pushups Detector
- Giới thiệu khái niệm "session" để bắt đầu và dừng việc phân tích luồng dữ liệu
- Diễn giải dữ liệu thô để xác định tư thế của người dùng và xem có phải đang chống đẩy hay không
- Dùng ngưỡng để phát hiện pha hạ xuống và nâng lên của động tác chống đẩy rồi tăng bộ đếm
- Triển khai
MotionManagerDelegate để xử lý thay đổi của giá trị gia tốc và pitch
- Triển khai một view đơn giản bằng SwiftUI
- Gồm nút bắt đầu/kết thúc session và một con số lớn hiển thị số lần chống đẩy
- Cũng thêm văn bản cho biết tư thế của người dùng có đúng hay không
- Phân tích và trực quan hóa dữ liệu
- Dùng Swift Charts để trực quan hóa dữ liệu cảm biến thô và nhận diện mẫu
- Phát hiện mẫu hạ xuống (-1.0) và nâng lên (+0.5) của động tác chống đẩy trong gia tốc trục Y
- Điều chỉnh ngưỡng qua thử nghiệm thực tế để cải thiện độ chính xác (+0.4, -0.7)
- Sức hấp dẫn của việc theo dõi theo thời gian thực
- Chỉ cần đeo AirPods và nhấn nút bắt đầu là số lần chống đẩy tự động được cập nhật
- Hoạt động mà không cần người dùng tương tác thêm
- Những điều rút ra từ dự án
- Một lần nữa khẳng định tầm quan trọng của việc kiểm chứng sớm và cải tiến lặp lại
- Cảm nhận được niềm vui và sự thỏa mãn khi tạo ra thứ gì đó có ý nghĩa
- Vẫn còn điểm cần cải thiện như UI và việc đếm số lần chống đẩy qua nhiều ngày
- Bổ sung phản hồi âm thanh qua AirPods để cải thiện trải nghiệm người dùng ngoài giao diện trực quan
- Kết luận
- Kết hợp Core Motion, SwiftUI và AI để phát triển trong 24 giờ một ứng dụng mang lại chiều hướng mới cho theo dõi thể dục
- Điều quan trọng là dám thử thách cách áp dụng công nghệ mới vào các vấn đề thường ngày
2 bình luận
Đúng là Galaxy Watch thật đáng nể khi có thể đếm số lần tập của 3 bài nâng chính.
Vài năm trước tôi từng làm một app thử thách chống đẩy tên là Thirty dùng cảm biến tiệm cận của iPhone, hóa ra cũng có cách làm bằng AirPods nhỉ.. Có vẻ sau khi thêm Dynamic Island thì độ chính xác của cảm biến tiệm cận đã giảm đi đôi chút huhu