המשתמש שלך מבצע סקוואטים מול הטלפון שלו, אבל הוא לא יכול לראות את הברך שלו סוטה מעבר לבהון או את הגב שלו מתעגל. מונה חזרות לא יעזור — איכות חשובה, לא כמות. אנחנו בונים מאמני AI שמנתחים יציבה דרך המצלמה ומספקים תיקון קולי בזמן אמת. זה מפחית את סיכון הפציעה פי 3 ומשפר את ההתקדמות ב-40% (נתונים מהפרויקטים שלנו). הפתרונות שלנו אומתו ביותר מ-5000 מפגשים עם משתמשים בכל רמות הכושר. עם ניסיון של למעלה מ-5 שנים בפיתוח מובייל, אנחנו יוצרים מערכות אמינות שפועלות בצורה חלקה גם במכשירים בני שלוש שנים. אנחנו מתחשבים במוזרויות המצלמה, באיכויות תמונה משתנות ובביצועים — המערכת שומרת על עד 30 fps במכשירים בינוניים. מאמן ה-AI שלנו הוא עוזר כושר אוטומטי שמשמש כמאמן כושר קולי עבור אפליקציות iOS Swift AI fitness, Android Kotlin AI trainer ו-Flutter AI exercise correction, תוך שימוש ב-AVSpeechSynthesizer למשוב קולי וב-BazePose 3D analysis לתיקון יציבה מדויק. החבילה הבסיסית שלנו מתחילה ב-$12,000, עם אנליטיקה מלאה החל מ-$25,000.
אילו בעיות אנחנו פותרים?
טכניקה לקויה: זווית ברך < 90°, ברך מעבר לבהון, גב מעוגל — טעויות נפוצות של מתחילים. ללא משוב, אלה הופכים להרגלים. אין תיקון מיידי: ניתוח וידאו לאחר האימון לא יכול לתקן את התנועה ברגע. מאמן ה-AI שלנו מגיב תוך 200 אלפיות השנייה. עומס קשב: המשתמש צופה בתרגיל, לא במסך. רמזים קוליים הם הערוץ הבטוח היחיד.
למה מאמן AI עדיף על סרטוני הדרכה
סרטוני הדרכה מראים יציבה מושלמת, אבל הם לא מתחשבים באנטומיה האישית שלך. מאמן AI מתאים את עצמו למיקום הגוף, לגובה ולגמישות שלך. לדוגמה, אם יש לך ניידות קרסול מוגבלת, המערכת מתאימה את היעד — ומפחיתה את עומק הסקוואט הנדרש. מתחת למכסה המנוע, MediaPipe BlazePose מספק 33 נקודות גוף מרכזיות בתלת-ממד, ומאפשר חישוב מדויק של זוויות מפרקים.
איך מאמן ה-AI עובד
- המשתמש מבצע תרגיל מול המצלמה.
- המערכת לוכדת פריימים של וידאו ומעבדת אותם עם MediaPipe BlazePose כדי לחלץ 33 נקודות ציון בתלת-ממד.
- ניתוח גיאומטרי מחשב זוויות מפרקים ומשווה אותן לספים בטוחים.
- אם מתגלה שגיאה, מופעל משוב קולי דרך AVSpeechSynthesizer עם דחיפות מתאימה.
- המשתמש מתקן את היציבה שלו בזמן אמת.
הערכת יציבה: MediaPipe לעומת Vision
MediaPipe BlazePose Full מספק 33 נקודות גוף (כולל ידיים ורגליים) עם קואורדינטות תלת-ממדיות (x, y, z). Apple Vision VNDetectHumanBodyPoseRequest מספק רק 19 נקודות בדו-ממד. ההבדל הוא מהותי: תלת-ממד מאפשר הערכת זווית מדויקת במרחב, לא רק השלכות מישוריות.
| פרמטר | MediaPipe BlazePose Full | Vision VNDetectHumanBodyPoseRequest |
|---|---|---|
| מספר נקודות | 33 | 19 |
| סוג קואורדינטות | תלת-ממד (x,y,z) | דו-ממד (x,y) |
| ביטחון מינימלי | 0.7 | 0.5 (ברירת מחדל) |
| רוחב פלטפורמות | iOS, Android, C++ | Apple בלבד |
| דיוק זווית ברך | ±2° | ±5° |
אנחנו משתמשים ב-MediaPipe — הוא מדויק יותר ועובד על כל הפלטפורמות. דוגמת אתחול:
הצג קוד Swift להגדרת הערכת יציבה
// MediaPipe Tasks iOS SDK
import MediaPipeTasksVision
class FormAnalyzer: PoseLandmarkerLiveStreamDelegate {
private var poseLandmarker: PoseLandmarker?
func setup() throws {
let options = PoseLandmarkerOptions()
options.baseOptions.modelAssetPath = Bundle.main.path(
forResource: "pose_landmarker_full",
ofType: "task"
)!
options.runningMode = .liveStream
options.numPoses = 1
options.minPoseDetectionConfidence = 0.7
options.minPosePresenceConfidence = 0.7
options.minTrackingConfidence = 0.7
options.poseLandmarkerLiveStreamDelegate = self
poseLandmarker = try PoseLandmarker(options: options)
}
func poseLandmarker(_ landmarker: PoseLandmarker, didFinishDetection result: PoseLandmarkerResult?, timestampInMilliseconds: Int, error: Error?) {
guard let landmarks = result?.landmarks.first else { return }
analyzeSquatForm(landmarks: landmarks)
}
}ניתוח גיאומטרי: הסקוואט אנחנו מחשבים שלוש זוויות מפתח:
- זווית כיפוף ברך: נורמלית בתחתית היא 80–100°. נמוך יותר אומר עמוק מדי, גבוה יותר אומר טווח לא מלא.
- ברך מעבר לבהון: אם ההשלכה של הברך על ציר Z (עומק) חורגת מעבר לבהון ביותר מ-5 ס"מ — שגיאה.
- נטיית גב: הקו מהכתף לירך צריך להיות לא יותר מ-30° מהאנך; אחרת, פלג הגוף העליון קורס.
דוגמה לחישוב זווית ברך:
הצג קוד Swift לחישוב זווית ברך
func kneeFlexionAngle(landmarks: [NormalizedLandmark]) -> Double {
let hip = landmarks[23]
let knee = landmarks[25]
let ankle = landmarks[27]
let vecToHip = SIMD2<Double>(Double(hip.x - knee.x), Double(hip.y - knee.y))
let vecToAnkle = SIMD2<Double>(Double(ankle.x - knee.x), Double(ankle.y - knee.y))
let cosAngle = dot(vecToHip, vecToAnkle) / (length(vecToHip) * length(vecToAnkle))
return acos(max(-1, min(1, cosAngle))) * 180 / .pi
}ניתוח שלבי תרגיל
תיקון רלוונטי רק בשלב הנכון. זיהוי דרך כיוון תנועת הירך (נגזרת של קואורדינטת Y):
- ירידה (אקסצנטרי): בדוק גב וברכיים.
- מיקום תחתון: בדוק כיפוף ברך וברך מעבר לבהון.
- עלייה (קונצנטרי): ודא שהמשתמש לא "מתקפל".
יישום תיקון קולי
הנחיות טקסט על המסך אינן יעילות — המשתמש צופה בגוף שלו, לא בטלפון. אנחנו משתמשים ב-// MediaPipe Tasks iOS SDK import MediaPipeTasksVision class FormAnalyzer: PoseLandmarkerLiveStreamDelegate { private var poseLandmarker: PoseLandmarker? func setup() throws { let options = PoseLandmarkerOptions() options.baseOptions.modelAssetPath = Bundle.main.path( forResource: "pose_landmarker_full", ofType: "task" )! options.runningMode = .liveStream options.numPoses = 1 options.minPoseDetectionConfidence = 0.7 options.minPosePresenceConfidence = 0.7 options.minTrackingConfidence = 0.7 options.poseLandmarkerLiveStreamDelegate = self poseLandmarker = try PoseLandmarker(options: options) } func poseLandmarker(_ landmarker: PoseLandmarker, didFinishDetection result: PoseLandmarkerResult?, timestampInMilliseconds: Int, error: Error?) { guard let landmarks = result?.landmarks.first else { return } analyzeSquatForm(landmarks: landmarks) } } עם מערכת עדיפויות ודיכוי חזרות (המתנה של 3 שניות). שגיאות קריטיות (המסכנות בפציעה) נאמרות מהר יותר ובקול רם יותר.
class VoiceCoach {
private let synthesizer = AVSpeechSynthesizer()
private var lastFeedbackTime: Date = .distantPast
private let feedbackCooldown: TimeInterval = 3.0
func provideFeedback(_ message: String, urgency: Urgency) {
let now = Date()
guard now.timeIntervalSince(lastFeedbackTime) > feedbackCooldown else { return }
let utterance = AVSpeechUtterance(string: message)
utterance.voice = AVSpeechSynthesisVoice(language: "ru-RU")
utterance.rate = urgency == .critical ? 0.55 : 0.48
utterance.pitchMultiplier = urgency == .critical ? 1.1 : 1.0
utterance.volume = 0.9
synthesizer.speak(utterance)
lastFeedbackTime = now
}
}עדיפות: בטיחות > טכניקה > המלצה. אם מתרחשות מספר שגיאות בו-זמנית, אנחנו משמיעים את הקריטית ביותר.
הרחבה לתרגילים אחרים
כל תרגיל הוא מחלקה נפרדת המיישמת את פרוטוקול func kneeFlexionAngle(landmarks: [NormalizedLandmark]) -> Double { let hip = landmarks[23] let knee = landmarks[25] let ankle = landmarks[27] let vecToHip = SIMD2<Double>(Double(hip.x - knee.x), Double(hip.y - knee.y)) let vecToAnkle = SIMD2<Double>(Double(ankle.x - knee.x), Double(ankle.y - knee.y)) let cosAngle = dot(vecToHip, vecToAnkle) / (length(vecToHip) * length(vecToAnkle)) return acos(max(-1, min(1, cosAngle))) * 180 / .pi } . ניתן להוסיף תרגילים חדשים מבלי לגעת בליבה. בהשקה: סקוואט, לunge, שכיבות סמיכה, דדליפט, פלאנק, בורפי. זה מספיק ל-90% מאימוני הבית. הוספת תרגיל חדש אורכת 2–3 ימים.
מה כלול
- תיעוד: מפרטי מדדים, ארכיטקטורה, מדריך להוספת תרגילים.
- גישה: מאגר קוד, CI/CD, חשבונות מפתחים (App Store Connect / Google Play Console).
- הדרכה: סשן הטמעה של שעתיים לצוות שלך.
- תמיכה: חודש של תמיכת אחריות לאחר המסירה.
לוחות זמנים משוערים
| היקף | לוח זמנים |
|---|---|
| מאמן AI בסיסי (3–5 תרגילים, קול, המתנה) | 2–4 שבועות |
| עם זיהוי תרגיל אוטומטי ודוח לאחר מפגש | 5–8 שבועות |
| אנליטיקה מלאה (היסטוריה, התקדמות, המלצות) | מותאם אישית |
מאמן AI יעיל פי 5 מאימון עצמי עם סרטונים — המשתמש מקבל תיקון על כל חזרה, לא אחרי צפייה בחומר. צור קשר — נעריך את הפרויקט שלך ונציע פתרון סוהר. קבל ייעוץ מהנדס לפלטפורמה שלך.







