Экспортируйте и нарисуйте сетку ARSCNFaceGeometry из сохраненного файла obj в UIImage.IOS

Программируем под IOS
Ответить
Anonymous
 Экспортируйте и нарисуйте сетку ARSCNFaceGeometry из сохраненного файла obj в UIImage.

Сообщение Anonymous »

Я хочу сохранить только изображение сетки лица из ARSCNView для каждого кадра. Ниже приведен код, который я использую.

Код: Выделить всё

override func viewDidAppear(_ animated: Bool) {

let configuration = ARFaceTrackingConfiguration()
sceneView.session.run(configuration)

}

func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {

let faceMesh = ARSCNFaceGeometry(device: sceneView.device!)
let node = SCNNode(geometry: faceMesh)

node.name = "Test Node"
node.geometry?.name = "Test geometry"
node.geometry?.materials.first?.name = "Test material"
node.geometry?.firstMaterial?.fillMode = .lines

return node
}

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {

if let faceAnchor = anchor as? ARFaceAnchor, let faceGeometry = node.geometry as? ARSCNFaceGeometry {

faceGeometry.update(from: faceAnchor.geometry)

// let vertices = faceAnchor.geometry.vertices
let textureCoordinates = faceAnchor.geometry.textureCoordinates

exportMesh(node: node)
self.index = self.index + 1

}
}

func exportMesh(_ node: SCNNode, to url: URL, completion: (() -> ())?) {
DispatchQueue.global().async {
let mesh = MDLMesh(scnGeometry: node.geometry!)
let asset = MDLAsset()

asset.add(mesh)
do {
try asset.export(to: url)
} catch {
print("Can't write mesh to url")
}
DispatchQueue.main.async {
completion?()
}
}
}
Приведенный выше код предназначен для экспорта геометрии узла в приложение «Файлы».
Далее я извлекаю тот же файл из каталога документов.

Код: Выделить всё

func loadMeshes() {
let asset = MDLAsset(url: path)
let scene = SCNScene(mdlAsset: asset)

let renderer = SCNRenderer(device: MTLCreateSystemDefaultDevice(), options: nil)

scene.rootNode.childNodes.first?.geometry?.firstMaterial?.fillMode = .lines
scene.rootNode.childNodes.first?.geometry = geometry

let renderTime = TimeInterval(0)

// Output size
let size = CGSize(width:1080, height: 1920)

// Render the image
let image = renderer.snapshot(atTime: renderTime, with: size,
antialiasingMode: SCNAntialiasingMode.multisampling4X)

}
Приведенный выше код извлекает объект-сетку, а затем преобразует его в сцену. Обновите геометрию сцены с помощью линий. Затем сделайте снимок сцены.
Этот снимок представляет собой всего лишь геометрию лица. Мне нужен снимок или изображение сетки лица относительно исходного положения и угла, под которым оно было расположено в режиме реального времени.
Если я смотрю сбоку или сверху вниз, то создаётся сетка. изображение, созданное из сцены, также должно отражать то же самое.
Изображение


Подробнее здесь: https://stackoverflow.com/questions/787 ... to-uiimage
Ответить

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

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

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

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

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