לקוח רוצה למדוד אורך של ספה מתמונה אחת — בלי סרט מדידה או ציוד מיוחד. יישמנו תכונה זו באפליקציות מובייל עם דיוק של עד 2% בתנאים מתאימים. הניסיון שלנו: 5+ שנים בפיתוח iOS/Android, 30+ פרויקטים עם AR וראייה ממוחשבת. אנו מציעים פתרון סוהר: מבחירת שיטה (LiDAR, SLAM, או עומק מונוקולרי) ועד אינטגרציה עם השרת שלך. קבלו ייעוץ — נעריך את הפרויקט שלכם תוך יום אחד.
איזו שיטת מדידה לבחור: LiDAR, SLAM, או עומק מונוקולרי?
ARKit/ARCore (LiDAR או SLAM) מדויק אך דורש תמיכת מכשיר. iPhone 12 Pro ומעלה עם LiDAR מספק דיוק של 1–3 ס"מ במרחקים של עד 5 מטרים. ARCore על Android ללא LiDAR גרוע יותר, עם שגיאה של 3–8 ס"מ.
הערכת עומק מונוקולרית עובדת על כל מכשיר ללא LiDAR, תוך שימוש ב-CNN להערכת עומק מפריים בודד. MiDaS, DPT, Depth Anything V2 הם מודלים עדכניים. הדיוק נמוך משמעותית מ-LiDAR אך מספיק למשימות רבות.
| שיטה | דיוק | דרישות מכשיר | מורכבות יישום |
|---|---|---|---|
| LiDAR (ARKit/ARCore) | 1–3 ס"מ | iPhone 12 Pro+, iPad Pro | בינונית |
| SLAM (ARKit/ARCore) | 3–8 ס"מ | מכשירים עם תמיכת ARKit/ARCore | בינונית |
| עומק מונוקולרי | 5–15% | כל מכשיר | גבוהה (רשת נוירונים) |
// iOS: выбор метода в зависимости от возможностей устройства
func selectMeasurementMethod() -> MeasurementMethod {
if ARWorldTrackingConfiguration.supportsSceneReconstruction(.mesh) {
return .lidarARKit // iPhone 12 Pro+, iPad Pro
} else if ARWorldTrackingConfiguration.isSupported {
return .slamARKit // ARKit без LiDAR
} else {
return .monocularDepth // фолбек на CoreML-модель
}
} מה משפיע על דיוק המדידה?
דיוק המדידה תלוי ישירות בתנאי הצילום: תאורה, מרקם פני השטח, מרחק לאובייקט וזווית המצלמה. קירות לבנים ללא מרקם פוגעים במעקב SLAM, ותאורה גבוהה עלולה לגרום לחשיפת יתר. לתוצאות יציבות:
- משטחים עם מרקם (אובייקטים שחורים ומבריקים קשים יותר לזיהוי)
- מרחק לאובייקט לא יותר מ-5 מ' עם LiDAR, 3 מ' עם SLAM
- צמצום אובייקטים דינמיים בפריים
- מיקוד מצלמה תקין
כיצד אנו מיישמים מדידה באמצעות ARKit
// Измерение расстояния между двумя точками в AR
class ARMeasurementSession: NSObject, ARSessionDelegate {
var arView: ARSCNView!
private var startAnchor: ARAnchor?
private var endAnchor: ARAnchor?
func placePoint(at screenPoint: CGPoint) -> MeasurementPoint? {
// Raycast от экрана в 3D мировое пространство
guard let query = arView.raycastQuery(
from: screenPoint,
allowing: .estimatedPlane,
alignment: .any
) else { return nil }
guard let result = arView.session.raycast(query).first else { return nil }
let worldPosition = result.worldTransform.columns.3 // position в метрах
return MeasurementPoint(
position: SIMD3(worldPosition.x, worldPosition.y, worldPosition.z),
confidence: result.targetAlignment == .horizontal ? .high : .medium
)
}
func calculateDistance(from start: MeasurementPoint, to end: MeasurementPoint) -> Measurement<UnitLength> {
let diff = end.position - start.position
let distanceMeters = Double(simd_length(diff))
return Measurement(value: distanceMeters, unit: .meters)
}
}טעות נפוצה היא לא להתחשב בכך ש-// iOS: выбор метода в зависимости от возможностей устройства func selectMeasurementMethod() -> MeasurementMethod { if ARWorldTrackingConfiguration.supportsSceneReconstruction(.mesh) { return .lidarARKit // iPhone 12 Pro+, iPad Pro } else if ARWorldTrackingConfiguration.isSupported { return .slamARKit // ARKit без LiDAR } else { return .monocularDepth // фолбек на CoreML-модель } } עובד הכי טוב על משטחים עם מרקם טוב. קיר לבן מייצר מעקב SLAM גרוע, מה שגורם לסמני AR לסטות.
הצגת המדידה ב-AR
func addMeasurementLine(from start: SIMD3<Float>, to end: SIMD3<Float>, distance: String) {
let midpoint = (start + end) / 2
// Линия между точками
let lineNode = SCNNode(geometry: createCylinder(from: start, to: end))
// Метка с расстоянием в середине
let labelNode = SCNNode(geometry: SCNText(string: distance, extrusionDepth: 0.001))
labelNode.position = SCNVector3(midpoint.x, midpoint.y + 0.02, midpoint.z)
labelNode.scale = SCNVector3(0.005, 0.005, 0.005)
labelNode.constraints = [SCNBillboardConstraint()] // всегда лицом к камере
sceneRoot.addChildNode(lineNode)
sceneRoot.addChildNode(labelNode)
} גישת אובייקט ייחוס למדידה מתמונה
ללא AR — יש צורך באובייקט בגודל ידוע בפריים. כרטיס בנק (85.6 × 53.98 מ"מ) הוא ייחוס נוח:
// Android: измерение через reference object
class ReferenceObjectMeasurer {
fun measureWithCard(bitmap: Bitmap, cardBoundingBox: RectF, objectBoundingBox: RectF): MeasurementResult {
// Реальные размеры карты
val cardRealWidth = 85.6f // мм
val cardRealHeight = 53.98f
// Пиксели → мм
val pixelsPerMmHorizontal = cardBoundingBox.width() / cardRealWidth
val pixelsPerMmVertical = cardBoundingBox.height() / cardRealHeight
// Коррекция на перспективное искажение (упрощённо)
val correctionFactor = estimatePerspectiveCorrection(
cardBoundingBox,
imageDimensions = bitmap.width to bitmap.height
)
return MeasurementResult(
widthMm = (objectBoundingBox.width() / pixelsPerMmHorizontal) * correctionFactor,
heightMm = (objectBoundingBox.height() / pixelsPerMmVertical) * correctionFactor,
accuracy = MeasurementAccuracy.MODERATE // ±5-10% без калибровки
)
}
}זיהוי כרטיס בפריים נעשה באמצעות ML Kit Object Detection או מודל YOLOv8 מותאם אישית (קל לאימון על 500 תמונות כרטיס בתנאים שונים).
תהליך: מרעיון ועד השקה
- אנליטיקה — לימוד דרישות עסקיות, מכשירי קהל, דיוק נדרש.
- עיצוב — בחירת ארכיטקטורה: ARKit/ARCore מקורי או חוצה-פלטפורמות, הגדרת שיטת מדידה (LiDAR/SLAM/עומק מונוקולרי).
- יישום — פיתוח MVP עם ממשק משתמש בסיסי (שתי נקודות, קו), אינטגרציה עם CoreML/ML Kit, הגדרת כיול.
- בדיקות — אימות דיוק על 10+ מכשירים בתנאי צילום שונים, בדיקות A/B.
- השקה — הכנה לשחרור ב-App Store ו-Google Play, תיעוד, TestFlight/Firebase Distribution.
| שלב | משך |
|---|---|
| אנליטיקה | 1–2 ימים |
| עיצוב | 1–2 ימים |
| יישום MVP | 3–5 ימים (פלטפורמה אחת) |
| פתרון מלא (iOS+Android) | 1–2 שבועות |
| בדיקות והשקה | 3–5 ימים |
מה כלול בעבודה
- תיעוד ארכיטקטוני ותיאור API
- אינטגרציה עם ה-CRM/השרת שלך באמצעות REST או GraphQL
- הכשרת הצוות שלך לשימוש בתכונה
- 3 חודשי תמיכה טכנית
- גישה לקוד המקור (עם זכויות שינוי)
- אישורים מ-Apple ו-Google (אם נדרש)
אנחנו מפתחים מוסמכים של Apple ו-Google. אנו מבטיחים דיוק מדידה בהתאם להנחיות סקירת ה-App Store (סעיף 4.2/5.1). במשך 5 שנים, סיפקנו 30+ פרויקטים במסחר אלקטרוני, בנייה ובריאות.
טעויות יישום נפוצות
- התעלמות מתמיכת מכשירים ללא LiDAR — משתמשים מקבלים אפס דיוק.
- חוסר כיול עיוות פרספקטיבה בעת שימוש באובייקטי ייחוס.
- שימוש במודלי עומק סטנדרטיים ללא כוונון עדין לדומיין.
- אי עמידה בהנחיות הרכישות בתוך האפליקציה של Apple (אם התכונה בתשלום) — StoreKit 2.
העריכו את הפרויקט שלכם — כתבו לנו. קבלו ייעוץ על בחירת שיטה ולוח זמנים ליישום.
מאמר זה מתייחס להערכת עומק מונוקולרית ולתיעוד Apple ARKit.







