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.

⚠atlassian-warning#FFEBE6

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.

Text Only
<key>NSCameraUsageDescription</key>

2.2 Runtime İzin İsteme

Initialize fonksiyonu içerisinde kamera izni istenmektedir.

Text Only
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

Text Only
class ViewController: EnQualifyFaceDelegate {

3.2 Delegate Fonksiyonlarının Override Edilmesi

Text Only
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 sessionCloseCompleted(status: String) {}

     func sessionCloseFailed() {}

     func tokenCreateCompleted() {}

     func tokenCreateFailed() {}

     func integrationAddCompleted() }

     func integrationAddFailed() {}

     func sessionAddFailed() {}

     func settingGetFailed() {}

     func signingSetCompleted() {}

     func signingCompleted() {}

     func signingSetFailed(error: String) {}
}

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

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.

Text Only
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.
Text Only
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.
Text Only
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.
Text Only
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.

Text Only
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'ler ile ilgili detaylı bilgiyi EnQualifyFace Kullanım Kılavuzuna göz atabilirsiniz.

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

5.2.1. Aşama Sayısı Ekleme

Ekranda gösterilen ilerleme görselinin kaç aşama olacağını belirlemek için setTotalSteps(_ steps: Int) çağrılır.

Text Only
EnQualifyFace.setTotalSteps(6)

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:

Text Only
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.

Text Only
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:

Text Only
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.

Text Only
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:

Text Only
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.

Text Only
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:

Text Only
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.

Text Only
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:

Text Only
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.

Text Only
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:

Text Only
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.

Text Only
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.

Text Only
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.

Text Only
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.

Text Only
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.

Text Only
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 Sessionını Kapatma

Session Kapatma İşleminin Yapılması

SDK'ların backend servislerle iletişim için kullandığı session'ın kapatılması için closeSession fonksiyonu kullanılır. Bu işlem, EnQualifyCore API tarafından yönetilir, fakat her SDK'nın API tarafında aşağıdaki gibi çağrılır.

⚠atlassian-warning#FFEBE6

Session bir SDK tarafından kapatıldıktan sonra eğer tekrar kullanılacak ise yeniden SDK initialize edilmesi gerekir.

Text Only
EnQualifyFace.sessionClose(finished: Bool)

Delegate Mekanizması

Session kapatma işlemi başarıyla tamamlandığında, activity içerisindeki sessionCloseCompleted delegate'i tetiklenir. Bu delegate içerisinde, işlem sonrasında yapılması gereken diğer işlemler ele alınabilir.

Text Only
func sessionCloseCompleted(status: String) {}

Session kapatma işlemi başarısız olduğunda, activity içerisindeki sessionCloseFailed delegate'i tetiklenir. Bu delegate içerisinde, işlem sonrasında yapılması gereken diğer işlemler ele alınabilir.

Text Only
func sessionCloseFailed() {}

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

Text Only
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. Bu fonksiyon, diğer işlemler için temel başlangıç adımıdır. Varsayılan Kontrol Değeri: Yüz algılandığında ve X, Y ekseninde -15 <= X <= 15, -15 <= Y <= 15 aralığındaysa işlem 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: Gülümseme değeri 0,9'dan yüksek olduğunda başarılı kabul edilir.


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: Sağ veya sol gözün bir tanesinin kapalı olması. Göz kapalık değeri 0,3'ten küçük olduğunda başarılı kabul edilir.


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: Başın 15° veya daha fazla sağa çevrilmesi durumunda başarılı kabul edilir.


faceLeftDetect()

Kişinin başını sola çevirdiğini algılar. Sağa çevirme işlemiyle benzer şekilde çalışır. Varsayılan Kontrol Değeri: Başın 15° veya daha fazla sola çevrilmesi durumunda başarılı kabul edilir.


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: Başın 10° veya daha fazla yukarı kaldırılması durumunda başarılı kabul edilir.


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.

sessionCloseCompleted(status: String)

  • Session kapatıldığında tetiklenir.
  • Parametre:

  • status : Session kapandığında session'ın statu bilgisi.


