Bagaimana cara membuat model 3D dari AVDepthData?

Saya tertarik dengan masalah pengolahan data dari TrueDepth Camera. Penting untuk mendapatkan data wajah seseorang, membuat model wajah 3D dan menyimpan model ini dalam file .obj.

Karena dalam model 3D diperlukan kehadiran mata dan gigi seseorang, maka ARKit / SceneKit tidak cocok, karena ARKit / SceneKit tidak mengisi area tersebut dengan data.

Namun dengan bantuan perpustakaan SceneKit.ModelIO, saya berhasil mengekspor ARSCNView.scene (ketik SCNScene) dalam format .obj. Saya mencoba menggunakan proyek ini sebagai dasar: https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/streaming_depth_data_from_the_truedepth_camera

Pada project kali ini pengerjaan dengan TrueDepth Camera dilakukan menggunakan Metal, namun kalau tidak salah MTKView yang dirender menggunakan Metal bukan model 3D dan tidak dapat diekspor sebagai .obj.

Tolong beri tahu saya apakah ada cara untuk mengekspor MTKView ke SCNScene atau langsung ke .obj? Jika tidak ada cara seperti itu, lalu bagaimana cara membuat model 3D dari AVDepthData?

Terima kasih.


person K. Orlov    schedule 23.10.2018    source sumber
comment
@Orlov beruntung?   -  person Mayank Jain    schedule 14.09.2020


Jawaban (1)


Dimungkinkan untuk membuat model 3D dari AVDepthData, tapi mungkin bukan itu yang Anda inginkan. Hanya ada satu buffer kedalaman — array 2D nilai jarak piksel dari kamera. Jadi satu-satunya "model" yang Anda dapatkan darinya bukanlah 3D; itu hanya peta ketinggian. Artinya Anda tidak bisa melihatnya dari samping dan melihat kontur yang tidak bisa Anda lihat dari depan. (Kode contoh "Menggunakan Data Kedalaman" terlampir pada pembicaraan WWDC 2017 tentang fotografi kedalaman menunjukkan contohnya.)

Jika Anda menginginkan lebih banyak "model" 3D yang sesungguhnya, serupa dengan apa yang ditawarkan ARKit, Anda harus melakukan pekerjaan yang dilakukan ARKit — menggunakan beberapa bingkai warna dan kedalaman dari waktu ke waktu, bersama dengan sistem pembelajaran mesin yang dilatih untuk memahami wajah manusia. (dan perangkat keras dioptimalkan untuk menjalankan sistem itu dengan cepat). Anda mungkin tidak menganggap melakukan itu sendiri sebagai pilihan yang tepat...


Dimungkinkan untuk mendapatkan model yang dapat diekspor dari ARKit menggunakan Model I/O. Garis besar kode yang Anda perlukan kira-kira seperti ini:

  1. Dapatkan ARFaceGeometry dari sesi pelacakan wajah.

  2. Buat MDLMeshBuffers dari array vertices, textureCoordinates, dan triangleIndices geometri wajah. (Apple mencatat bahwa koordinat tekstur dan susunan indeks segitiga tidak pernah berubah, jadi Anda hanya perlu membuatnya satu kali — simpul harus diperbarui setiap kali Anda mendapatkan bingkai baru.)

  3. Buat MDLSubmesh dari buffer indeks, dan MDLMesh dari submesh ditambah buffer koordinat titik dan tekstur. (Opsional, gunakan fungsi MDLMesh untuk menghasilkan buffer vertex normals setelah membuat mesh.)

  4. Buat MDLAsset kosong dan tambahkan mesh ke dalamnya.

  5. Ekspor MDLAsset ke URL (berikan URL dengan ekstensi file .obj sehingga dapat menyimpulkan format yang ingin Anda ekspor).

Urutan tersebut tidak memerlukan SceneKit (atau Metal, atau kemampuan apa pun untuk menampilkan mesh) sama sekali, yang mungkin berguna tergantung kebutuhan Anda. Jika Anda ingin melibatkan SceneKit dan Metal, Anda mungkin dapat melewati beberapa langkah:

  1. Buat ARSCNFaceGeometry di perangkat Metal Anda dan berikan ARFaceGeometry dari sesi pelacakan wajah.

  2. Gunakan MDLMesh(scnGeometry:) untuk mendapatkan representasi Model I/O dari geometri tersebut, lalu ikuti langkah 4-5 di atas untuk mengekspornya ke file .obj.


Namun, bagaimanapun cara Anda mengirisnya... jika pemodelan mata dan gigi merupakan persyaratan yang kuat, tidak ada opsi yang disediakan Apple yang akan membantu Anda karena tidak ada satupun yang melakukan hal itu. Jadi, beberapa bahan untuk dipikirkan:

  • Pertimbangkan apakah itu merupakan persyaratan yang kuat?
  • Replikasi semua pekerjaan Apple untuk melakukan inferensi model wajah Anda sendiri dari rangkaian gambar berwarna + kedalaman?
  • Cheat pemodelan mata menggunakan bola di tengah menurut leftEyeTransform/rightEyeTransform yang dilaporkan oleh ARKit?
  • Cheat pemodelan gigi menggunakan pra- membuat model gigi, disusun dengan geometri wajah yang disediakan ARKit untuk tampilan? (Artikulasikan model rahang dalam Anda dengan satu sambungan terbuka-tutup dan gunakan blendShapes[.jawOpen] ARKit untuk menganimasikannya di samping wajah.)
person rickster    schedule 24.10.2018