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.
- Örnek uygulama kodunu almak için GitHub'dan iOS için ARCore SDK'sını klonlayın veya indirin.
- Bir Terminal penceresi açın ve Xcode projesinin bulunduğu klasörden
pod install
'ü çalıştırın. - Xcode 10.3 veya sonraki bir sürümde örnek uygulamayı açın ve cihazı USB üzerinden geliştirme makinenize bağlayın. Derleme hatalarını önlemek için
.xcodeproj
dosyası yerine.xcworkspace
dosyasından derlediğinizden emin olun. - Cmd+R tuşlarına basın veya Run simgesini tıklayın. Artırılmış Yüzler ile çalışmak için simülatör yerine fiziksel bir cihaz kullanın.
- Kameranın örnek uygulamaya erişmesine izin vermek için "Tamam"a dokunun. Uygulama, ön kamerayı açar ve kamera feed'inde yüzünüze hemen başlar. Alnınızın her iki tarafına tilki kulağı, burnunuzun üzerine de tilki burnu resmi yerleştirilir.
Uygulamanızda artırılmış yüzleri uygulamaya 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, kamera görüntülerini 60 fps'de almaktan sorumludur ve yüz güncellemelerini bir temsilci yöntemine asenkron olarak döndürür. Başlatırken, yakalama cihazının görüş alanını iletin ve temsilciyi ayarladığınızdan emin olun.
// Session takes a float for field of view
let faceSession = try? GARAugmentedFaceSession(fieldOfView: cameraFieldOfView)
faceSession?.delegate = self
Kamera görüntülerini oturuma aktarma
Oturumunuz başlatılıp 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 kareleri içeren bir AVCaptureSession
oluşturarak kamera görüntülerini alır.
Aşağıdaki kod örneğinde, AVFoundation
'ın yakalama çıkışı temsilcisi yönteminin bir uygulaması gösterilmektedir. Bu yöntem, resmi, zaman damgasını ve tanıma rotasyonunu yüz oturumunuza 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 temsilci 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 kullanışlı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 görüntü 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 uygulama
Ö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 örgüsünün geometrisine bağlı bir materyale 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üşümler, dünya uzayında burnu, alnın sol tarafını ve alnın sağ tarafını almanıza olanak tanır. Burada, burna 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 aktarma
Uygulamanızda algılanan bir yüze doku ve 3D model gibi öğeler eklemek için önce öğeleri Xcode'a aktarın.
*.dae
(3D model) dosyası dışa aktarın.*.dae
dosyasını Xcode projesine sürükleyin.- Editor > Convert to SceneKit scene file format (.scn) adresine giderek dosyayı Xcode'da
.scn
biçimine dönüştürün.