Можно сделать 3D-модель из AVDepthData
, но, вероятно, это не то, что вам нужно. Один буфер глубины - это просто двумерный массив значений пиксельного расстояния от камеры. Итак, единственная «модель», из которой вы получаете, не очень трехмерна; это просто карта высот. Это означает, что вы не можете смотреть на него сбоку и видеть контуры, которые вы не могли бы увидеть спереди. (Пример кода «Использование данных глубины», приложенный к докладу WWDC 2017 о глубинной фотографии показывает пример этого.)
Если вам нужно больше действительно трехмерной «модели», похожей на то, что предлагает ARKit, вам необходимо выполнять ту же работу, что и ARKit, - с течением времени использовать несколько цветных и глубинных кадров, а также систему машинного обучения, обученную понимать человеческие лица. (и оборудование, оптимизированное для быстрой работы этой системы). Возможно, вам не удастся сделать это самостоятельно ...
можно получить экспортируемую модель из ARKit, используя ввод-вывод модели. Схема необходимого кода выглядит примерно так:
Получите ARFaceGeometry
из сеанса отслеживания лиц.
Создайте MDLMeshBuffer
s из массивов геометрии лица vertices
, textureCoordinates
и triangleIndices
. (Apple отмечает, что массивы координат текстуры и индексов треугольников никогда не меняются, поэтому вам нужно создать их только один раз - вершины, которые вы должны обновлять каждый раз, когда получаете новый кадр.)
Создайте MDLSubmesh
из индексного буфера и MDLMesh
из под-сетки плюс буферы координат вершин и текстуры. (При желании можно использовать MDLMesh
функции для создания буфера нормалей вершин после создания сетки.)
Создайте пустой MDLAsset
и добавьте к нему сетку.
Экспортируйте MDLAsset
в URL-адрес (указав URL-адрес с расширением файла .obj
, чтобы он предполагал формат, который вы хотите экспортировать).
Эта последовательность вообще не требует SceneKit (или Metal, или какой-либо способности отображать сетку), что может оказаться полезным в зависимости от ваших потребностей. Если вы действительно хотите задействовать SceneKit и Metal, вы, вероятно, можете пропустить несколько шагов:
Создайте ARSCNFaceGeometry
на своем устройстве Metal и передайте ему ARFaceGeometry
из сеанса отслеживания лица.
Используйте MDLMesh(scnGeometry:)
, чтобы получить представление модели ввода-вывода этой геометрии, затем выполните шаги 4–5 выше, чтобы экспортировать ее в файл .obj
.
Как бы то ни было ... если моделирование глаз и зубов является строгим требованием, ни один из вариантов, предоставляемых Apple, вам не поможет, потому что ни один из них этого не делает. Итак, немного пищи для размышлений:
- Подумайте, является ли это строгим требованием?
- Воспроизвести всю работу Apple, чтобы сделать собственный вывод модели лица из последовательностей цветных + глубинных изображений?
- Чит на моделирование глаз с использованием сфер с центром в соответствии с _17 _ / _ 18_, сообщенным ARKit?
- Обмануть моделирование зубов с помощью pre- сделали модель зубов, составленную для отображения с геометрией лица, предоставленной ARKit? (Составьте свою модель внутренней челюсти с помощью одного открытого-закрытого сустава и используйте ARKit
blendShapes[.jawOpen]
, чтобы оживить ее рядом с лицом.)
person
rickster
schedule
24.10.2018