Ana içeriğe geç

iOS - Face Modülü

Face Modülü, kullanıcının canlılık kontrolünü (liveness detection) ve kimlik kartındaki fotoğrafla yüz karşılaştırmasını gerçekleştirir. Ayrıca isteğe bağlı olarak akış sırasında video kaydı alınabilir.

Giriş

Face modülü, ön kamera üzerinden alınan görüntülerle kişinin gerçek bir birey olup olmadığını analiz eder. Modül, yüz tanıma teknolojisinin yanı sıra gülümseme, göz kapama, kafa sağa veya sola çevirme, yukarı bakma gibi yüz ifadelerini ve hareketlerini algılayabilir.

Analiz işlemi sırasında yüzün kamera ile doğru hizalanmış olması önemlidir. Ayrıca cihazın performansı ve kamera kalitesine bağlı olarak analiz süresi değişiklik gösterebilir. Bu modül, özellikle canlılık kontrolü gerektiren kimlik doğrulama süreçlerinde etkin ve güvenilir bir çözüm sunar.

Warning

Face modülünü kullanılmak istendiğinde, Core Modülü projeye eklenmek zorundadır. Bu, modüllerin temel işlevselliklerini sağlamak için gereklidir.


EnQualifyFace SDK Projeye Entegrasyon Adımları

Bu rehber, EnQualifyFace SDK'nın projeye nasıl entegre edileceğini açıklamaktadır. Aşağıdaki adımları takip ederek hızlı ve kolay bir şekilde entegrasyonu gerçekleştirebilirsiniz.

Core Modülü Nedir

Face modülü eklenmeden önce Core Modülü projeye dahil edilmelidir. Core modülünün nasıl ekleneceğini öğrenmek için Core Modülü dokümanını ziyaret edebilirsiniz.

EnQualifyFace Nedir

EnQualifyFace, bir yüz tanıma ve doğrulama (liveness detection) SDK'sı olarak tasarlanmış bir modüldür. Bu modül, uzaktan kimlik doğrulama süreçlerinde canlılık tespiti yapmak için tasarlanmış.

EnQualifyFace şunları yapabilir:

  1. Yüz Tespiti: Kamera önündeki kullanıcının yüzünü tespit eder.
  2. Canlılık Kontrolü: Farklı hareketlerin yapılmasını isteyerek kişinin canlı bir insan olduğunu doğrular:

  3. Gülümseme tespiti

  4. Göz kapatma tespiti
  5. Yüzün sağa, sola ve yukarı çevrilmesi
  6. Yüz Karşılaştırma: Elde edilen yüz görüntüsünü kimlik belgesindeki veya NFC çipindeki yüz fotoğrafıyla karşılaştırabilir.

Hızlı İmplementasyon

Projenizde hızlı bir entegrasyon gerçekleştirmek için Face Modülü Nasıl İmplemente Edilir? bölümüne başvurabilirsiniz.

Face Modülü Projeye Eklenmesi

EnQualify iOS SDK, doğrudan projeye entegre edilebilir:

  • Yöntem: SDK'yı doğrudan projeye xcframework embed ederek eklemek ve gerekli olan bağımlılıkları cocoapods üzerinden yüklemek.
Text Only
// target 'MySampleProject' do
  use_frameworks!
  pod 'GoogleMLKit/FaceDetection', '7.0.0' # Yüz ve Canlılık Tespiti
end

post_install do |installer|
   installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
        config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
        config.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = ""
        config.build_settings['CODE_SIGNING_REQUIRED'] = "NO"
        config.build_settings['CODE_SIGNING_ALLOWED'] = "NO"
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = ""
        config.build_settings['VALID_ARCHS'] = "arm64 x86_64"
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.5'
        config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
    end
  end
end

Kurulum Sonrası Build Ayarları Açıklaması

BUILD_LIBRARY_FOR_DISTRIBUTION = YES:

Framework'ün dağıtım için inşa edilmesini sağlar, böylece başka projelerde ikili (binary) veya paylaşılan framework olarak kullanılabilir. Bu, özellikle XCFramework'ler oluşturulurken faydalıdır.

EXPANDED_CODE_SIGN_IDENTITY = "":

Code Signing Identity temizlenir; böylece build sürecinde belirli bir sertifika kullanılmadığından emin olunur.

CODE_SIGNING_REQUIRED = NO:

Build sürecinde code signing gereksinimini devre dışı bırakır. Bu, test sırasında veya imzalamanın gerekli olmadığı durumlarda kullanışlıdır.

CODE_SIGNING_ALLOWED = NO:

Code Signing tamamen devre dışı bırakıldığından emin olur.

EXCLUDED_ARCHS[sdk=iphonesimulator*] = "":

iPhone simülatörü için önceden hariç tutulan tüm mimarileri kaldırır. Bu ayar, build sürecinde uyumluluğu sağlar.

VALID_ARCHS = "arm64 x86_64":

Build için geçerli mimarileri belirtir. Burada, arm64 (M Serisi) ve x86_64 (intel işlemcili) macler için kullanılır.

IPHONEOS_DEPLOYMENT_TARGET = 14.0:

Uygulama veya framework'ün desteklediği minimum iOS sürümünü ayarlar. Bu, iOS 14.0 ve üzeri cihazlarla uyumluluğu sağlar.

ONLY_ACTIVE_ARCH = YES:

Build sürecini yalnızca aktif build cihazı veya simülatörün mimarisi ile sınırlar. Bu, geliştirme sırasında build süresini hızlandırabilir.

XCFrameworks

  • EnQualify SDK'yı doğrudan projenize entegre etmek için, temel SDK dosyaları olan OCRModule.xcframework, NFCModule.xcframework, FaceModule.xcframework CoreModule.xcframework ve VideoCallModule.xcframework'i doğrudan proje dosyalarınıza ekleyebilirsiniz.
  • Alternatif olarak, XCFramework'leri projenize zaten kopyaladıysanız, bu framework'leri projenize eklemek için Project Settings > General bölümüne gidip Embed and Sign seçeneğini seçebilirsiniz.
  • Bu şekilde eklenen EnQualify SDK'nın bağımlılıkları için, ilgili sürümün "podspec" dosyasında belirtilen veya sağlayıcı tarafından belirlenen sürüm numaraları ile projenize dahil etmeniz gerekmektedir.

Face Modülü Nasıl Implemente Edilir ?

1. Modüllerin eklenmesi

1.1 Core Modülünün İmplementasyonu

EnQualifyFace Modülü kullanılmadan önce Core Modülü projeye dahil edilmelidir. Eğer henüz eklemediyseniz, detaylar için Core Modülü dokümantasyonuna bakabilirsiniz.

1.2 Face Modülünün Projeye Eklenmesi

Face Modülü entegrasyonu için gerekli talimatları Face Modülünün Projeye Eklenmesi başlığı altında bulabilirsiniz. Bu adımları takip ederek Face modülünü projeye dahil edin.


2. İzinler

2.1 Info.plist Dosyasına Kamera İzni Ekleme

Öncelikle, Info.plist dosyasına kamera izni eklemeniz gerekmektedir. Bu, uygulamanızın kamera donanımına erişebilmesini sağlar.

