iOS için Artırılmış Yüzler geliştirici kılavuzu

Artırılmış yüzleri kendi uygulamalarınızda nasıl kullanacağınızı öğrenin.

Ön koşullar

  • Xcode 13.0 veya sonraki bir sürüm
  • Cocoapods kullanıyorsanız Cocoapods 1.4.0 veya üzeri
  • iOS 12.0 veya sonraki sürümleri çalıştıran ARKit uyumlu bir Apple cihaz (iOS 12.0 veya sonraki sürümlerin dağıtım hedefi gereklidir)

Örnek uygulamayı derleyip çalıştırma

Ayrıntılı adımlar için Hızlı Başlangıç sayfasını inceleyin.

  1. Örnek uygulama kodunu almak üzere GitHub'dan iOS için ARCore SDK'sını klonlayın veya indirin.
  2. Bir Terminal penceresi açın ve Xcode projesinin bulunduğu klasörden pod install komutunu çalıştırın.
  3. Örnek uygulamayı Xcode 10.3 veya sonraki bir sürümde açın ve cihazı USB aracılığıyla geliştirme makinenize bağlayın. Derleme hatalarını önlemek için .xcodeproj dosyasından değil .xcworkspace dosyasından derleme yaptığınızdan emin olun.
  4. Cmd+R tuşlarına basın veya Run'i tıklayın. Genişletilmiş Yüzler ile çalışmak için simülatör değil, fiziksel bir cihaz kullanın.
  5. Kameranın örnek uygulamaya erişmesine izin vermek için "Tamam"a dokunun. Uygulama ön kamerayı açmalı ve kamera feed'inde hemen yüzünüzü izlemelidir. Alnınızın her iki tarafına da tilki kulaklarının resimlerini yerleştirmeli ve kendi burnunuzun üzerine bir tilki burnu yerleştirmelidir.

Uygulamanızda artırılmış yüz özelliğini uygulamaya genel bakış

*.scn dosyasını Xcode'a aktar

Dokular ve 3D modeller gibi kendi öğelerinizi uygulamanızda algılanan yüze eklemek için *.scn öğesini Xcode'a sürükleyin.

Genişletilmiş Yüzler oturumunu başlatma

Uygulamanızdan Augmented Faces API'yi kullanmak için bir artırılmış yüz oturumu başlatın. Bu oturum, 60 fps'de kamera görüntülerini çekmekten sorumludur ve yüz güncellemelerini eşzamansız olarak yetki verilmiş bir yönteme döndürür. Başlatma sırasında yakalama cihazının görüş alanını geçirin ve yetki verilmiş kullanıcıyı ayarladığınızdan emin olun.

// Session takes a float for field of view
let faceSession = try? GARAugmentedFaceSession(fieldOfView: cameraFieldOfView)
faceSession?.delegate = self

Oturuma kamera görüntülerini iletin

Oturumunuz başlatıldığına ve doğru şekilde yapılandırıldığına göre uygulamanız oturuma kamera görüntüleri göndermeye başlayabilir. Örnek uygulama, ön kameradan video kareleriyle bir AVCaptureSession oluşturarak kamera görüntülerini alır.

Aşağıdaki kod örneğinde, AVFoundation çıkışını yakalama yetkisi verme yönteminin bir uygulaması gösterilmektedir. Bu yöntem, yüz oturumunuza görüntü, bir zaman damgası ve tanıma rotasyonu iletir.

func captureOutput(_ output: AVCaptureOutput,
                     didOutput sampleBuffer: CMSampleBuffer,
                     from connection: AVCaptureConnection) {

     faceSession.update(with: imageBuffer,
                        timestamp: frameTime,
                        recognitionRotation: rotationDegrees)
}

Resim işlendikten sonra Augmented Faces API, GARAugmentedFaceFrame döndüren bir yetki verilmiş geri çağırma gönderir. Yüze efektler eklemenize yardımcı olan bir Genişletilmiş Yüz nesnesi içerir. Ayrıca, güncelleme yöntemine geçirdiğiniz resim arabelleğini ve zaman damgasını da içerir. Bu, yüz efektlerinin resimlerle senkronize edilmesinde yararlı olur. Bu nesne, 3D dünyayı ve 2D görünümleri, algılanan yüze ekli yüz efektlerinizi oluşturmayı kolaylaştıracak şekilde ayarlayabilmeniz için size bir görüntü dönüşümü ve projeksiyon matrisi de sağlar.

var face: GARAugmentedFace? { get }
var capturedImage: CVPixelBuffer { get }
var timestamp: TimeInterval { get }

Yüz örgü yönü

iOS için yüz ağının yönüne dikkat edin:

Yüze 2D doku uygulayın

Örnek uygulama, artırılmış yüzünüzü SCNGeometry nesnesine dönüştürmek için bir sınıf sağlar. Bu geometriyi, SceneKit düğümüne kolayca eklemek için kullanabilirsiniz. Bunu, Artırılmış Yüzün Merkezi dönüşümüne yerleştireceksiniz.

let faceNode = SCNNode()

// Gets the most recent frame's face
let face = faceSession.currentFrame?.face

// This is instantiated once, not with every frame
let faceGeometryConverter = FaceMeshGeometryConverter()

// Converts Augmented Face to SCNGeometry object
let faceMesh = faceGeometryConverter.geometryFromFace(face)

// Assigns geometry to node and sets the pose
faceNode.geometry = faceMesh
faceNode.simdTransform = face.centerTransform

2D yüz dokusu UIImage olarak yüklenir ve yüz ağının geometrisine eklenmiş bir malzemeye ayarlanır.

faceTextureMaterial = SCNMaterial()
faceTextureMaterial.diffuse.contents = UIImage(named:@"face.png")

faceMesh?.firstMaterial = faceTextureMaterial

Yüze 3D nesneler ekleyin

Yetki verilmiş geri aramadan alınan GARAugmentedFace, 3 farklı bölge sağlar veya bir yüze içerik eklemek için kullanabileceğiniz dönüştürme işlemleridir. Bu dönüştürme işlemleri, dünya uzayında burna, alnın soluna ve alnın sağına gitmenizi sağlar. Burada, buruna bir küre takmak için burun dönüştürme işlemi kullanılmaktadır.

// Create node and add to scene
let node = SCNNode(geometry: SCNSphere(radius: .02))
sceneView.rootNode.addChild(node)

// Every frame updates the node's position
node.simdWorldTransform = session.currentFrame.face.transform(for: .nose)

Kendi öğelerinizi Xcode'a aktarın

Uygulamanızda algılanan yüze doku ve 3D modeller gibi öğeler eklemek için öncelikle öğeleri Xcode'a aktarın.

  1. Bir *.dae (3D model) dosyasını dışa aktarın.
  2. *.dae dosyasını Xcode projesine sürükleyin.
  3. Editor > Convert to SceneKit scene file format (.scn) adresine giderek dosyayı Xcode'da .scn biçimine dönüştürün.