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:
- Yüz Tespiti: Kamera önündeki kullanıcının yüzünü tespit eder.
-
Canlılık Kontrolü: Farklı hareketlerin yapılmasını isteyerek kişinin canlı bir insan olduğunu doğrular:
-
Gülümseme tespiti
- Göz kapatma tespiti
- Yüzün sağa, sola ve yukarı çevrilmesi
- 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.
// 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.xcframeworkCoreModule.xcframeworkveVideoCallModule.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.
2.2 Runtime İzin İsteme¶
Initialize fonksiyonu içerisinde kamera izni istenmektedir.
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¶
3.2 Delegate Fonksiyonlarının Override Edilmesi¶
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.
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:
-
Token Oluşturma
-
EnQualifyFace, token oluşturma sürecini başlatır.
- Eğer token oluşturma işlemi sırasında bir hata oluşursa, tokenCreateFailed delegate'i tetiklenir.
- 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.
- 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.
- 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.
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.
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:
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.
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:
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.
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:
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.
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:
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.
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:
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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
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)
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¶
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:
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ı¶
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:
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:
callTypevereferenceparametreleri mutlaka belirtilmelidir. - Kullanıcı Bilgileri:
userName,surname,phone,emailgibi alanlar isteğe bağlıdır. - Kimlik Bilgileri:
identityTypeveidentityNo, NFC doğrulama veya kimlik tanımlama süreçlerinde kullanılabilir. - Engellilik Durumu:
handicappedparametresi 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.
@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ü.
- Kullanıcının gülümsediği an algılandığında yakalanan görüntü.
- Kullanıcının yüzünü sola çevirdiği an yakalanan görüntü.
- Kullanıcının yüzünü sağa çevirdiği an yakalanan görüntü.
- Kullanıcının yüzünü yukarı kaldırdığı an yakalanan görüntü.
- Kullanıcının gözlerini kapattığı an yakalanan görüntü.
- Gözlerin belirli bir süre kapalı kaldığı interval sırasında yakalanan görüntü.
- Gözlerin tekrar açıldığı interval sırasında yakalanan görüntü.
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ı.
- Yüzün sağa dönüş açısı.
- Yüzün yukarı bakma açısı.
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.
- Sağ gözün açıklık değeri.
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.
- 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.
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.
- 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.
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.
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.
- Bu fonksiyon ile sağ göz kapama hareketinin, yüz analiz sistemi tarafından algılanma seviyesini temsil eden değer edinilebilir.
- Bu fonksiyion ile gülümseme hareketinin, yüz analiz sistemi tarafından algılanma düzeyini ifade eden değer edinilebilir.
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.
- Ç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.
- 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.
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.
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.
setEyeCloseCaptureAntispoofing(_:)
setEyeCloseCaptureConfidence(_:)
setEyeCloseCaptureDistance(_:)
setEyeCloseCaptureDistanceValidityLevel(_:)
setEyeCloseCaptureAntispoofingValidityLevel(_:)
Smiling Capture Getter Fonksiyonları¶
- Bu fonksiyonlar ile gülümseme anına ait tekil yakalama ölçüm bilgileri edinilebilir.
getSmilingCaptureAntispoofing()
getSmilingCaptureConfidence()
getSmilingCaptureDistance()
getSmilingCaptureDistanceValidityLevel()
getSmilingCaptureAntispoofingValidityLevel()
Smiling Capture Setter Fonksiyonları¶
- Gülümseme capture ölçümlerini manuel olarak set etmek için kullanılır.
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
screenRecordparametresitrueolmalı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ışı¶
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¶
//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¶
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¶
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ı¶
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:
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:
- EnQualifyFaceDelegate protokolünü implement etmek
- Delegate metodlarını handle etmek
- 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.