Belge tarama
Belge, IDCardDetectionWrapper tarafından cihaz üzerinde algılanır ve kullanıcı belgeyi kameraya doğru tuttuğunda otomatik olarak yakalanır. Ardından yakalanan görüntüyü doğrulama için Prove ID’ye gönderirsiniz.
1. Kamera görünümünü ekleyin
Bölüm başlığı “1. Kamera görünümünü ekleyin”import UIKitimport id_card_detection_ios_wrapperimport id_card_detection_ios_cnn
final class DocumentCaptureViewController: UIViewController { @IBOutlet weak var containerView: UIView!
var transactionId = "" private var reader: IDCardDetectionWrapper?
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated)
let reader = IDCardDetectionWrapper(frame: containerView.frame) containerView.addSubview(reader.getView()!)
let conf = IDCardDetectionWrapperConfiguration() conf.cardTypeList = [.NEW_ID] // arka yüz için .NEW_ID_BACK conf.messageToEncrypt = transactionId conf.encryptDeviceId = true conf.detectBothOrientation = true reader.setConfiguration(conf: conf)
reader.setDelegate(delegate: self) reader.setViewDelegate(delegate: self) reader.startCapture() self.reader = reader }
override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) reader?.stopCapture() }}
extension DocumentCaptureViewController: IDCardDetectionWrapperDelegate, IDCardDetectionWrapperViewDelegate { func cardDetected(image: UIImage, cardType: WrapperCardType) { reader?.stopCapture() // Görüntüyü Prove ID'ye gönderin (aşağıda) }
func cardDetectionFailed(wrapperErrorsModel: WrapperErrorsModel) { // Kullanıcıyı yönlendirin: yaklaştırın, parlamayı önleyin vb. (bkz. Hatalar) }
func onViewDrawn(mainRect: CGRect, photoRect: CGRect?) { }}Delegate metotları arka planda bir thread’den çağrılabilir; arayüzü DispatchQueue.main üzerinde güncelleyin.
Tam kamera karesi
Bölüm başlığı “Tam kamera karesi”Belgenin yakalandığı tam kamera karesini de göndermek için bir frame delegate verin. Bu durumda cardDetected(cardImage:cardType:frame:) iki görüntüyle birlikte çağrılır; cardDetected(image:cardType:) yerine bunu kullanın.
reader.setFrameDelegate(delegate: self)
extension DocumentCaptureViewController: IDCardDetectionWrapperFrameDelegate { func cardDetected(cardImage: UIImage, cardType: WrapperCardType, frame: UIImage) { // cardImage ve frame'i gönderin }}2. Görüntüyü doğrulayın
Bölüm başlığı “2. Görüntüyü doğrulayın”Yakalanan görüntüyü Base64’e çevirip belge tipine uygun çağrıyla gönderin:
import ProveIDApiClient
func verifyFront(image: UIImage, frame: UIImage?, controlResults: [ProveIDApiClient.ControlEntryModel]? = nil) { let body = CheckIDModel(transactionId: transactionId, img: image.pngData()!.base64EncodedString(), frame: frame?.pngData()?.base64EncodedString(), controlResults: controlResults)
IDServiceAPI.checkNewIDCard(body: body) { result in switch result { case .success(let response): let data = response.capturedData // IDInformationModel let controls = response.controlResults // [ControlEntryModel] showFrontResult(data, controls) case .failure(let error): showError(error) } }}| Belge | Çağrı |
|---|---|
| T.C. kimlik kartı — ön yüz | IDServiceAPI.checkNewIDCard(body: CheckIDModel(…)) |
| T.C. kimlik kartı, sürücü belgesi, eski kimlik — arka yüz | IDServiceAPI.addSecondary(body: SecondaryIDInformationModel(image:frame:transactionID:)) |
| Eski T.C. kimlik kartı | IDServiceAPI.checkOldIDCard(body: CheckIDModel(…)) |
| Sürücü belgesi | IDServiceAPI.checkNewDriverCard(body: CheckIDModel(…)) |
| Pasaport | IDServiceAPI.checkPassport(body: CheckIDModel(…)) |
| Mavi kart | IDServiceAPI.checkTurkishBlueCard(body: CheckIDModel(…)) |
| Yabancı kimlik belgesi | IDServiceAPI.checkForeignID(body: CheckIDModel(…)) |
Ön yüz çağrıları CheckIdReturnModel, arka yüz çağrısı SecondaryResultModel döner. İkisinde de belgeden okunan bilgileri taşıyan capturedData (IDInformationModel) bulunur: id, name, sname, nat, gend, sno, bdat, edat.
Yakalama ayarları
Bölüm başlığı “Yakalama ayarları”IDCardDetectionWrapperConfiguration ile:
| Ayar | Açıklama |
|---|---|
cardTypeList: [WrapperCardType] |
Algılanacak belge tipleri |
detectBothOrientation: Bool |
Belgeyi iki yönde de algılar |
isFocusScoreThresholdActive: Bool |
Hemen yakalamak yerine net bir kare bekler (varsayılan false) |
focusScoreThreshold: Float |
Karenin hemen yakalanacağı skor (örnek: 0.95) |
minFocusScore: Float |
Alt netlik eşiği (örnek: 0.55) |
eligibleFocusScoreCount: Int |
minFocusScore eşiğini art arda geçmesi gereken kare sayısı |
maxHologramScoreForBlur: Float |
Hologram parlamasını önler (örnek: 0.75) |
maxGlareScore: Float |
Belge üzerindeki parlamayı önler (örnek: 0.5) |
turnIfReverse: Bool |
Ters tutulan belgeyi döndürür |
checkCardType: Bool |
cardTypeList dışındaki belgeleri reddeder |
isMrzActive: Bool |
MRZ okuma |
captureOnlyInHint: Bool |
Yalnızca belge çerçeve ipucunun içindeyken yakalar |
captureOnlyInHintMargin: CGFloat |
İpucu çevresinde izin verilen pay (örnek: 0.1) |
messageToEncrypt: String |
Görüntüye gömülecek mesaj; işlem kimliğini verin |
encryptDeviceId: Bool |
Cihaz kimliğini görüntüye gömer |
Algılama toleransları globaldir:
CNNUtil.ACCEPTABLE_RIGHT_LEFT_LINE_ERROR_RATIO = 0.075CNNUtil.ACCEPTABLE_TOP_BOTTOM_LINE_ERROR_RATIO = 0.075CNNUtil.ACCEPTABLE_WIDTH_HEIGHT_ERROR_RATIO = 0.075Fotokopi kontrolü
Bölüm başlığı “Fotokopi kontrolü”T.C. kimlik kartının ön yüzünde SDK, fotokopi gösterilip gösterilmediğini cihaz üzerinde kontrol edebilir:
conf.doFraudCheck = trueconf.hologramScoreForFraud = 0.85conf.checkingFraudTimeInMs = 2000reader.setFraudDelegate(delegate: self)
extension DocumentCaptureViewController: IDCardDetectionWrapperFraudDelegate { func fraudChecked(fraudResultModel: WrapperFraudResultModel) { let captured = fraudResultModel.cardDetectedModel let passed = fraudResultModel.fraudType == nil
// Sonucu görüntüyle birlikte Prove ID'ye iletin let entry = ProveIDApiClient.ControlEntryModel(entryType: "CLPHOTOCOPYDETECTION", entryScore: passed ? 1.0 : 0.0, entryInterpretation: AnyCodable(passed)) verifyFront(image: captured.image, frame: captured.frame, controlResults: [entry]) }}fraudChecked, kontrol tamamlandığında yakalanan belgeyle (cardDetectedModel) çağrılır; görüntüyü buradan gönderin.
Görsel ayarlar için Özelleştirme sayfasına bakın.