sessionCloseFailed()

  • Session kapatılırken 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.

faceCompareStarted()

  • Yüz karşılaştırma işlemi başladığında tetiklenir.

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


faceSaveStarted()

  • Cihazın yüz verisini okuma işlemi tamamlandığında ve bu veriler backoffice’e gönderilmeye başlandığında tetiklenir.

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)

Text Only
public enum EnQualifyFaceError: Error {
    case timeout(FaceState, String)
    case detection(String)
    case liveness(String)
    case comparison(String)
    case camera(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):
            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 ve sunucu bağlantı adresini içeren veri modelidir. Signaling (Haberleşme) ve MAPI (Mobile-Application Programming Interface) sertifikaları hem dosya (.der) formatında hem de Base64 metin formatta saklanır.

Model

Text Only
class BaseModelFace(
    var signallingCertificateList: [String]? = nil
    var mapiCertificateList: [String]? = nil
    var signallingCertificateBase64List: [String]? = nil
    var mapiCertificateBase64List: [String]? = nil
    var baseURL: String //Zorunlu alan
    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.
*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:

Text Only
var baseModelFace = BaseModelFace(
    signallingCertificateList: ["AI_CERT_1", "AI_CERT_2"],
    mapiCertificateList: ["MAPI_CERT_1", "MAPI_CERT_2"],
    signallingCertificateBase64List: ["QUlDRVJU...", "Q0VSVF8y..."],
    mapiCertificateBase64List: ["TU9SRSB...", "Q0VSVF8z..."],
    baseURL: "API_SERVER_URL",
    locale: "TR",
    mobileUser: "mobile",
    countryCode: "TUR"
)

Açıklamalar

  • Sertifikalar (signallingCertificateList, mapiCertificateList): Sertifika bilgileri dosya formatında saklanır.
  • Base64 Sertifikalar (signallingCertificateList, mapiCertificateBase64List): Sertifikaların Base64 metin formatına çevrilmiş halleri.
  • 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ı

Text Only
class SessionModelFace(
    var callType: String, // Zorunlu alan
    var userName: 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, // Zorunlu alan
    var canAutoClose: Bool = false, // Varsayılan: false
    var isContinue: Bool = false, // Varsayılan: false
    var category: String? = nil,
    var taxNumber: String? = nil,
    var businessReference: String? = nil,
    var handicapped: Bool? = false
)

Özellikler

Özellik Tip Açıklama
*callType String Zorunlu. Çağrı türünü belirten parametre (örneğin: "NewCustomer").
userName 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 Bool Oturumun otomatik kapanıp kapanmayacağını belirler. Varsayılan: false.
isContinue Bool Oturumun devam edip etmeyeceğini belirler. Varsayılan: false.
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 Bool Kullanıcının engelli olup olmadığını belirten bayrak. Varsayılan: false.

Kullanım Örneği

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

Text Only
var sessionModelFace = SessionModelFace(
    callType: "NewCustomer",
    userName: "Enqura",
    surname: "Information",
    phone: "+905551234567",
    email: "enqualifyplus@enqura.com",
    identityType: "TC. Kimlik Kartı",
    identityNo: "12345678901",
    reference: "REF123456",
    canAutoClose: true,
    isContinue: true,
    category: "category",
    taxNumber: "9876543210",
    businessReference: "COMPANY",
    handicapped: false
)

Açıklamalar

  • Zorunlu Alanlar: callType ve reference parametreleri mutlaka belirtilmelidir.
  • Kullanıcı Bilgileri: userName, 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: isContinue, 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.

Text Only
@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

Text Only
//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

Text Only
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

Text Only
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ı

Text Only
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 video kayıt otomatik iptal edilir:

Text Only
func faceFailed(error: EnQualifyFaceError) {
    if case .liveness("Face recognition was interrupted") = error {
        // Güvenlik nedeniyle iptal edildi
        print("Security: App went to background - recording cancelled")
    }
}

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: .liveness("Face save failed")) tetiklenir

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.