Итак, мой вопрос: эти значения определяют какие-либо измерения или измерения размера?
Нет. Цифры, которые ты получаешь, бессмысленны, потому что способ, которым ты их получаешь ... может быть, не совсем глупость, но довольно близко.
Словарь blendShapes
в ARFaceAnchor
задокументирован как имеющий значения типа NSNumber
, где базовое числовое значение NSNumber
является Float между 0,0 и 1,0.
NSNumber
- это обертка объекта для многих возможных типов скалярных числовых значений. У него есть методы для извлечения его базового значения в виде различных типов (путем преобразования в другое представление одного и того же числа). Но учитывая, что эти конкретные числа задокументированы как значения с плавающей точкой от 0 до 1, нет особого смысла извлекать intValue
или boolValue
и т. Д.
NSNumber
является подклассом NSValue
, который является оберткой для многих видов типов, которые иначе не выражаются как объекты - диапазоны, размеры, указатели и трехмерные объекты. преобразовать матрицы, среди других. Эти типы не могут быть преобразованы между собой, как числа, поэтому единственный тип, который имеет смысл извлечь из NSValue
, - это тип, с которым он был создан. Любой другой тип дает вам глупость.
Назад к blendShapes
- далее документально подтверждено, что каждое значение фигуры наложения в словаре - это не просто число, а число, которое сообщает вам о прогрессе параметра анимации. eyeBlinkLeft
не претендует на то, чтобы рассказать вам о том, где или насколько велик левый глаз - он говорит о том, насколько «моргнуло» (закрыто) левое веко.
Вы лаете не по тому дереву, но если вы посмотрите на документы по тем классам и свойствам, которые вы используете, у вас будет больше возможностей сделать обоснованные догадки позже.
Можно ли рассчитать ширину глаз и расстояние между двумя глазами?
Обновление: В «ARKit 2», также известном как ARKit в iOS 12, leftEyeTransform
и rightEyeTransform
обеспечивают трехмерное положение (относительно якорь лица) центра каждого глазного яблока. (Также ориентация каждого глаза.) Это может помочь вашему варианту использования, но если то, что вы на самом деле ищете, имеет отношение к положению / размеру зрачков или глазным отверстиям ...
Нет API, который сделал бы это для вас. ARKit предоставляет информацию, которую вы можете использовать, чтобы узнать ее самостоятельно, но не так, чтобы она всегда работала.
ARFaceGeometry
дает вам треугольную сетку, которая отображает несколько сотен или около того точек на грани таким образом, чтобы топологически устойчиво в течение сеанса. То есть, например, если предположить, что 57-я вершина в сетке является кончиком носа, она останется на кончике носа, даже если лицо морщит и растягивается, и положение этой точки относительно других точек изменяется.
Проблемы:
- API не сообщает вам, какие вершины (точки в сетке) есть какие (с точки зрения ориентиров лица, таких как угол глаза, кончик носа и т. Д.).
- Топология сетки стабильна в течение сеанса, но Apple не гарантирует, что она не изменится между версиями iOS, устройствами и т. Д.
Итак, хотя в результате некоторых экспериментов вы сможете определить, какие вершины являются внутренним углом левого глаза, внешним углом левого глаза и т. Д. Как только вы это сделаете, вы можете посмотреть на их положения, чтобы оценить полезность такие величины, как ширина глаза, расстояние между зрачками и т. д. Однако эти измерения основаны на предположениях о сетке, которая может не всегда сохраняться, поэтому вы не знаете, когда она сломается для пользователей вашего приложения.