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 sürümler
  • CocoaPods kullanıyorsanız CocoaPods 1.4.0 veya sonraki sürümler
  • 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ıç bölümüne bakın.

  1. Örnek uygulama kodunu almak için 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. Xcode 10.3 veya sonraki bir sürümde örnek uygulamayı açın ve cihazı USB üzerinden geliştirme makinenize bağlayın. Yapı hatalarını önlemek için oluşturma işlemini .xcodeproj dosyasından değil .xcworkspace dosyasından yaptığınızdan emin olun.
  4. Cmd+R tuşlarına basın veya Run tuşuna basın. Artırılmış Yüzlerle çalışmak için simülatör yerine fiziksel bir cihaz kullanın.
  5. Kameranın örnek uygulamaya erişmesine izin vermek için "Tamam"a dokunun. Uygulama ön kamerayı açıp hemen kamera feed'inde yüzünüzü takip etmelidir. Tilki kulağı resimleri alnınızın her iki tarafına da yerleştirmeli ve kendi burnunuzun üzerine bir tilki burnu yerleştirmelidir.

Uygulamanızda Artırılmış Yüzleri kullanmaya genel bakış

*.scn dosyalarını Xcode'a aktarma

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

Artırılmış Yüz oturumu başlatma

Uygulamanızdan Augmented Faces API'yi kullanmak için bir Augmented Faces oturumu başlatın. Bu oturum, 60 fps'de kamera resimleri çekmekten sorumludur ve yüz güncellemelerini, yetki verme yöntemine eşzamansız olarak döndürür. Başlatma sırasında yakalama cihazının görüş alanını iletmeniz ve yetkiyi belirlediğinizden emin olmanız yeterlidir.

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

Kamera görüntülerini oturuma iletin

Oturumunuz başlatılıp doğru şekilde yapılandırıldığına göre uygulamanız oturuma kamera resimleri göndermeye başlayabilir. Örnek uygulama, ön kameradan video kareleri içeren bir AVCaptureSession oluşturarak kamera görüntüleri alır.

Aşağıdaki kod örneğinde, AVFoundation tarafından yüz oturumunuza görüntü, zaman damgası ve tanıma döndürme işlemi ileten yakalama çıkışı yetkilendirme yönteminin bir uygulaması gösterilmektedir.

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 efekt eklemenize yardımcı olan bir Artırılmış Yüz nesnesi içerir. Ayrıca, güncelleme yöntemine ilettiğiniz resim arabelleğini ve zaman damgasını da içerir. Bu, yüz efektlerini resimlerle senkronize etmek için yararlıdır. Bu nesne, 3D dünyayı ve 2D görünümleri, algılanan yüze bağlı olarak görünen yüz efektlerinizi oluşturmayı kolaylaştıracak şekilde ayarlamanızı sağlamak için size bir ekran dönüştürme ve projeksiyon matrisi de sağlar.

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

Yüz örgüsü yönü

iOS için yüz örgüsünün yönüne dikkat edin:

Yüze 2D doku uygula

Örnek uygulama, artırılmış yüzünüzü SCNGeometry nesnesine dönüştüren bir sınıf sağlar. Bu geometriyi, artırılmış yüzün merkez dönüşümüne yerleştireceğiniz bir SceneKit düğümüne kolayca eklemek için kullanabilirsiniz.

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 bağlı bir malzemeye ayarlanır.

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

faceMesh?.firstMaterial = faceTextureMaterial

Yüze 3D nesne ekleme

Temsilci geri çağırma işlevinden alınan GARAugmentedFace, bir yüze içerik eklemek için kullanabileceğiniz 3 farklı bölge veya dönüştürme sağlar. Bu dönüştürme işlemleri dünya uzayında burnun, alnınızın solunun ve alnınızın sağını görmenizi sağlar. Burada, buruna bir küre eklemek için burun dönüşümü 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 bir yüze doku ve 3D model gibi öğeler eklemek için önce öğeleri Xcode'a aktarın.

  1. *.dae (3D model) dosyası 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.