İçeriğe geç

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.

import UIKit
import id_card_detection_ios_wrapper
import 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.

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
}
}

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.

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.075
CNNUtil.ACCEPTABLE_TOP_BOTTOM_LINE_ERROR_RATIO = 0.075
CNNUtil.ACCEPTABLE_WIDTH_HEIGHT_ERROR_RATIO = 0.075

T.C. kimlik kartının ön yüzünde SDK, fotokopi gösterilip gösterilmediğini cihaz üzerinde kontrol edebilir:

conf.doFraudCheck = true
conf.hologramScoreForFraud = 0.85
conf.checkingFraudTimeInMs = 2000
reader.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.