Красная точка отслеживания глаз ARKit не соответствует тому, куда смотрит пользователь во время калибровкиIOS

Программируем под IOS
Ответить
Anonymous
 Красная точка отслеживания глаз ARKit не соответствует тому, куда смотрит пользователь во время калибровки

Сообщение Anonymous »

Я создаю приложение для отслеживания глаз для iOS, используя ARFaceTrackingConfiguration ARKit и ARFaceAnchor.blendShapes (например, .eyeLookInLeft, .eyeLookOutLeft и т. д.) для оценки направления взгляда.
Во время калибровки, когда пользователь смотрит на определенные точки экрана, красная точка (индикатор взгляда) не соответствует тому, куда пользователь на самом деле смотрит.
/>Вопрос:
Почему калиброванная точка взгляда не совпадает с фактической фокусировкой глаз при использовании отслеживания глаз ARKit?
Существует ли особый способ преобразования или нормализации данных формы наложения для достижения точного отображения взгляда на экране?
Мне нужна простая калибровка отслеживания глаз для фронтальной камеры с истинной глубиной на iPhone/iPad.
Настройка:
iPhone 14 Pro,
iOS 18+,
Использование передней камеры TrueDepth
Попытка реализовать калибровку по взгляду с помощью ARFaceAnchor blendShapes и картографирования квадратичной регрессии. Ожидалось, что красная точка (расчетная точка взгляда) будет совпадать с тем местом, куда на самом деле смотрит пользователь во время калибровки.
Вот упрощенный фрагмент кода
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
guard let face = anchors.first as? ARFaceAnchor else { return }

// Compute gaze direction from blend shapes
let s = face.blendShapes
let lu = s[.eyeLookUpLeft]?.floatValue ?? 0
let ld = s[.eyeLookDownLeft]?.floatValue ?? 0
let li = s[.eyeLookInLeft]?.floatValue ?? 0
let lo = s[.eyeLookOutLeft]?.floatValue ?? 0

let ru = s[.eyeLookUpRight]?.floatValue ?? 0
let rd = s[.eyeLookDownRight]?.floatValue ?? 0
let ri = s[.eyeLookInRight]?.floatValue ?? 0
let ro = s[.eyeLookOutRight]?.floatValue ?? 0

// Average both eyes
let v = ((ld - lu) + (rd - ru)) / 2.0
let h = ((li - lo) + (ro - ri)) / 2.0

// Map roughly to screen
let screen = UIScreen.main.bounds
let center = CGPoint(x: screen.midX, y: screen.midY)
let gazePoint = CGPoint(
x: center.x - CGFloat(h) * 3.0 * center.x,
y: center.y + CGFloat(v) * 3.0 * center.y
)

DispatchQueue.main.async {
self.gazePoint = gazePoint
}
}



Подробнее здесь: https://stackoverflow.com/questions/797 ... ing-calibr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»