XML
<key>NSCameraUsageDescription</key>

2.2 Runtime İzin İsteme

Initialize fonksiyonu içerisinde kamera izni istenmektedir.

Swift
EnQualifyFace.initialize(_ sender: Any?, 
                        sessionModel: SessionModelFace? = nil, 
                        baseModel: BaseModelFace? = nil)

Eğer kamera izni verilmez ise initializeFailed(with key: CustomNSError) delegate'i tetiklenir. İzin verilir ise initializeCompleted(moduleName: String) delegate'i tetiklenir.


3. EnQualifyFaceDelegate Arayüzünün Eklenmesi

EnQualifyFaceDelegate, Face işlemlerini yönetmek için gerekli delegate metotlarını içerir. Bu interface implemente ederek Face ile ilgili olayları dinleyebilir ve yönetebilirsiniz. Detaylı bilgi için EnQualifyFace Kullanım Kılavuzu bölümünü inceleyebilirsiniz.

3.1 EnQualifyFaceDelegate 'in Sınıfa Eklenmesi

Swift
class ViewController: EnQualifyFaceDelegate {

3.2 Delegate Fonksiyonlarının Override Edilmesi

Swift
class ViewController: EnQualifyFaceDelegate {

     func faceDetected() {}

     func smileDetected() {}

     func eyeCloseDetected() {}

     func faceLeftDetected() {}

     func faceRightDetected() {}

     func faceUpDetected() {}

     func faceCompleted() {}

     func livenessFailed(error: EnQualifyFaceError) {}

     func faceFailed(error: EnQualifyFaceError) {}

     func faceDetectFailed(error: EnQualifyFaceError) {}

     func faceCompareCompleted() {}

     func faceCompareFailed(error: EnQualifyFaceError) {}

     func initializeCompleted(moduleName: String) {}

     func initializeFailed(with key: CustomNSError) {}

     func tokenCreateCompleted() {}

     func tokenCreateFailed() {}

     func integrationAddCompleted() }

     func integrationAddFailed() {}

     func sessionAddFailed() {}

     func settingGetFailed() {}
}

4. EnQualifyFace'nin Initialize Edilmesi ve Token, Ayar ve Oturum İşlemleri

Note

Initalize edilmeden önce core;

  • EnQualifyFaceDelegate metodları, hangi UIViewController içerisinde kullanılacak ise o UIViewController 'ın delegate alanına eklenmelidir.
  • SessionModelFace, Face başlatmak için kullanılacak parametreleri içeren modeldir ve başlatma işleminde ilgili alana bu model eklenmelidir. Detaylı bilgi için SessionModelFace bölümünü inceleyebilirsiniz.
  • BaseModelFace, Face için gerekli olan sertifika ve temel URL bilgilerini içeren modeldir ve başlatma işleminde ilgili alana bu model eklenmelidir. Detaylı bilgi için BaseModelFace bölümünü inceleyebilirsiniz.

Face işlemlerine başlamadan önce, EnQualifyFace sınıfının initialize edilmesi gerekir. Bu işlem, gerekli olan token, settings, ve session işlemlerinin başlatılmasını sağlar. Ayrıca, kullanıcıya Face işlemi için hazırlıkların tamamlandığını bildirmek ve ardından işlem sürecini başlatmak önemlidir.

Swift
func initialize(_ sender: Any?,
                sessionModel: SessionModelFace? = nil,
                baseModel: BaseModelFace? = nil) {

Parametreler

Parametre Tip Açıklama
delegate Any? Uygulamanın hangi UIViewController içerisinde kullanılacağı belirlenir.
sessionModel SessionModelFace Face işlemi sırasında kullanılacak oturum bilgilerini içerir.
baseModel BaseModelFace Doğrulama sürecinde temel verileri taşıyan modeldir.

EnQualifyFace initialize edildikten sonra EnQualifyFace instance oluşturulur ve ardından token, settings ve session oluşturmak için gerekli işlemleri başlatır. initialize yapıldıktan sonra token,settings ve session sdk tarafından yönetilirç

EnQualifyFace instance'ı oluşturulduktan sonra şu adımlar sırasıyla gerçekleştirilir:

  1. Token Oluşturma

  2. EnQualifyFace, token oluşturma sürecini başlatır.

  3. Eğer token oluşturma işlemi sırasında bir hata oluşursa, tokenCreateFailed delegate'i tetiklenir.
Swift
func tokenCreateFailed() {}
  • Token başarıyla oluşturulduğunda, bir sonraki adım olan session işlemine geçilir.
  • Oturum İşleminin Başlatılması

  • Token başarılı bir şekilde alındıktan sonra oturum başlatma süreci devreye girer.

  • Eğer oturum başlatma sırasında bir hata oluşursa, sessionAddFailed delegate'i tetiklenir.
Swift
func sessionAddFailed() {}
  • Oturum işlemi başarıyla tamamlandığında, SDK backoffice ile bağlantıyı kurmuş olur ve işlem başlatmaya hazır hale gelir.
  • Ayarların Alınması

  • Session başarılı bir şekilde oluşturulduktan sonra, backoffice üzerinden tanımlanan ayarların alınma işlemi başlatılır.

  • Eğer bu süreçte bir hata oluşursa, settingsGetFailed delegate'i tetiklenir ve hata mesajı client tarafına iletilir.
Swift
func settingGetFailed() {}
  • Ayarlar başarıyla alındığında, SDK ilgili konfigürasyonları yapar ve oturum işlemini başlatır.
  • İşlem Tamamlama

  • Tüm adımlar sorunsuz bir şekilde tamamlandığında, initializeCompleted delegate'i tetiklenir. Bu, SDK'nın başarıyla initialize edildiğini ve Face işlemlerine hazır olduğunu belirtir.

Swift
func initializeCompleted(moduleName: String) {}

Bu süreç, EnQualifyFace'nin sağlam bir şekilde çalışmasını sağlamak için tasarlanmıştır. Olası hatalar, ilgili delegate'ler aracılığıyla client veya kullanıcıya iletilerek gerekli aksiyonların alınmasını kolaylaştırır.


5. Face İşleminin Başlatılması

Bu bölümde, Face işlemlerinin nasıl başlatılacağını ve yönetileceğini adım adım açıklıyoruz.

5.1 Kullanıcı Bilgilendirme

Face işlemi başlamadan önce, kullanıcıya bilgilendirme yapılması önerilir. Bunun için bir FaceInfo sayfası oluşturulabilir.
Bu sayfa, kullanıcıya Face işlemi hakkında bilgi verir ve daha iyi bir deneyim sağlar.

5.2 Face İşlemleri

Face fonksiyonları ve delegate'leri ile ilgili detaylı bilgiyi EnQualifyFace Kullanım Kılavuzuna göz atabilirsiniz. Referans canlılık akışı smile → eyeClose → (rastgele sağ, sol veya üst) → complete şeklindedir; sağ, sol ve üst yönlerinin tamamı aynı akışta birlikte uygulanmaz.

  • setTotalSteps(_ steps: Int)
  • faceDetect(in viewController: UIViewController, cameraPosition: AVCaptureDevice.Position = .front)
  • eyeCloseDetect()
  • smileDetect()
  • faceRightDetect()
  • faceLeftDetect()
  • faceUpDetect()
  • faceComplete(withDelay delay: TimeInterval = 0.0)

5.2.1. Aşama Sayısı Ekleme

Referans akışta canlılık kontrolü için toplam 3 aşama gösterilir: önce gülümseme, ardından göz kapama ve son olarak rastgele seçilen tek bir yön hareketi (sağa, sola veya yukarı). Yön adımlarının üçü birden art arda uygulanmaz. Aşama sayısını belirtmek için setTotalSteps(_ steps: Int) çağrılır.

Swift
EnQualifyFace.setTotalSteps(3)

5.2.3 Yüz Tanıma İşleminin Yapılması

Yüz algılama işlemini başlatmak için faceDetect(in viewController: UIViewController, cameraPosition: AVCaptureDevice.Position = .front) fonksiyonu kullanılır. Bu işlem, EnQualify Face API tarafından yönetilir ve aşağıdaki gibi çağrılır:

Swift
EnQualifyFace.faceDetect(in: self)

Delegate Mekanizması

Yüz algılama işlemi başarıyla tamamlandığında, faceDetected delegate'i tetiklenir. Bu delegate içerisinde, işlem sonrasında yapılması gereken diğer işlemler ele alınabilir.

Swift
func faceDetected() {}

5.2.4 Gülümseme İşleminin Yapılması

Gülümseme işlemini başlatmak için smileDetect() fonksiyonu kullanılır. Bu işlem, EnQualifyFace tarafından yönetilir ve aşağıdaki gibi çağrılır:

Swift
EnQualifyFace.smileDetect()

Delegate Mekanizması

Gülümseme işlemi başarıyla tamamlandığında, smileDetected() delegate'i tetiklenir. Bu delegate içerisinde, işlem sonrasında yapılması gereken diğer işlemler ele alınabilir.

Swift
func smileDetected() {}

5.2.5 Göz Kapama İşleminin Yapılması

Göz kapama işlemini başlatmak için eyeCloseDetect() fonksiyonu kullanılır. Bu işlem, EnQualifyFace tarafından yönetilir ve aşağıdaki gibi çağrılır:

Swift
EnQualifyFace.eyeCloseDetect()

Delegate Mekanizması

Göz kapama işlemi başarıyla tamamlandığında, eyeCloseDetected() delegate'i tetiklenir. Bu delegate içerisinde, işlem sonrasında yapılması gereken diğer işlemler ele alınabilir.

Swift
func eyeCloseDetected() {}

5.2.6 Başını Sağ Tarafa Çevirme İşleminin Yapılması

Başı sağa çevirme işlemini başlatmak için faceRightDetect() fonksiyonu kullanılır. Bu işlem, EnQualifyFace tarafından yönetilir ve aşağıdaki gibi çağrılır:

Swift
EnQualifyFace.faceRightDetect()

Delegate Mekanizması

Başı sağa çevirme işlemi başarıyla tamamlandığında, faceRightDetected() delegate'i tetiklenir. Bu delegate içerisinde, işlem sonrasında yapılması gereken diğer işlemler ele alınabilir.

Swift
func faceRightDetected() {}

5.2.7 Başını Sol Tarafa Çevirme İşleminin Yapılması

Başı sola çevirme işlemini başlatmak için faceLeftDetect() fonksiyonu kullanılır. Bu işlem, EnQualifyFace tarafından yönetilir ve aşağıdaki gibi çağrılır:

Swift
EnQualifyFace.faceLeftDetect()

Delegate Mekanizması

Başı sola çevirme işlemi başarıyla tamamlandığında, faceLeftDetected() delegate'i tetiklenir. Bu delegate içerisinde, işlem sonrasında yapılması gereken diğer işlemler ele alınabilir.

Swift
func faceRightDetected() {}

5.2.8 Başını Yukarı Kaldırma İşleminin Yapılması

Başını yukarı kaldırma işlemini başlatmak için faceUpDetect() fonksiyonu kullanılır. Bu işlem, EnQualifyFace tarafından yönetilir ve aşağıdaki gibi çağrılır:

Swift
EnQualifyFace.faceUpDetect()

Delegate Mekanizması

Başı yukarı kaldırma işlemi başarıyla tamamlandığında, faceUpDetected() delegate'i tetiklenir. Bu delegate içerisinde, işlem sonrasında yapılması gereken diğer işlemler ele alınabilir.

Swift
func faceUpDetected() {}

5.2.9. Canlılık Akışını Bitirdiğini Bildirme

Tüm yüz tanıma adımları tamamlandığında, faceComplete(withDelay delay: TimeInterval = 0.0) fonksiyonu kullanılarak SDK'ya işlemlerin sona erdiği bildirilir. Bu fonksiyon, aynı zamanda kameradan yapılan analizleri durdurur , işlem sürecini sonlandırır ve okunan dataların backoffice gönderilme sürecini başlatır.

Swift
EnQualifyFace.faceComplete(withDelay delay: TimeInterval = 0.0)

Okunan datalar backoffice gönderilme işlemi tamamlandığında faceCompleted***()*** delegate'i tetiklenir ve faceCompare fonksiyonu ile karşılaştırma işlemi başlatılır.

Swift
func faceCompleted() {
    EnQualifyFace.faceCompare()
}

5.2.10. Canlılık Resminin Karşılaştırılması

NFC, OCR dan alınan biyometrik fotoğraflar ile canlılık adımında alınan canlılık fotoğrafı ile benzerlik oranları hesaplanabilir. Bu hesaplamayı başlatmak için faceCompare() fonksiyonu kullanılır ve sonuncunda faceCompareCompleted(), faceCompareFailed() delegate'leri tetiklenir.

Swift
EnQualifyFace.faceCompare()

Eğer karşılaştırma sırasında bir hata meydana gelirse, faceCompareFailed delegate'i tetiklenir. Bu delegate, hata durumunda yapılması gereken işlemleri yönetmek için kullanılır. Karşılaştırma işlemi başarıyla tamamlandığında, analiz sonuçları backoffice sistemine otomatik olarak iletilir. Verilerin iletimi tamamlandıktan sonra, faceCompareCompleted() delegate'i tetiklenir ve sürecin başarıyla sonuçlandığı belirtilir.

Swift
func faceCompareCompleted() {}

Canlılık işlemi tamamlandıktan sonra sonuç sayfası açılabilir veya bir sonraki işleme geçirebilir.

5.2.11. SDK yaşam döngüsünü sonlandırma

SDK yaşam döngüsünü sonlandırmak için yalnızca deinitialize(deinitializeCore:) kullanılır.

Swift
EnQualifyFace.deinitialize(deinitializeCore: Bool)

SDK yeniden kullanılacaksa, deinitialize işleminden sonra yeniden initialize edilmesi gerekir.

Not:

Sonuç sayfasında okunan verileri göstermek için, CustomerFacebölümünü inceleyebilirsiniz. Bu bölüm, okunan verilerin kullanıcıya düzgün ve anlaşılır bir şekilde sunulmasını sağlar.

EnQualifyFace Kullanım Kılavuzu

EnQualifyFace, yüz tanıma ve canlılık kontrolü işlemleri için kullanılır. Aşağıda, ilgili fonksiyonlar ve delegate'ler açıklanmıştır.

Fonksiyonlar

initialize(...) : EnQualifyFace

Swift
func initialize(_ sender: Any?,
                sessionModel: SessionModelFace? = nil,
                baseModel: BaseModelFace? = nil) {
  • sender: Any : Uygulamanın delegate metodlarını hangi classın karşılayacağını belirler.
  • sessionModel: SessionModelFace : Face işlemi sırasında kullanılacak oturum bilgilerini içerir.
  • baseModel: BaseModelFace : Doğrulama sürecinde temel verileri taşıyan modeldir.

verilebilir. API, singleton yapıda çalıştığı için uygulama oturumu boyunca aynı instance üzerinden işlemler gerçekleştirilir. Bu, hem kaynak tasarrufu sağlar hem de işlem tutarlılığını artırı Başlatma işlemi otomatik olarak şu işlemleri gerçekleştirir:

  • Token oluşturma
  • Settings yapılandırma
  • Session başlatma Eğer mevcut bir session varsa, yeni bir session oluşturulmaz ve mevcut session kullanılmaya devam edilir.

faceDetect()

Kamerada bir yüzün algılanıp algılanmadığını tespit eder. Kabul mekanizması iki aşamalıdır: Öncelikle netlik (blur) ön filtresi uygulanır ve son 5 karenin en az 4’ünün net olması gerekir. Ardından tek karelik kalite kontrolü yapılır. Bu kontrolde baş açıları sırasıyla <15° / <15° / <10° olmalı, göz açıklığı >0,8 olmalı ve en az 5 landmark bulunmalıdır. Bu koşullar sağlandığında yüz algılama işlemi başarılı kabul edilir.


smileDetect()

Yüzde bir gülümseme olup olmadığını algılar. Gülümseme, canlılık kontrolünde yaygın bir jesttir. Varsayılan kontrol değeri: Backend kalibrasyonu yoksa fallback olarak gülümseme değerinin 0,5'ten yüksek olması beklenir.


eyeCloseDetect()

Gözlerin kapalı olup olmadığını algılar. Canlılık kontrolünde göz kırpma veya kapalı tutma hareketi yaygın bir kriterdir. Varsayılan kontrol değeri: Backend kalibrasyonu yoksa fallback olarak sağ veya sol göz açıklık değerlerinden birinin 0,5'ten küçük olması beklenir.


faceRightDetect()

Kişinin başını sağa çevirdiğini algılar. Bu hareket, canlılık kontrolünde isteğe bağlı bir doğrulama adımıdır. Varsayılan kontrol değeri: Backend kalibrasyonu yoksa fallback olarak başın sağa 20° veya daha fazla çevrilmesi beklenir.


faceLeftDetect()

Kişinin başını sola çevirdiğini algılar. Sağa çevirme işlemiyle benzer şekilde çalışır. Varsayılan kontrol değeri: Backend kalibrasyonu yoksa fallback olarak başın sola 20° veya daha fazla çevrilmesi beklenir.


faceUpDetect()

Kişinin başını yukarı kaldırdığını algılar. Bu hareket, canlılık kontrolü sırasında yaygın bir doğrulama yöntemidir. Varsayılan kontrol değeri: Backend kalibrasyonu yoksa fallback olarak başın 25° veya daha fazla yukarı kaldırılması beklenir.


faceComplete()

Bu fonksiyon, tüm yüz tanıma adımları tamamlandığında SDK'ya işlemlerin bittiğini bildirir , kameradan analiz durdurulur ve okunan dataların backoffice iletilme işlemini başlatır.


faceCompare()

Kameradan algılanan yüzü, OCR, NFC ile kimlik çip datasının içerisindeki biometrik fotoğraf ile karşılaştırır. Kimlik doğrulama süreçlerinde kullanılır.


Delegate'ler

Token / Session / Settings Delegate'leri

tokenCreateCompleted()

  • Token oluşturma işlemi tamamlandığında tetiklenir.
  • Eğer mevcut bir token varsa, yeniden oluşturulmaz ve mevcut token kullanılır.

tokenCreateFailed()

  • Token oluşturulurken hata alınırsa tetiklenir.

settingsGetFailed()

  • Settings bilgilerini çekerken hata alınırsa tetiklenir.

sessionAddFailed()

  • Yeni bir session oluşturulurken hata alınırsa tetiklenir.


integrationAddCompleted()

  • IntegrationAdd servisine yapılan istek tamamlandığında tetiklenir.

integrationAddFailed()

  • IntegrationAdd servisi istek yapıldığında hata alınırsa tetiklenir.

initializeCompleted(module: String)

  • EnQualifyFace modülü initialize edildikten sonra, token, ayarlar (settings) ve oturum (session) işlemleri başarıyla tamamlandığında tetiklenir.

Başlatılan modüle göre işlem akışı belirlenmelidir. * Parametre:

  • module: Başlatılan modülün adı.

Face Callback'leri

faceDetected()

  • Kamerada bir yüz algılandığında tetiklenir. Bu olay, canlılık kontrol sürecinin başlaması için temel adımdır.

smileDetected()

  • Kullanıcının gülümseme hareketi algılandığında tetiklenir. Bu, canlılık kontrolü sırasında beklenen eylemlerden biridir.

eyeCloseDetected()

  • Gözlerin kapalı olduğu durum algılandığında tetiklenir. Bu fonksiyon, kullanıcıdan göz kırpma veya belirli bir süre gözlerini kapalı tutmasının beklendiği durumlarda kullanılır.

faceRightDetected()

  • Kullanıcının başını sağa çevirdiği algılandığında tetiklenir. Canlılık kontrolü kapsamında yön doğrulaması için kullanılır..

faceLeftDetected()

  • Kullanıcının başını sola çevirdiği algılandığında tetiklenir. Canlılık kontrolü kapsamında yön doğrulaması için kullanılır.

faceUpDetected()

  • Kullanıcının başını yukarı kaldırdığı algılandığında tetiklenir. Canlılık kontrolü kapsamında yön doğrulaması için kullanılır.

faceCompareCompleted()

  • Yüz karşılaştırma işlemi başarıyla tamamlandığında tetiklenir. Bu, gerçek zamanlı yüz ile kaydedilmiş yüz verisi arasında yeterli eşleşmenin sağlandığını gösterir.

faceCompareFailed(error: EnQualifyFaceError)

  • Yüz karşılaştırma işlemi başarısız olduğunda tetiklenir.
  • Parametre:

  • error: Karşılaştırma hatasıyla ilgili detaylı bir mesaj.


livenessFailed(error: EnQualifyFaceError)

  • Canlılık analizi başarısız olduğunda tetiklenir.
  • Parametre:

  • error: Hata kodu


faceDetectFailed(error: EnQualifyFaceError)

  • Yüz algılama işlemi başarısız olduğunda tetiklenir.
  • Parametre:

  • error: Hata kodu


faceCompleted()

  • Yüz karşılaştırma ve canlılık kontrolü işlemleri başarıyla tamamlandığında tetiklenir. Bu olay, gerçek zamanlı yüz ile kayıtlı yüz verisinin başarılı şekilde eşleştiğini ve tüm sürecin tamamlandığını gösterir.

faceFailed(error: EnQualifyFaceError)

Swift
public enum EnQualifyFaceError: Error {
    case timeout(FaceState, String)
    case detection(String)
    case liveness(String)
    case comparison(String)
    case camera(String)
    case luminosityFailed(String)
    case backgroundInterruption(String)

    public var faceLocalizedDescription: String {
        switch self {
        case .timeout(let state, let message):
            return "Timeout during \(state) state: \(message)"
        case .detection(let message),
             .liveness(let message),
             .comparison(let message),
             .camera(let message),
             .luminosityFailed(let message),
             .backgroundInterruption(let message):
            return message
        }
    }
}
  • Face işlemlerinde bir hata aldığında veya başarısız olduğunda tetiklenir.
  • Parametreler:

  • faceLocalizedDescription: Hata mesajı.


Modeller

BaseModelFace

BaseModelFace, Doğrulama süreçlerinde kullanılan sertifika bilgilerini, sertifika public key değerlerini ve sunucu bağlantı adresini içeren veri modelidir. Signaling (Haberleşme) ve MAPI (Mobile-Application Programming Interface) sertifikaları dosya (.der) formatında, Base64 metin formatında veya public key listesi olarak saklanabilir.

Model

Swift
class BaseModelFace(
    var signallingCertificateList: [String]? = nil
    var mapiCertificateList: [String]? = nil
    var signallingCertificateBase64List: [String]? = nil
    var mapiCertificateBase64List: [String]? = nil
    var signallingCertificatePublicKeyList: [String]? = nil
    var mapiCertificatePublicKeyList: [String]? = nil
    var baseURL: String?
    var locale: String? = nil
    var mobileUser: String? = nil
    var countryCode: String? = nil
)

Özellikler

Özellik Tip Açıklama
signallingCertificateList [String]? Signalling sertifikalarının dizisi. Sertifikalar dosya formatında saklanır.
mapiCertificateList [String]? MAPI sertifikalarının dizisi. Sertifikalar dosya formatında saklanır.
signallingCertificateBase64List [String]? Signalling sertifikalarının Base64 metin formatında kodlanmış halleri.
mapiCertificateBase64List [String]? MAPI sertifikalarının Base64 metin formatında kodlanmış halleri.
signallingCertificatePublicKeyList [String]? Signalling sertifikalarının public key formatındaki değerlerini içeren listedir.
mapiCertificatePublicKeyList [String]? MAPI sertifikalarının public key formatındaki değerlerini içeren listedir.
*baseURL String API doğrulama işlemleri için kullanılan temel sunucu adresi.
locale String Sesli yönlendirme mesajlarının hangi dilde olacağını belirler.
mobileUser String? Authorization sağlanırken kullanılan anonymous user bilgisini ifade eder.
countryCode String? Ülke ya da bölge özelinde doğrulama yapılırken, gerekli olan verilerin bölge özelinde edinilmesini sağlamak için kullanılır.

Kullanım Örneği

Aşağıdaki örnekte, BaseModelFace nesnesi oluşturularak sertifika bilgileri ve sunucu adresi tanımlanmaktadır:

Swift
var baseModelFace = BaseModelFace(
    signallingCertificateList: ["AI_CERT_1", "AI_CERT_2"],
    mapiCertificateList: ["MAPI_CERT_1", "MAPI_CERT_2"],
    signallingCertificateBase64List: ["QUlDRVJU...", "Q0VSVF8y..."],
    mapiCertificateBase64List: ["TU9SRSB...", "Q0VSVF8z..."],
    signallingCertificatePublicKeyList: ["SIGNALLING_PUBLIC_KEY_1", "SIGNALLING_PUBLIC_KEY_2"],
    mapiCertificatePublicKeyList: ["MAPI_PUBLIC_KEY_1", "MAPI_PUBLIC_KEY_2"],
    baseURL: "API_SERVER_URL",
    locale: "tr",
    mobileUser: "mobile",
    countryCode: "TUR"
)

Açıklamalar

  • Sertifikalar (signallingCertificateList, mapiCertificateList): Sertifika bilgileri dosya formatında saklanır.
  • Base64 Sertifikalar (signallingCertificateBase64List, mapiCertificateBase64List): Sertifikaların Base64 metin formatına çevrilmiş halleri.
  • Public Key Sertifikalar (signallingCertificatePublicKeyList, mapiCertificatePublicKeyList): Signalling ve MAPI sertifikalarının public key değerlerini içeren listelerdir.
  • Sunucu Bağlantısı (baseURL): Doğrulama veya sertifika işlemlerinin gerçekleştirileceği sunucu URL’si.

SessionModelFace

SessionModelFace, Bir çağrı oturumu sırasında kullanıcı ve kimlik bilgilerini içeren veri modelidir. Çağrı türü, kullanıcı detayları, kimlik bilgileri ve oturumla ilgili ek parametreleri içerir.

Model Tanımı

Swift
class SessionModelFace(
    var callType: String?, 
    var name: String? = nil,
    var surname: String? = nil,
    var phone: String? = nil,
    var email: String? = nil,
    var identityType: String? = nil,
    var identityNo: String? = nil,
    var reference: String?,
    var canAutoClose: NSNumber?,
    var _continue: NSNumber?,
    var category: String? = nil,
    var taxNumber: String? = nil,
    var businessReference: String? = nil,
    var handicapped: NSNumber?
)

Özellikler

Özellik Tip Açıklama
*callType String Zorunlu. Çağrı türünü belirten parametre (örneğin: "NewCustomer").
name String? Kullanıcının adı. Boş olabilir.
surname String? Kullanıcının soyadı. Boş olabilir.
phone String? Kullanıcının telefon numarası. Boş olabilir.
email String? Kullanıcının e-posta adresi. Boş olabilir.
identityType String? Kimlik türü (örneğin: "I"(T.C. Kimlik Kartı), "P"(Pasaport)). Boş olabilir.
identityNo String? Kullanıcının kimlik numarası. Boş olabilir.
*reference String Zorunlu. Oturum için referans ID'si.
canAutoClose NSNumber? Oturumun otomatik kapanıp kapanmayacağını belirler. Değer olarak 0 veya 1 verilebilir.
_continue NSNumber? Oturumun devam edip etmeyeceğini belirler. Değer olarak 0 veya 1 verilebilir.
category String? Oturumun ait olduğu kategori. Boş olabilir.
taxNumber String? Kullanıcıya ait vergi numarası. Boş olabilir.
businessReference String? İşletme ile ilgili referans bilgisi. Boş olabilir.
handicapped NSNumber? Kullanıcının engelli olup olmadığını belirten bayrak. Değer olarak 0 veya 1 verilebilir.

Kullanım Örneği

Aşağıdaki örnekte, SessionModelFace nesnesi oluşturularak oturum bilgileri tanımlanmaktadır:

Swift
var sessionModelFace = SessionModelFace(
    callType: "NewCustomer",
    name: "Enqura",
    surname: "Information",
    phone: "+905551234567",
    email: "enqualifyplus@enqura.com",
    identityType: "TC. Kimlik Kartı",
    identityNo: "12345678901",
    reference: "REF123456",
    canAutoClose: 1,
    _continue: 1,
    category: "category",
    taxNumber: "9876543210",
    businessReference: "COMPANY",
    handicapped: 0
)

Açıklamalar

  • Zorunlu Alanlar: callType ve reference parametreleri mutlaka belirtilmelidir.
  • Kullanıcı Bilgileri: name, surname, phone, email gibi alanlar isteğe bağlıdır.
  • Kimlik Bilgileri: identityType ve identityNo, NFC doğrulama veya kimlik tanımlama süreçlerinde kullanılabilir.
  • Engellilik Durumu: handicapped parametresi kullanıcının özel gereksinimlere sahip olup olmadığını belirtir.
  • Otomatik Kapanma: canAutoClose, oturumun belirli bir koşul gerçekleştiğinde otomatik olarak kapanmasını sağlayabilir.
  • Devam Durumu: _continue, oturumun devam eden bir işlem olup olmadığını kontrol eder.

CustomerFace

Bu değerler, bir yüz tanıma ve canlılık kontrolü işlemi için kullanılan çeşitli parametreler ve ölçütlerdir. Her biri, yüz tanıma, hareket algılama, göz algılama ve kimlik doğrulama gibi özellikleri izlemek için kullanılır.

Swift
@objc public class CustomerFace: NSObject {
    @objc public static let shared = CustomerFace()

    // MARK: - Image Getters
    @objc public func getFaceDetectedImage() -> UIImage? {}

    @objc public func getSmilingDetectedImage() -> UIImage? {}

    @objc public func getFaceLeftDetectedImage() -> UIImage? {}

    @objc public func getFaceRightDetectedImage() -> UIImage? {}

    @objc public func getFaceUpDetectedImage() -> UIImage? {}

    @objc public func getEyeCloseDetectedImage() -> UIImage? {}

    @objc public func getEyeCloseIntervalDetectedImage() -> UIImage? {}

    @objc public func getEyeOpenIntervalDetectedImage() -> UIImage? {}

    // MARK: - Angle Getters
    @objc public func getFaceLeftAngle() -> CGFloat {}

    @objc public func getFaceRightAngle() -> CGFloat {}

    @objc public func getFaceUpAngle() -> CGFloat {}

    // MARK: - Eye Measurement Getters
    @objc public func getOpennessOfLeftEye() -> Float {}

    @objc public func getOpennessOfRightEye() -> Float {}

    // MARK: - Confidence and Distance Getters
    @objc public func getChipConfidence() -> Int {}

    @objc public func getChipDistance() -> Double {}

    @objc public func getIdDocConfidence() -> Int {}

    @objc public func getIdDocDistance() -> Double {}

    @objc public func getAntiSpoofing() -> Double {}

    // MARK: - Eye Confidence Getters
    @objc public func getLeftEyeCloseConfidence() -> CGFloat {}

    @objc public func getRightEyeCloseConfidence() -> CGFloat {}

    @objc public func getSmilingConfidence() -> CGFloat {}

    // MARK: - Validity Level Getters
    @objc public func getIdDocDistanceValidityLevel() -> Int {}

    @objc public func getChipDistanceValidityLevel() -> Int {}

    @objc public func getAntiSpoofingValidityLevel() -> Int {}

    // MARK: - Eye Close Capture Getters
    @objc public func getEyeCloseCaptureAntispoofing() -> Float {}

    @objc public func getEyeCloseCaptureConfidence() -> Float {}

    @objc public func getEyeCloseCaptureDistance() -> Float {}

    @objc public func getEyeCloseCaptureDistanceValidityLevel() -> Int {}

    @objc public func getEyeCloseCaptureAntispoofingValidityLevel() -> Int {}

    // MARK: - Eye Close Capture Setters
    @objc public func setEyeCloseCaptureAntispoofing(_ value: Float) {}

    @objc public func setEyeCloseCaptureConfidence(_ value: Float) {}

    @objc public func setEyeCloseCaptureDistance(_ value: Float) {}

    @objc public func setEyeCloseCaptureDistanceValidityLevel(_ value: Int) {}

    @objc public func setEyeCloseCaptureAntispoofingValidityLevel(_ value: Int) {}

    // MARK: - Smiling Capture Getters
    @objc public func getSmilingCaptureAntispoofing() -> Float {}

    @objc public func getSmilingCaptureConfidence() -> Float {}

    @objc public func getSmilingCaptureDistance() -> Float {}

    @objc public func getSmilingCaptureDistanceValidityLevel() -> Int {}

    @objc public func getSmilingCaptureAntispoofingValidityLevel() -> Int {}

    // MARK: - Smiling Capture Setters
    @objc public func setSmilingCaptureAntispoofing(_ value: Float) {}

    @objc public func setSmilingCaptureConfidence(_ value: Float) {}

    @objc public func setSmilingCaptureDistance(_ value: Float) {}

    @objc public func setSmilingCaptureDistanceValidityLevel(_ value: Int) {}

    @objc public func setSmilingCaptureAntispoofingValidityLevel(_ value: Int) {}
}

Görüntü (Image) Getter’ları

Bu fonksiyonlar, yüz doğrulama akışı sırasında belirli bir aksiyonun başarıyla algılandığı anın görüntüsünü döner.

  • Kullanıcının yüzünün sistem tarafından ilk kez geçerli şekilde algılandığı anın görüntüsü.
Text Only
getFaceDetectedImage() -> UIImage?
  • Kullanıcının gülümsediği an algılandığında yakalanan görüntü.
Text Only
getSmilingDetectedImage() -> UIImage?
  • Kullanıcının yüzünü sola çevirdiği an yakalanan görüntü.
Text Only
getFaceLeftDetectedImage() -> UIImage?
  • Kullanıcının yüzünü sağa çevirdiği an yakalanan görüntü.
Text Only
getFaceRightDetectedImage() -> UIImage?
  • Kullanıcının yüzünü yukarı kaldırdığı an yakalanan görüntü.
Text Only
getFaceUpDetectedImage() -> UIImage?
  • Kullanıcının gözlerini kapattığı an yakalanan görüntü.
Text Only
getEyeCloseDetectedImage() -> UIImage?
  • Gözlerin belirli bir süre kapalı kaldığı interval sırasında yakalanan görüntü.
Text Only
getEyeCloseIntervalDetectedImage() -> UIImage?
  • Gözlerin tekrar açıldığı interval sırasında yakalanan görüntü.
Text Only
getEyeOpenIntervalDetectedImage() -> UIImage?

Face Angle Getter Fonksiyonları

Bu fonksiyon ile birlikte, yapılan yüz hareketinin hangi açıyla gerçekleştiğinin bilgisi edinilebilir.

  • Yüzün sola dönüş açısı.
Text Only
getFaceLeftAngle() -> AnyObject?
  • Yüzün sağa dönüş açısı.
Text Only
getFaceRightAngle() -> AnyObject?
  • Yüzün yukarı bakma açısı.
Text Only
getFaceUpAngle() -> AnyObject?

Eye Measurement Fonksiyonları

Bu fonksiyonlar ile birlikte, yapılan göz kapatma işlemlerinin değer bilgisi edinilebilir.

0.0 → kapalı, 1.0 → tamamen açık

  • Sol gözün açıklık değeri.
Text Only
getOpennessOfLeftEye() -> Float
  • Sağ gözün açıklık değeri.
Text Only
getOpennessOfRightEye() -> Float

Liveness / Confidence / Distance Fonksiyonları

  • Bu fonksiyon ile birlikte yüz tespiti esnasında alınan görsel ile kimlik çipi içerisinden alınan görsellerin karşılaştırma değeri elde edinilebilir.
Text Only
getChipConfidence() -> Int
  • Bu fonksiyon ile birlikte yüz tespiti esnasında alınan görsel ile kimlik çipi içerisinden alınan görsellerin benzerlik uzaklığı değeri elde edinilebilir.
Text Only
getChipDistance() -> Double

Kimlik Belgesi (ID Document) Değerleri

  • Bu fonksiyon ile birlikte yüz tespiti esnasında alınan görsel ile kimlik üzerinde bulunan görsellerin karşılaştırma değeri elde edinilebilir.
Text Only
getIdDocConfidence() -> Int
  • Bu fonksiyon ile birlikte yüz tespiti esnasında alınan görsel ile kimlik üzerinde bulunan görsellerin benzerlik uzaklığı değeri elde edinilebilir.
Text Only
getIdDocDistance() -> Double

Anti-Spoofing

  • Bu fonksiyon ile görüntünün gerçek kullanıcı mı yoksa sahte (fotoğraf/video) olup olmadığına dair değer elde edinilebilir.
Text Only
getAntiSpoofing() -> Double

Eye / Smile Confidence Fonksiyonları

  • Bu fonksiyon ile sol göz kapama hareketinin, yüz analiz sistemi tarafından algılanma seviyesini temsil eden değer edinilebilir.
Text Only
getLeftEyeCloseConfidence() -> AnyObject?
  • Bu fonksiyon ile sağ göz kapama hareketinin, yüz analiz sistemi tarafından algılanma seviyesini temsil eden değer edinilebilir.
Text Only
getRightEyeCloseConfidence() -> AnyObject?
  • Bu fonksiyion ile gülümseme hareketinin, yüz analiz sistemi tarafından algılanma düzeyini ifade eden değer edinilebilir.
Text Only
getSmilingConfidence() -> AnyObject?

Validity Level Fonksiyonları

Bu fonksiyonlar ile birlikte ölçümün sistemin kabul kriterlerine uyup uymadığı bilgisi edinilebilir.

0 ölçüm değeri, sistem tarafından tanımlanan minimum eşik değerin altındadır. 1 ölçüm değeri, sistem tarafından tanımlanan maksimum eşik değerin üzerindedir. 2 ölçüm değeri, minimum ve maksimum eşik değerleri arasındadır.

  • Kimlik belgesi üzerindeki yüz ile canlı yakalanan yüz görüntüsü arasındaki mesafe ölçümünün, sistemin kabul kriterlerine uygunluğunu ifade eder.
Text Only
getIdDocDistanceValidityLevel() -> Int
  • Çip (NFC) üzerinden elde edilen yüz verisi ile canlı yakalanan yüz görüntüsü arasındaki mesafe ölçümünün geçerlilik durumunu belirtir.
Text Only
getChipDistanceValidityLevel() -> Int
  • Canlılık doğrulama (anti-spoofing) analizinin, sahtecilik tespit mekanizmaları açısından kabul edilebilir olup olmadığını gösterir. Bu değer, yüz doğrulamanın gerçek bir kullanıcıya ait olup olmadığını değerlendirmek için kullanılır.
Text Only
getAntiSpoofingValidityLevel() -> Int

Eye Close Capture Getter Fonksiyonları

Bu fonksyonlar sadece göz kapama anına özel ölçümlerdir.

  • Göz kapama aksiyonu sırasında elde edilen tekil görüntü ölçümlerini temsil eder.
Text Only
getEyeCloseCaptureAntispoofing()
getEyeCloseCaptureConfidence()
getEyeCloseCaptureDistance()
getEyeCloseCaptureDistanceValidityLevel()
getEyeCloseCaptureAntispoofingValidityLevel()

Eye Close Capture Setter Fonksiyonları

  • Göz kapama yakalamasına ait ölçüm değerlerini set etmek için kullanılır.
Text Only
setEyeCloseCaptureAntispoofing(_:)
setEyeCloseCaptureConfidence(_:)
setEyeCloseCaptureDistance(_:)
setEyeCloseCaptureDistanceValidityLevel(_:)
setEyeCloseCaptureAntispoofingValidityLevel(_:)

Smiling Capture Getter Fonksiyonları

  • Bu fonksiyonlar ile gülümseme anına ait tekil yakalama ölçüm bilgileri edinilebilir.
Text Only
getSmilingCaptureAntispoofing()
getSmilingCaptureConfidence()
getSmilingCaptureDistance()
getSmilingCaptureDistanceValidityLevel()
getSmilingCaptureAntispoofingValidityLevel()

Smiling Capture Setter Fonksiyonları

  • Gülümseme capture ölçümlerini manuel olarak set etmek için kullanılır.
Text Only
setSmilingCaptureAntispoofing(_:)
setSmilingCaptureConfidence(_:)
setSmilingCaptureDistance(_:)
setSmilingCaptureDistanceValidityLevel(_:)
setSmilingCaptureAntispoofingValidityLevel(_:)

EnQualifyFace Video Kayıt Kullanım Kılavuzu

Video Kayıt Özellikleri

Video kayıt özelliği tamamen otomatik çalışır. Manuel olarak başlatma veya durdurma işlemi yapılmasına gerek yoktur. InitializeCompleted delegate'i tetiklendikten sonra Setting/Get servisinden dönen screenRecord parametresinin değerine bakılır. Video kaydı başarılı bir şekilde tamamlandıktan sonra Backoffice'e gönderilir. Gönderilme işlemi sırasında Setting/Get servisinden dönen screenRecordUploadRetryCount ve screenRecordUploadTimeout değerlerine göre işlem yapılır.

ScreenRecord

  • Mobil uygulama üzerinden ekran kaydı alınıp alınmayacağını belirleyen parametredir.

ScreenRecordUploadRetryCount

  • Mobil uygulama üzerinden alınacak ekran kaydının yüklenmesi sırasında hata alması durumunda tekrar deneme sayısını belirten parametredir.

ScreenRecordUploadTimeout

  • Mobil uygulama üzerinden alınacak ekran kaydının yükleme işleminin timeout süresini belirten parametredir.

1. Video Kayıt Nasıl Çalışır?

1.1 Başlama Koşulları

Video kayıt şu koşullarda otomatik başlar:

  • Backoffice'den gelen screenRecord parametresi true olmalıdır
  • Self-servis modda çalışıyor olmalıdır (video görüşme modunda değil)
  • Kamera başarıyla başlatılmış olmalıdır

1.2 Video Kayıt Akışı

Text Only
1. EnQualifyFace.faceDetect() çağrılır
   ↓
2. Kamera başlatılır
   ↓
3. Video kayıt otomatik başlar (screenRecord = true ise)
   ↓
4. Canlılık kontrolleri yapılır (kayıt devam eder)
   ↓
5. faceComplete() çağrıldığında video kaydı durdurulur
   ↓
6. Backend'e gönderim yapılır
   ↓
7. faceCompleted() veya faceFailed() delegate'i tetiklenir

2. Delegate Metodları ve Video Kayıt

2.1 Video Kayıt ile İlgili Fonksiyon'lar

Swift
//Kamera açıldıktan sonra video kaydı başlatılır. (screenRecord = true ise)
func faceDetect(in viewController: UIViewController,
                cameraPosition: AVCaptureDevice.Position = .front) {}

2.2 Video Kayıt ile İlgili Delegate'ler

Swift
protocol EnQualifyFaceDelegate {
    // Video kaydı durdurulup backend'e başarıyla gönderildiğinde
    func faceCompleted()

    // Video kayıt veya gönderim başarısız olduğunda
    func faceFailed(error: EnQualifyFaceError)
}

2.3 Video Kayıt Yaşam Döngüsü

Delegate Metodu Video Kayıt Durumu Açıklama
initializeCompleted() Henüz başlamadı Backend ayarları alındı
faceDetect(in: viewController) Başladı Video kayıt işlemi başladı
faceCompleted() Durduruldu ve gönderildi İşlem başarılı
faceFailed() İptal edildi Hata oluştu

3. Implementation

3.1 ViewController'da Kullanım Örneği

Swift
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Face modülünü initialize et
        EnQualifyFace.initialize(
            self,
            sessionModel: sessionModel,
            baseModel: baseModel
        )
    }

    // Face detection başlat
    func startFaceVerification() {
        // Video kayıt otomatik başlayacak (screenRecord = true ise)
        EnQualifyFace.setTotalSteps(2)
        EnQualifyFace.faceDetect(in: self)
    }
}

// MARK: - EnQualifyFaceDelegate
extension ViewController: EnQualifyFaceDelegate {

    func initializeCompleted(moduleName: String) {
        // Backend ayarları alındı, video kayıt ayarı belirlendi
        print("Module initialized: \(moduleName)")

        if moduleName = "EnQualifyFace" {
            startFaceVerification()
        }
    }

    func faceDetected() {
        // Yüz algılandı, video kayıt başlamış durumda
        print("Face detected - video recording in progress")
    }

    func smileDetected() {
        // Gülümseme algılandı ve video'ya kaydedildi
        print("Smile detected - recorded in video")
    }

    func faceCompleted() {
        // Video kaydı durduruldu ve backend'e başarıyla gönderildi
        print("Face verification completed - video saved and uploaded")
    }

    func faceFailed(error: EnQualifyFaceError) {
        // Video kayıt iptal edildi veya gönderim başarısız
        print("Face verification failed: \(error.faceLocalizedDescription)")

        switch error {
        case .timeout(let state, let message):
            print("Timeout at state: \(state)")
        case .detection(let message):
            print("Detection error: \(message)")
        case .liveness(let message):
            print("Liveness error: \(message)")
        case .comparison(let message):
            print("Comparison error: \(message)")
        case .camera(let message):
            print("Camera error: \(message)")
        case .luminosityFailed(let message):
            print("Luminosity error: \(message)")
        }
    }
}

4. Video Görüşme (VideoCall) Modu

4.1 Video Görüşme vs Self-Servis

Özellik Self-Servis Video Görüşme
Video Kayıt ✅ Var (screenRecord = true ise) ❌ Yok
Fotoğraf Kayıt ✅ Var ✅ Var
Backend Gönderim ✅ Video + Fotoğraflar ✅ Sadece Fotoğraflar

4.2 Video Görüşme Kontrolü

Video kaydı için SDK, görüntülü görüşme içerisinde olup olmadığını kontrol etmektedir. Video kaydı sadece Self-servis aşamasında yapılabilir.

5. Log Sistemi

5.1 Video Kayıt Logları

Video kayıt sürecinde üretilen loglar:

Log Kodu Açıklama Ne Zaman
I_FACE_DETECT Face detection başladı faceDetect() çağrıldığında
I_VIDEO_RECORDING_START Video kayıt başladı Kamera başladıktan sonra
I_SET_FACE_COMPLETED Face işlemi tamamlandı faceComplete() çağrıldığında
I_VIDEO_RECORDING_STOP Video kayıt durduruldu Video kaydı bittiğinde
I_FACE_VIDEO_UPLOAD_SUCCESS Video backend'e gönderildi Upload başarılı
I_FACE_VIDEO_UPLOAD_FAILURE Video gönderilemedi Upload başarısız
I_VIDEO_FILE_REMOVAL_ERROR Eski video dosyası silinemedi Video kayıt dosyası dosya kaldırılamadı
I_FACE_VIDEO_READ_FAILURE Video dosyası okunamadı Upload başarısız

6. Error Handling

6.1 Video Kayıt Hataları

Swift
func faceFailed(error: EnQualifyFaceError) {
    switch error {
    case .liveness("Face save failed"):
        // Video backend'e gönderilemedi
        print("Video upload failed")
    case .timeout(_, _):
        // Zaman aşımı - video iptal edildi
        print("Timeout - video recording cancelled")
    case .detection(_):
        // Yüz bulunamadı - video iptal edildi
        print("No face - video recording cancelled")
    case .luminosityFailed(_):
        // Işık yetersiz - video iptal edildi
        print("Low light - video recording cancelled")
    default:
        print("Error: \(error.faceLocalizedDescription)")
    }
}

6.2 Güvenlik Kontrolleri

Uygulama arka plana alındığında veya Picture in Picture (PiP) akışı kesintiye uğradığında video kayıt otomatik olarak iptal edilir. Bu durumda faceFailed(error: .backgroundInterruption(...)) callback'i tetiklenir:

Swift
func faceFailed(error: EnQualifyFaceError) {
    if case .backgroundInterruption(let message) = error {
        // Güvenlik nedeniyle iptal edildi
        print("Security: App went to background or PiP was interrupted - recording cancelled")
        print(message)
    }
}

7. Önemli Notlar

7.1 Otomatik Yönetim

  • Video kayıt tamamen otomatiktir
  • Developer'ın müdahalesine gerek yoktur
  • Backend ayarlarına göre otomatik başlar/durur

7.2 Backend Entegrasyonu

  • Video kaydı tamamlandığında otomatik olarak backend'e gönderilir
  • Başarılı gönderimde faceCompleted() tetiklenir
  • Başarısız gönderimde faceFailed(error: EnQualifyFaceError) tetiklenir; ilgili hata nedeni EnQualifyFaceError case'i üzerinden değerlendirilir.

7.3 Video Görüşme Desteği

  • Video görüşme modunda video kayıt yapılmaz

Özet

Video kayıt özelliği için yapılması gerekenler:

  1. EnQualifyFaceDelegate protokolünü implement etmek
  2. Delegate metodlarını handle etmek
  3. Error durumlarını yönetmek

Video kayıt işlemi backend ayarlarına göre otomatik olarak yönetilir. Developer'ın video kayıt başlatma veya durdurma ile ilgili herhangi bir işlem yapmasına gerek yoktur.