@myazahq/kyc-sdk-react-native 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -8
- package/android/build.gradle +6 -0
- package/android/src/main/AndroidManifest.xml +14 -4
- package/android/src/main/java/com/margelo/nitro/myazakyc/HybridMyazaEmrtd.kt +358 -0
- package/android/src/main/java/com/margelo/nitro/myazakyc/HybridMyazaFaceDetector.kt +88 -1
- package/android/src/main/java/com/margelo/nitro/myazakyc/HybridMyazaRectDetector.kt +34 -0
- package/android/src/main/java/com/margelo/nitro/myazakyc/HybridMyazaTextRecognizer.kt +118 -0
- package/android/src/main/java/com/margelo/nitro/myazakyc/Jp2Decoder.kt +117 -0
- package/app.plugin.js +102 -13
- package/ios/HybridMyazaEmrtd.swift +447 -0
- package/ios/HybridMyazaFaceDetector.swift +104 -2
- package/ios/HybridMyazaRectDetector.swift +103 -0
- package/ios/HybridMyazaTextRecognizer.swift +111 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/KycSdkReactNative+autolinking.cmake +87 -0
- package/nitrogen/generated/android/KycSdkReactNative+autolinking.gradle +27 -0
- package/nitrogen/generated/android/KycSdkReactNativeOnLoad.cpp +102 -0
- package/nitrogen/generated/android/KycSdkReactNativeOnLoad.hpp +34 -0
- package/nitrogen/generated/android/c++/JDetectedRect.hpp +81 -0
- package/nitrogen/generated/android/c++/JEmrtdApduResponse.hpp +61 -0
- package/nitrogen/generated/android/c++/JEmrtdTagInfo.hpp +61 -0
- package/nitrogen/generated/android/c++/JFaceResult.hpp +113 -0
- package/nitrogen/generated/android/c++/JHybridMyazaEmrtdSpec.cpp +176 -0
- package/nitrogen/generated/android/c++/JHybridMyazaEmrtdSpec.hpp +75 -0
- package/nitrogen/generated/android/c++/JHybridMyazaFaceDetectorSpec.cpp +60 -0
- package/nitrogen/generated/android/c++/JHybridMyazaFaceDetectorSpec.hpp +63 -0
- package/nitrogen/generated/android/c++/JHybridMyazaRectDetectorSpec.cpp +60 -0
- package/nitrogen/generated/android/c++/JHybridMyazaRectDetectorSpec.hpp +63 -0
- package/nitrogen/generated/android/c++/JHybridMyazaTextRecognizerSpec.cpp +80 -0
- package/nitrogen/generated/android/c++/JHybridMyazaTextRecognizerSpec.hpp +64 -0
- package/nitrogen/generated/android/c++/JTextResult.hpp +76 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/DetectedRect.kt +81 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/EmrtdApduResponse.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/EmrtdTagInfo.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/FaceResult.kt +121 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/HybridMyazaEmrtdSpec.kt +103 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/HybridMyazaFaceDetectorSpec.kt +55 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/HybridMyazaRectDetectorSpec.kt +55 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/HybridMyazaTextRecognizerSpec.kt +60 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/KycSdkReactNativeOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/myazakyc/TextResult.kt +51 -0
- package/nitrogen/generated/ios/KycSdkReactNative+autolinking.rb +62 -0
- package/nitrogen/generated/ios/KycSdkReactNative-Swift-Cxx-Bridge.cpp +143 -0
- package/nitrogen/generated/ios/KycSdkReactNative-Swift-Cxx-Bridge.hpp +423 -0
- package/nitrogen/generated/ios/KycSdkReactNative-Swift-Cxx-Umbrella.hpp +81 -0
- package/nitrogen/generated/ios/KycSdkReactNativeAutolinking.mm +57 -0
- package/nitrogen/generated/ios/KycSdkReactNativeAutolinking.swift +62 -0
- package/nitrogen/generated/ios/c++/HybridMyazaEmrtdSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridMyazaEmrtdSpecSwift.hpp +184 -0
- package/nitrogen/generated/ios/c++/HybridMyazaFaceDetectorSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridMyazaFaceDetectorSpecSwift.hpp +87 -0
- package/nitrogen/generated/ios/c++/HybridMyazaRectDetectorSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridMyazaRectDetectorSpecSwift.hpp +87 -0
- package/nitrogen/generated/ios/c++/HybridMyazaTextRecognizerSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridMyazaTextRecognizerSpecSwift.hpp +98 -0
- package/nitrogen/generated/ios/swift/DetectedRect.swift +59 -0
- package/nitrogen/generated/ios/swift/EmrtdApduResponse.swift +34 -0
- package/nitrogen/generated/ios/swift/EmrtdTagInfo.swift +34 -0
- package/nitrogen/generated/ios/swift/FaceResult.swift +99 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_EmrtdApduResponse.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_EmrtdTagInfo.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_TextResult.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridMyazaEmrtdSpec.swift +67 -0
- package/nitrogen/generated/ios/swift/HybridMyazaEmrtdSpec_cxx.swift +317 -0
- package/nitrogen/generated/ios/swift/HybridMyazaFaceDetectorSpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridMyazaFaceDetectorSpec_cxx.swift +143 -0
- package/nitrogen/generated/ios/swift/HybridMyazaRectDetectorSpec.swift +56 -0
- package/nitrogen/generated/ios/swift/HybridMyazaRectDetectorSpec_cxx.swift +143 -0
- package/nitrogen/generated/ios/swift/HybridMyazaTextRecognizerSpec.swift +57 -0
- package/nitrogen/generated/ios/swift/HybridMyazaTextRecognizerSpec_cxx.swift +162 -0
- package/nitrogen/generated/ios/swift/TextResult.swift +35 -0
- package/nitrogen/generated/shared/c++/DetectedRect.hpp +107 -0
- package/nitrogen/generated/shared/c++/EmrtdApduResponse.hpp +87 -0
- package/nitrogen/generated/shared/c++/EmrtdTagInfo.hpp +87 -0
- package/nitrogen/generated/shared/c++/FaceResult.hpp +139 -0
- package/nitrogen/generated/shared/c++/HybridMyazaEmrtdSpec.cpp +33 -0
- package/nitrogen/generated/shared/c++/HybridMyazaEmrtdSpec.hpp +80 -0
- package/nitrogen/generated/shared/c++/HybridMyazaFaceDetectorSpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridMyazaFaceDetectorSpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridMyazaRectDetectorSpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridMyazaRectDetectorSpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridMyazaTextRecognizerSpec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridMyazaTextRecognizerSpec.hpp +70 -0
- package/nitrogen/generated/shared/c++/TextResult.hpp +84 -0
- package/package.json +16 -4
- package/src/MyazaKYC.tsx +115 -22
- package/src/capture/documentIdentity.ts +153 -0
- package/src/capture/documentSignals.ts +177 -0
- package/src/capture/documentTextGate.ts +171 -0
- package/src/capture/hints.ts +57 -0
- package/src/capture/index.ts +24 -0
- package/src/capture/rectDetector.ts +84 -0
- package/src/capture/rectGate.ts +91 -0
- package/src/capture/useAutoCapture.ts +198 -0
- package/src/components/CameraPermissionView.tsx +39 -3
- package/src/components/CameraViewfinder.tsx +226 -70
- package/src/components/ContactCodeEntry.tsx +139 -0
- package/src/components/CountryField.tsx +87 -0
- package/src/components/CountryFlag.tsx +15 -15
- package/src/components/DialCodePicker.tsx +186 -0
- package/src/components/DocumentCropper.tsx +1 -1
- package/src/components/DocumentReview.tsx +142 -0
- package/src/components/DocumentReviewSide.tsx +135 -0
- package/src/components/DocumentReviewZoom.tsx +119 -0
- package/src/components/ExpiryCountdown.tsx +52 -0
- package/src/components/FlashOverlay.tsx +156 -0
- package/src/components/Icon.tsx +67 -1
- package/src/components/KycFlow.tsx +66 -94
- package/src/components/KycSheet.tsx +148 -18
- package/src/components/MediaSourceSheet.tsx +163 -0
- package/src/components/MyazaButton.tsx +14 -2
- package/src/components/MyazaDateField.tsx +240 -0
- package/src/components/MyazaInput.tsx +73 -26
- package/src/components/MyazaSelect.tsx +283 -0
- package/src/components/MyazaWordmark.tsx +33 -0
- package/src/components/OptionRow.tsx +132 -0
- package/src/components/PhoneNumberInput.tsx +149 -0
- package/src/components/PoweredBy.tsx +89 -0
- package/src/components/ReadyPrimer.tsx +149 -0
- package/src/components/StepView.tsx +91 -0
- package/src/components/Typography.tsx +18 -3
- package/src/components/VerifiedNotice.tsx +38 -0
- package/src/components/WhatsAppIcon.tsx +29 -0
- package/src/components/WorkflowGate.tsx +128 -0
- package/src/components/brand-font.ts +113 -0
- package/src/components/flashHoleGeometry.ts +35 -0
- package/src/components/flow/FatalConfigError.tsx +56 -0
- package/src/components/fonts.ts +2 -19
- package/src/components/readyPrimerContent.ts +52 -0
- package/src/components/runtime.tsx +38 -43
- package/src/components/stepHeaderMeta.tsx +87 -0
- package/src/components/theme-provider.tsx +89 -0
- package/src/components/useWorkflowMount.ts +116 -0
- package/src/components/viewfinder/CardGuide.tsx +60 -0
- package/src/components/viewfinder/DocumentGhost.tsx +149 -0
- package/src/components/viewfinder/ImmersiveBottomBar.tsx +172 -0
- package/src/components/viewfinder/ImmersiveControls.tsx +127 -0
- package/src/components/viewfinder/ImmersiveGuide.tsx +174 -0
- package/src/components/viewfinder/ImmersiveOverlay.tsx +79 -0
- package/src/components/viewfinder/ViewfinderControls.tsx +154 -0
- package/src/config/brand.ts +97 -0
- package/src/config/business.ts +179 -0
- package/src/config/businessSteps.ts +105 -0
- package/src/config/contact.ts +159 -0
- package/src/config/countryNames.g.ts +254 -0
- package/src/config/currencyFlags.ts +144 -0
- package/src/config/font-resolve.ts +78 -0
- package/src/config/idTypes.ts +98 -1
- package/src/config/keyPeople.ts +152 -0
- package/src/config/phone.ts +39 -0
- package/src/config/proofOfAddress.ts +75 -0
- package/src/config/questionnaire.ts +153 -0
- package/src/config/regions.ts +118 -0
- package/src/config/registrationHint.ts +87 -0
- package/src/config/stepOrder.ts +118 -0
- package/src/config/theme.ts +38 -2
- package/src/config/workflowMerge.ts +124 -0
- package/src/emrtd/bac.ts +128 -0
- package/src/emrtd/bytes.ts +127 -0
- package/src/emrtd/crypto.ts +163 -0
- package/src/emrtd/der.ts +192 -0
- package/src/emrtd/dg2.ts +111 -0
- package/src/emrtd/files.ts +215 -0
- package/src/emrtd/index.ts +30 -0
- package/src/emrtd/mrzKey.ts +54 -0
- package/src/emrtd/native.ts +79 -0
- package/src/emrtd/optionalRead.ts +42 -0
- package/src/emrtd/read.ts +224 -0
- package/src/emrtd/retry.ts +98 -0
- package/src/emrtd/secureMessaging.ts +178 -0
- package/src/emrtd/session.ts +200 -0
- package/src/emrtd/stages.ts +122 -0
- package/src/index.ts +110 -0
- package/src/lib/calendar.ts +71 -0
- package/src/lib/use-keyboard-inset.ts +34 -0
- package/src/liveness/challengeManager.ts +27 -1
- package/src/liveness/faceContinuity.ts +153 -0
- package/src/liveness/flashDetector.ts +145 -0
- package/src/liveness/flashReadyGate.ts +106 -0
- package/src/liveness/flashRunner.ts +118 -0
- package/src/liveness/integritySignals.ts +60 -0
- package/src/liveness/livenessState.ts +139 -0
- package/src/liveness/speech.ts +19 -1
- package/src/liveness/types.ts +48 -1
- package/src/liveness/useFlashPhase.ts +78 -0
- package/src/liveness/useLiveness.ts +260 -75
- package/src/liveness/visionCameraFaceDetector.ts +14 -0
- package/src/mrz/extract.ts +101 -0
- package/src/mrz/parse.ts +178 -0
- package/src/mrz/textRecognizer.ts +149 -0
- package/src/screens/ApplicantRoleStep.tsx +331 -0
- package/src/screens/BusinessDetailsStep.tsx +212 -0
- package/src/screens/BusinessDocumentSlot.tsx +167 -0
- package/src/screens/BusinessDocumentsStep.tsx +213 -0
- package/src/screens/BusinessKeyPeopleStep.tsx +151 -0
- package/src/screens/BusinessKeyPersonRow.tsx +170 -0
- package/src/screens/CompanyInfoFields.tsx +83 -0
- package/src/screens/ConsentStep.tsx +68 -68
- package/src/screens/ContactChannelChoice.tsx +133 -0
- package/src/screens/ContactCodeStep.tsx +130 -0
- package/src/screens/ContactDestinationField.tsx +70 -0
- package/src/screens/ContactFooterNote.tsx +34 -0
- package/src/screens/ContactVerificationStep.tsx +199 -0
- package/src/screens/ContactVerifiedPanel.tsx +36 -0
- package/src/screens/CountrySelectStep.tsx +210 -0
- package/src/screens/DocumentCaptureStep.tsx +190 -145
- package/src/screens/IdInputStep.tsx +19 -9
- package/src/screens/IdTypeStep.tsx +74 -33
- package/src/screens/KeyPeopleInviteLinks.tsx +239 -0
- package/src/screens/LivenessStep.tsx +181 -267
- package/src/screens/MrzScanView.tsx +173 -0
- package/src/screens/NfcStep.tsx +290 -0
- package/src/screens/ProofOfAddressStep.tsx +238 -0
- package/src/screens/QuestionnaireField.tsx +219 -0
- package/src/screens/QuestionnaireMoneyField.tsx +134 -0
- package/src/screens/QuestionnaireStep.tsx +76 -0
- package/src/screens/SubmittedStep.tsx +5 -0
- package/src/screens/consent/model.ts +109 -0
- package/src/screens/document/CameraPhase.tsx +150 -0
- package/src/screens/document/RequiredPill.tsx +60 -0
- package/src/screens/liveness/LightingBanner.tsx +50 -0
- package/src/screens/liveness/LivenessOutcome.tsx +109 -0
- package/src/screens/liveness/ProgressDots.tsx +67 -0
- package/src/screens/liveness/SelfiePreview.tsx +39 -0
- package/src/screens/liveness/constants.ts +31 -0
- package/src/screens/liveness/index.ts +8 -0
- package/src/screens/liveness/resolveGuidance.ts +27 -0
- package/src/screens/liveness/useSelfieUpload.ts +107 -0
- package/src/screens/nfc/NfcMrzPrompt.tsx +40 -0
- package/src/screens/nfc/NfcReadBody.tsx +63 -0
- package/src/screens/nfc/NfcReadProgress.tsx +96 -0
- package/src/screens/nfc/NfcScanIllustration.tsx +244 -0
- package/src/screens/nfc/NfcScannedSummary.tsx +74 -0
- package/src/screens/nfc/NfcSuccessPanel.tsx +162 -0
- package/src/screens/nfc/availability.ts +73 -0
- package/src/screens/nfc/readErrorMessage.ts +93 -0
- package/src/screens/nfc/useChipPortrait.ts +58 -0
- package/src/screens/nfc/useNfcAvailability.ts +82 -0
- package/src/screens/useFlashHole.ts +105 -0
- package/src/screens/useFlashSequence.ts +96 -0
- package/src/screens/usePoaAttach.ts +121 -0
- package/src/services/api-types.ts +164 -0
- package/src/services/api-verify-types.ts +99 -0
- package/src/services/api.ts +72 -102
- package/src/services/cardCrop.ts +25 -10
- package/src/services/contactErrors.ts +43 -0
- package/src/services/deviceMetadata.ts +1 -1
- package/src/services/documentPicker.ts +20 -0
- package/src/services/fingerprint-sources.ts +129 -0
- package/src/services/fingerprint.ts +101 -0
- package/src/services/haptics.ts +38 -0
- package/src/services/mediaCompress.ts +7 -2
- package/src/services/resolveUrl.ts +3 -2
- package/src/services/validators.ts +3 -0
- package/src/services/workflowGate.ts +138 -0
- package/src/specs/MyazaEmrtd.nitro.ts +114 -0
- package/src/specs/MyazaFaceDetector.nitro.ts +10 -0
- package/src/specs/MyazaRectDetector.nitro.ts +50 -0
- package/src/specs/MyazaTextRecognizer.nitro.ts +48 -0
- package/src/store/derive.ts +225 -0
- package/src/store/kycStore.ts +250 -149
- package/src/store/state.ts +253 -0
- package/src/store/submit.ts +101 -0
- package/src/store/submitApplicant.ts +81 -0
- package/src/types/appearance.ts +113 -0
- package/src/types/business.ts +131 -0
- package/src/types/config.ts +150 -119
- package/src/types/id-types.ts +57 -0
- package/src/types/verification.ts +5 -0
- package/src/types/workflow.ts +141 -0
- package/src/utils/amountFormat.ts +73 -0
- package/src/utils/tokens.ts +4 -2
- package/src/__tests__/cardCrop.test.ts +0 -39
- package/src/__tests__/deviceMetadata.test.ts +0 -34
- package/src/__tests__/errors.test.ts +0 -34
- package/src/__tests__/flow.test.ts +0 -61
- package/src/__tests__/gestureDetector.test.ts +0 -37
- package/src/__tests__/liveness.test.ts +0 -112
- package/src/__tests__/resolveUrl.test.ts +0 -64
- package/src/__tests__/validators.test.ts +0 -38
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import Vision
|
|
3
|
+
import CoreImage
|
|
4
|
+
import CoreMedia
|
|
5
|
+
import CoreVideo
|
|
6
|
+
import VisionCamera
|
|
7
|
+
import NitroModules
|
|
8
|
+
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// HybridMyazaTextRecognizer — the iOS half of on-device text recognition,
|
|
11
|
+
// implementing the nitrogen-generated `HybridMyazaTextRecognizerSpec` from
|
|
12
|
+
// src/specs/MyazaTextRecognizer.nitro.ts. The Android half is
|
|
13
|
+
// HybridMyazaTextRecognizer.kt (Google ML Kit).
|
|
14
|
+
//
|
|
15
|
+
// Used for reading the MRZ off a passport or ID card. Returns LINES only —
|
|
16
|
+
// parsing lives in TypeScript, where it is testable against the ICAO specimen
|
|
17
|
+
// without a device, and where the check digits do the actual deciding.
|
|
18
|
+
//
|
|
19
|
+
// Two choices matter for MRZ specifically:
|
|
20
|
+
//
|
|
21
|
+
// • `.accurate` recognition, not `.fast`. OCR-B at a glancing angle is
|
|
22
|
+
// exactly where fast mode invents characters, and one wrong character
|
|
23
|
+
// fails a check digit — costing a frame at best, and a wrong document
|
|
24
|
+
// number at worst.
|
|
25
|
+
// • Language correction OFF. It is trained on prose and would happily
|
|
26
|
+
// "correct" a passport's filler runs and surname into English words.
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
|
|
29
|
+
final class HybridMyazaTextRecognizer: HybridMyazaTextRecognizerSpec {
|
|
30
|
+
|
|
31
|
+
func recognizeText(frame: any HybridFrameSpec, bottomFraction: Double) throws -> TextResult {
|
|
32
|
+
guard
|
|
33
|
+
let nativeFrame = frame as? NativeFrame,
|
|
34
|
+
let sampleBuffer = nativeFrame.sampleBuffer,
|
|
35
|
+
let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
|
|
36
|
+
else {
|
|
37
|
+
return TextResult(lines: [])
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let request = VNRecognizeTextRequest()
|
|
41
|
+
request.recognitionLevel = .accurate
|
|
42
|
+
request.usesLanguageCorrection = false
|
|
43
|
+
// The MRZ alphabet. Vision has no charset restriction, but naming Latin
|
|
44
|
+
// keeps it from trying scripts the document does not use.
|
|
45
|
+
request.recognitionLanguages = ["en-US"]
|
|
46
|
+
|
|
47
|
+
// Restrict recognition to the bottom slice, where the MRZ sits. Vision's
|
|
48
|
+
// regionOfInterest is in normalised, BOTTOM-LEFT-origin coordinates, so the
|
|
49
|
+
// bottom fraction of the image starts at y = 0.
|
|
50
|
+
let fraction = min(1.0, max(0.05, bottomFraction))
|
|
51
|
+
if fraction < 1.0 {
|
|
52
|
+
request.regionOfInterest = CGRect(x: 0, y: 0, width: 1, height: fraction)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// The camera delivers the buffer rotated 90° relative to how the document
|
|
56
|
+
// is held; `.right` puts the text upright for the recogniser. Reading it
|
|
57
|
+
// sideways does not fail loudly — it returns confident nonsense.
|
|
58
|
+
let handler = VNImageRequestHandler(
|
|
59
|
+
cvPixelBuffer: pixelBuffer, orientation: .right, options: [:]
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
do {
|
|
63
|
+
try handler.perform([request])
|
|
64
|
+
} catch {
|
|
65
|
+
return TextResult(lines: [])
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
guard let observations = request.results else { return TextResult(lines: []) }
|
|
69
|
+
|
|
70
|
+
// Top to bottom. Vision's y grows upward, so descending y IS reading order,
|
|
71
|
+
// and the MRZ's two lines have to arrive adjacent and in order for the
|
|
72
|
+
// extractor's grouping to work.
|
|
73
|
+
let ordered = observations.sorted { $0.boundingBox.midY > $1.boundingBox.midY }
|
|
74
|
+
let lines = ordered.compactMap { $0.topCandidates(1).first?.string }
|
|
75
|
+
|
|
76
|
+
return TextResult(lines: lines)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
func recognizeTextInImage(uri: String, bottomFraction: Double) throws -> Promise<TextResult> {
|
|
80
|
+
Promise.async {
|
|
81
|
+
// A local file path, with or without the scheme — both forms reach here
|
|
82
|
+
// depending on which picker produced it.
|
|
83
|
+
let path = uri.hasPrefix("file://") ? String(uri.dropFirst(7)) : uri
|
|
84
|
+
guard let image = CIImage(contentsOf: URL(fileURLWithPath: path)) else {
|
|
85
|
+
return TextResult(lines: [])
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
let request = VNRecognizeTextRequest()
|
|
89
|
+
request.recognitionLevel = .accurate
|
|
90
|
+
request.usesLanguageCorrection = false
|
|
91
|
+
|
|
92
|
+
let fraction = min(1.0, max(0.05, bottomFraction))
|
|
93
|
+
if fraction < 1.0 {
|
|
94
|
+
request.regionOfInterest = CGRect(x: 0, y: 0, width: 1, height: fraction)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// A still from the photo library or camera roll is already upright, so no
|
|
98
|
+
// orientation correction here — unlike the live frame, which arrives
|
|
99
|
+
// rotated by the camera pipeline.
|
|
100
|
+
let handler = VNImageRequestHandler(ciImage: image, options: [:])
|
|
101
|
+
do {
|
|
102
|
+
try handler.perform([request])
|
|
103
|
+
} catch {
|
|
104
|
+
return TextResult(lines: [])
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
let ordered = (request.results ?? []).sorted { $0.boundingBox.midY > $1.boundingBox.midY }
|
|
108
|
+
return TextResult(lines: ordered.compactMap { $0.topCandidates(1).first?.string })
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
** linguist-generated=true
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#
|
|
2
|
+
# KycSdkReactNative+autolinking.cmake
|
|
3
|
+
# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
# https://github.com/mrousavy/nitro
|
|
5
|
+
# Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
# This is a CMake file that adds all files generated by Nitrogen
|
|
9
|
+
# to the current CMake project.
|
|
10
|
+
#
|
|
11
|
+
# To use it, add this to your CMakeLists.txt:
|
|
12
|
+
# ```cmake
|
|
13
|
+
# include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/KycSdkReactNative+autolinking.cmake)
|
|
14
|
+
# ```
|
|
15
|
+
|
|
16
|
+
# Define a flag to check if we are building properly
|
|
17
|
+
add_definitions(-DBUILDING_KYCSDKREACTNATIVE_WITH_GENERATED_CMAKE_PROJECT)
|
|
18
|
+
|
|
19
|
+
# Enable Raw Props parsing in react-native (for Nitro Views)
|
|
20
|
+
add_definitions(-DRN_SERIALIZABLE_STATE)
|
|
21
|
+
|
|
22
|
+
# Add all headers that were generated by Nitrogen
|
|
23
|
+
include_directories(
|
|
24
|
+
"../nitrogen/generated/shared/c++"
|
|
25
|
+
"../nitrogen/generated/android/c++"
|
|
26
|
+
"../nitrogen/generated/android/"
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# Add all .cpp sources that were generated by Nitrogen
|
|
30
|
+
target_sources(
|
|
31
|
+
# CMake project name (Android C++ library name)
|
|
32
|
+
KycSdkReactNative PRIVATE
|
|
33
|
+
# Autolinking Setup
|
|
34
|
+
../nitrogen/generated/android/KycSdkReactNativeOnLoad.cpp
|
|
35
|
+
# Shared Nitrogen C++ sources
|
|
36
|
+
../nitrogen/generated/shared/c++/HybridMyazaEmrtdSpec.cpp
|
|
37
|
+
../nitrogen/generated/shared/c++/HybridMyazaFaceDetectorSpec.cpp
|
|
38
|
+
../nitrogen/generated/shared/c++/HybridMyazaRectDetectorSpec.cpp
|
|
39
|
+
../nitrogen/generated/shared/c++/HybridMyazaTextRecognizerSpec.cpp
|
|
40
|
+
# Android-specific Nitrogen C++ sources
|
|
41
|
+
../nitrogen/generated/android/c++/JHybridMyazaEmrtdSpec.cpp
|
|
42
|
+
../nitrogen/generated/android/c++/JHybridMyazaFaceDetectorSpec.cpp
|
|
43
|
+
../nitrogen/generated/android/c++/JHybridMyazaRectDetectorSpec.cpp
|
|
44
|
+
../nitrogen/generated/android/c++/JHybridMyazaTextRecognizerSpec.cpp
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# From node_modules/react-native/ReactAndroid/cmake-utils/folly-flags.cmake
|
|
48
|
+
# Used in node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake
|
|
49
|
+
target_compile_definitions(
|
|
50
|
+
KycSdkReactNative PRIVATE
|
|
51
|
+
-DFOLLY_NO_CONFIG=1
|
|
52
|
+
-DFOLLY_HAVE_CLOCK_GETTIME=1
|
|
53
|
+
-DFOLLY_USE_LIBCPP=1
|
|
54
|
+
-DFOLLY_CFG_NO_COROUTINES=1
|
|
55
|
+
-DFOLLY_MOBILE=1
|
|
56
|
+
-DFOLLY_HAVE_RECVMMSG=1
|
|
57
|
+
-DFOLLY_HAVE_PTHREAD=1
|
|
58
|
+
# Once we target android-23 above, we can comment
|
|
59
|
+
# the following line. NDK uses GNU style stderror_r() after API 23.
|
|
60
|
+
-DFOLLY_HAVE_XSI_STRERROR_R=1
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
# Add all libraries required by the generated specs
|
|
64
|
+
find_package(fbjni REQUIRED) # <-- Used for communication between Java <-> C++
|
|
65
|
+
find_package(ReactAndroid REQUIRED) # <-- Used to set up React Native bindings (e.g. CallInvoker/TurboModule)
|
|
66
|
+
find_package(react-native-nitro-modules REQUIRED) # <-- Used to create all HybridObjects and use the Nitro core library
|
|
67
|
+
|
|
68
|
+
# Link all libraries together
|
|
69
|
+
target_link_libraries(
|
|
70
|
+
KycSdkReactNative
|
|
71
|
+
fbjni::fbjni # <-- Facebook C++ JNI helpers
|
|
72
|
+
ReactAndroid::jsi # <-- RN: JSI
|
|
73
|
+
react-native-nitro-modules::NitroModules # <-- NitroModules Core :)
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
# Link react-native (different prefab between RN 0.75 and RN 0.76)
|
|
77
|
+
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
78
|
+
target_link_libraries(
|
|
79
|
+
KycSdkReactNative
|
|
80
|
+
ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
|
|
81
|
+
)
|
|
82
|
+
else()
|
|
83
|
+
target_link_libraries(
|
|
84
|
+
KycSdkReactNative
|
|
85
|
+
ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
|
|
86
|
+
)
|
|
87
|
+
endif()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// KycSdkReactNative+autolinking.gradle
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
/// This is a Gradle file that adds all files generated by Nitrogen
|
|
9
|
+
/// to the current Gradle project.
|
|
10
|
+
///
|
|
11
|
+
/// To use it, add this to your build.gradle:
|
|
12
|
+
/// ```gradle
|
|
13
|
+
/// apply from: '../nitrogen/generated/android/KycSdkReactNative+autolinking.gradle'
|
|
14
|
+
/// ```
|
|
15
|
+
|
|
16
|
+
logger.warn("[NitroModules] 🔥 KycSdkReactNative is boosted by nitro!")
|
|
17
|
+
|
|
18
|
+
android {
|
|
19
|
+
sourceSets {
|
|
20
|
+
main {
|
|
21
|
+
java.srcDirs += [
|
|
22
|
+
// Nitrogen files
|
|
23
|
+
"${project.projectDir}/../nitrogen/generated/android/kotlin"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// KycSdkReactNativeOnLoad.cpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#ifndef BUILDING_KYCSDKREACTNATIVE_WITH_GENERATED_CMAKE_PROJECT
|
|
9
|
+
#error KycSdkReactNativeOnLoad.cpp is not being built with the autogenerated CMakeLists.txt project. Is a different CMakeLists.txt building this?
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
#include "KycSdkReactNativeOnLoad.hpp"
|
|
13
|
+
|
|
14
|
+
#include <jni.h>
|
|
15
|
+
#include <fbjni/fbjni.h>
|
|
16
|
+
#include <NitroModules/HybridObjectRegistry.hpp>
|
|
17
|
+
|
|
18
|
+
#include "JHybridMyazaEmrtdSpec.hpp"
|
|
19
|
+
#include "JHybridMyazaFaceDetectorSpec.hpp"
|
|
20
|
+
#include "JHybridMyazaRectDetectorSpec.hpp"
|
|
21
|
+
#include "JHybridMyazaTextRecognizerSpec.hpp"
|
|
22
|
+
#include <NitroModules/DefaultConstructableObject.hpp>
|
|
23
|
+
|
|
24
|
+
namespace margelo::nitro::myazakyc {
|
|
25
|
+
|
|
26
|
+
int initialize(JavaVM* vm) {
|
|
27
|
+
return facebook::jni::initialize(vm, []() {
|
|
28
|
+
::margelo::nitro::myazakyc::registerAllNatives();
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
struct JHybridMyazaFaceDetectorSpecImpl: public jni::JavaClass<JHybridMyazaFaceDetectorSpecImpl, JHybridMyazaFaceDetectorSpec::JavaPart> {
|
|
33
|
+
static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/HybridMyazaFaceDetector;";
|
|
34
|
+
static std::shared_ptr<JHybridMyazaFaceDetectorSpec> create() {
|
|
35
|
+
static const auto constructorFn = javaClassStatic()->getConstructor<JHybridMyazaFaceDetectorSpecImpl::javaobject()>();
|
|
36
|
+
jni::local_ref<JHybridMyazaFaceDetectorSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
|
|
37
|
+
return javaPart->getJHybridMyazaFaceDetectorSpec();
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
struct JHybridMyazaTextRecognizerSpecImpl: public jni::JavaClass<JHybridMyazaTextRecognizerSpecImpl, JHybridMyazaTextRecognizerSpec::JavaPart> {
|
|
41
|
+
static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/HybridMyazaTextRecognizer;";
|
|
42
|
+
static std::shared_ptr<JHybridMyazaTextRecognizerSpec> create() {
|
|
43
|
+
static const auto constructorFn = javaClassStatic()->getConstructor<JHybridMyazaTextRecognizerSpecImpl::javaobject()>();
|
|
44
|
+
jni::local_ref<JHybridMyazaTextRecognizerSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
|
|
45
|
+
return javaPart->getJHybridMyazaTextRecognizerSpec();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
struct JHybridMyazaEmrtdSpecImpl: public jni::JavaClass<JHybridMyazaEmrtdSpecImpl, JHybridMyazaEmrtdSpec::JavaPart> {
|
|
49
|
+
static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/HybridMyazaEmrtd;";
|
|
50
|
+
static std::shared_ptr<JHybridMyazaEmrtdSpec> create() {
|
|
51
|
+
static const auto constructorFn = javaClassStatic()->getConstructor<JHybridMyazaEmrtdSpecImpl::javaobject()>();
|
|
52
|
+
jni::local_ref<JHybridMyazaEmrtdSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
|
|
53
|
+
return javaPart->getJHybridMyazaEmrtdSpec();
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
struct JHybridMyazaRectDetectorSpecImpl: public jni::JavaClass<JHybridMyazaRectDetectorSpecImpl, JHybridMyazaRectDetectorSpec::JavaPart> {
|
|
57
|
+
static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/HybridMyazaRectDetector;";
|
|
58
|
+
static std::shared_ptr<JHybridMyazaRectDetectorSpec> create() {
|
|
59
|
+
static const auto constructorFn = javaClassStatic()->getConstructor<JHybridMyazaRectDetectorSpecImpl::javaobject()>();
|
|
60
|
+
jni::local_ref<JHybridMyazaRectDetectorSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
|
|
61
|
+
return javaPart->getJHybridMyazaRectDetectorSpec();
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
void registerAllNatives() {
|
|
66
|
+
using namespace margelo::nitro;
|
|
67
|
+
using namespace margelo::nitro::myazakyc;
|
|
68
|
+
|
|
69
|
+
// Register native JNI methods
|
|
70
|
+
margelo::nitro::myazakyc::JHybridMyazaEmrtdSpec::CxxPart::registerNatives();
|
|
71
|
+
margelo::nitro::myazakyc::JHybridMyazaFaceDetectorSpec::CxxPart::registerNatives();
|
|
72
|
+
margelo::nitro::myazakyc::JHybridMyazaRectDetectorSpec::CxxPart::registerNatives();
|
|
73
|
+
margelo::nitro::myazakyc::JHybridMyazaTextRecognizerSpec::CxxPart::registerNatives();
|
|
74
|
+
|
|
75
|
+
// Register Nitro Hybrid Objects
|
|
76
|
+
HybridObjectRegistry::registerHybridObjectConstructor(
|
|
77
|
+
"MyazaFaceDetector",
|
|
78
|
+
[]() -> std::shared_ptr<HybridObject> {
|
|
79
|
+
return JHybridMyazaFaceDetectorSpecImpl::create();
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
HybridObjectRegistry::registerHybridObjectConstructor(
|
|
83
|
+
"MyazaTextRecognizer",
|
|
84
|
+
[]() -> std::shared_ptr<HybridObject> {
|
|
85
|
+
return JHybridMyazaTextRecognizerSpecImpl::create();
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
HybridObjectRegistry::registerHybridObjectConstructor(
|
|
89
|
+
"MyazaEmrtd",
|
|
90
|
+
[]() -> std::shared_ptr<HybridObject> {
|
|
91
|
+
return JHybridMyazaEmrtdSpecImpl::create();
|
|
92
|
+
}
|
|
93
|
+
);
|
|
94
|
+
HybridObjectRegistry::registerHybridObjectConstructor(
|
|
95
|
+
"MyazaRectDetector",
|
|
96
|
+
[]() -> std::shared_ptr<HybridObject> {
|
|
97
|
+
return JHybridMyazaRectDetectorSpecImpl::create();
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
} // namespace margelo::nitro::myazakyc
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// KycSdkReactNativeOnLoad.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#include <jni.h>
|
|
9
|
+
#include <functional>
|
|
10
|
+
#include <NitroModules/NitroDefines.hpp>
|
|
11
|
+
|
|
12
|
+
namespace margelo::nitro::myazakyc {
|
|
13
|
+
|
|
14
|
+
[[deprecated("Use registerNatives() instead.")]]
|
|
15
|
+
int initialize(JavaVM* vm);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Register the native (C++) part of KycSdkReactNative, and autolinks all Hybrid Objects.
|
|
19
|
+
* Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`),
|
|
20
|
+
* inside a `facebook::jni::initialize(vm, ...)` call.
|
|
21
|
+
* Example:
|
|
22
|
+
* ```cpp (cpp-adapter.cpp)
|
|
23
|
+
* JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
|
|
24
|
+
* return facebook::jni::initialize(vm, []() {
|
|
25
|
+
* // register all KycSdkReactNative HybridObjects
|
|
26
|
+
* margelo::nitro::myazakyc::registerNatives();
|
|
27
|
+
* // any other custom registrations go here.
|
|
28
|
+
* });
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
void registerAllNatives();
|
|
33
|
+
|
|
34
|
+
} // namespace margelo::nitro::myazakyc
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JDetectedRect.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <fbjni/fbjni.h>
|
|
11
|
+
#include "DetectedRect.hpp"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
namespace margelo::nitro::myazakyc {
|
|
16
|
+
|
|
17
|
+
using namespace facebook;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The C++ JNI bridge between the C++ struct "DetectedRect" and the the Kotlin data class "DetectedRect".
|
|
21
|
+
*/
|
|
22
|
+
struct JDetectedRect final: public jni::JavaClass<JDetectedRect> {
|
|
23
|
+
public:
|
|
24
|
+
static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/DetectedRect;";
|
|
25
|
+
|
|
26
|
+
public:
|
|
27
|
+
/**
|
|
28
|
+
* Convert this Java/Kotlin-based struct to the C++ struct DetectedRect by copying all values to C++.
|
|
29
|
+
*/
|
|
30
|
+
[[maybe_unused]]
|
|
31
|
+
[[nodiscard]]
|
|
32
|
+
DetectedRect toCpp() const {
|
|
33
|
+
static const auto clazz = javaClassStatic();
|
|
34
|
+
static const auto fieldFound = clazz->getField<jboolean>("found");
|
|
35
|
+
jboolean found = this->getFieldValue(fieldFound);
|
|
36
|
+
static const auto fieldX = clazz->getField<double>("x");
|
|
37
|
+
double x = this->getFieldValue(fieldX);
|
|
38
|
+
static const auto fieldY = clazz->getField<double>("y");
|
|
39
|
+
double y = this->getFieldValue(fieldY);
|
|
40
|
+
static const auto fieldWidth = clazz->getField<double>("width");
|
|
41
|
+
double width = this->getFieldValue(fieldWidth);
|
|
42
|
+
static const auto fieldHeight = clazz->getField<double>("height");
|
|
43
|
+
double height = this->getFieldValue(fieldHeight);
|
|
44
|
+
static const auto fieldAspect = clazz->getField<double>("aspect");
|
|
45
|
+
double aspect = this->getFieldValue(fieldAspect);
|
|
46
|
+
static const auto fieldConfidence = clazz->getField<double>("confidence");
|
|
47
|
+
double confidence = this->getFieldValue(fieldConfidence);
|
|
48
|
+
return DetectedRect(
|
|
49
|
+
static_cast<bool>(found),
|
|
50
|
+
x,
|
|
51
|
+
y,
|
|
52
|
+
width,
|
|
53
|
+
height,
|
|
54
|
+
aspect,
|
|
55
|
+
confidence
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public:
|
|
60
|
+
/**
|
|
61
|
+
* Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
|
|
62
|
+
*/
|
|
63
|
+
[[maybe_unused]]
|
|
64
|
+
static jni::local_ref<JDetectedRect::javaobject> fromCpp(const DetectedRect& value) {
|
|
65
|
+
using JSignature = JDetectedRect(jboolean, double, double, double, double, double, double);
|
|
66
|
+
static const auto clazz = javaClassStatic();
|
|
67
|
+
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
68
|
+
return create(
|
|
69
|
+
clazz,
|
|
70
|
+
value.found,
|
|
71
|
+
value.x,
|
|
72
|
+
value.y,
|
|
73
|
+
value.width,
|
|
74
|
+
value.height,
|
|
75
|
+
value.aspect,
|
|
76
|
+
value.confidence
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
} // namespace margelo::nitro::myazakyc
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JEmrtdApduResponse.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <fbjni/fbjni.h>
|
|
11
|
+
#include "EmrtdApduResponse.hpp"
|
|
12
|
+
|
|
13
|
+
#include <string>
|
|
14
|
+
|
|
15
|
+
namespace margelo::nitro::myazakyc {
|
|
16
|
+
|
|
17
|
+
using namespace facebook;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The C++ JNI bridge between the C++ struct "EmrtdApduResponse" and the the Kotlin data class "EmrtdApduResponse".
|
|
21
|
+
*/
|
|
22
|
+
struct JEmrtdApduResponse final: public jni::JavaClass<JEmrtdApduResponse> {
|
|
23
|
+
public:
|
|
24
|
+
static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/EmrtdApduResponse;";
|
|
25
|
+
|
|
26
|
+
public:
|
|
27
|
+
/**
|
|
28
|
+
* Convert this Java/Kotlin-based struct to the C++ struct EmrtdApduResponse by copying all values to C++.
|
|
29
|
+
*/
|
|
30
|
+
[[maybe_unused]]
|
|
31
|
+
[[nodiscard]]
|
|
32
|
+
EmrtdApduResponse toCpp() const {
|
|
33
|
+
static const auto clazz = javaClassStatic();
|
|
34
|
+
static const auto fieldData = clazz->getField<jni::JString>("data");
|
|
35
|
+
jni::local_ref<jni::JString> data = this->getFieldValue(fieldData);
|
|
36
|
+
static const auto fieldStatusWord = clazz->getField<double>("statusWord");
|
|
37
|
+
double statusWord = this->getFieldValue(fieldStatusWord);
|
|
38
|
+
return EmrtdApduResponse(
|
|
39
|
+
data->toStdString(),
|
|
40
|
+
statusWord
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public:
|
|
45
|
+
/**
|
|
46
|
+
* Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
|
|
47
|
+
*/
|
|
48
|
+
[[maybe_unused]]
|
|
49
|
+
static jni::local_ref<JEmrtdApduResponse::javaobject> fromCpp(const EmrtdApduResponse& value) {
|
|
50
|
+
using JSignature = JEmrtdApduResponse(jni::alias_ref<jni::JString>, double);
|
|
51
|
+
static const auto clazz = javaClassStatic();
|
|
52
|
+
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
53
|
+
return create(
|
|
54
|
+
clazz,
|
|
55
|
+
jni::make_jstring(value.data),
|
|
56
|
+
value.statusWord
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
} // namespace margelo::nitro::myazakyc
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JEmrtdTagInfo.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <fbjni/fbjni.h>
|
|
11
|
+
#include "EmrtdTagInfo.hpp"
|
|
12
|
+
|
|
13
|
+
#include <string>
|
|
14
|
+
|
|
15
|
+
namespace margelo::nitro::myazakyc {
|
|
16
|
+
|
|
17
|
+
using namespace facebook;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The C++ JNI bridge between the C++ struct "EmrtdTagInfo" and the the Kotlin data class "EmrtdTagInfo".
|
|
21
|
+
*/
|
|
22
|
+
struct JEmrtdTagInfo final: public jni::JavaClass<JEmrtdTagInfo> {
|
|
23
|
+
public:
|
|
24
|
+
static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/EmrtdTagInfo;";
|
|
25
|
+
|
|
26
|
+
public:
|
|
27
|
+
/**
|
|
28
|
+
* Convert this Java/Kotlin-based struct to the C++ struct EmrtdTagInfo by copying all values to C++.
|
|
29
|
+
*/
|
|
30
|
+
[[maybe_unused]]
|
|
31
|
+
[[nodiscard]]
|
|
32
|
+
EmrtdTagInfo toCpp() const {
|
|
33
|
+
static const auto clazz = javaClassStatic();
|
|
34
|
+
static const auto fieldConnected = clazz->getField<jboolean>("connected");
|
|
35
|
+
jboolean connected = this->getFieldValue(fieldConnected);
|
|
36
|
+
static const auto fieldUid = clazz->getField<jni::JString>("uid");
|
|
37
|
+
jni::local_ref<jni::JString> uid = this->getFieldValue(fieldUid);
|
|
38
|
+
return EmrtdTagInfo(
|
|
39
|
+
static_cast<bool>(connected),
|
|
40
|
+
uid->toStdString()
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public:
|
|
45
|
+
/**
|
|
46
|
+
* Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
|
|
47
|
+
*/
|
|
48
|
+
[[maybe_unused]]
|
|
49
|
+
static jni::local_ref<JEmrtdTagInfo::javaobject> fromCpp(const EmrtdTagInfo& value) {
|
|
50
|
+
using JSignature = JEmrtdTagInfo(jboolean, jni::alias_ref<jni::JString>);
|
|
51
|
+
static const auto clazz = javaClassStatic();
|
|
52
|
+
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
53
|
+
return create(
|
|
54
|
+
clazz,
|
|
55
|
+
value.connected,
|
|
56
|
+
jni::make_jstring(value.uid)
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
} // namespace margelo::nitro::myazakyc
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// JFaceResult.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <fbjni/fbjni.h>
|
|
11
|
+
#include "FaceResult.hpp"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
namespace margelo::nitro::myazakyc {
|
|
16
|
+
|
|
17
|
+
using namespace facebook;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The C++ JNI bridge between the C++ struct "FaceResult" and the the Kotlin data class "FaceResult".
|
|
21
|
+
*/
|
|
22
|
+
struct JFaceResult final: public jni::JavaClass<JFaceResult> {
|
|
23
|
+
public:
|
|
24
|
+
static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/myazakyc/FaceResult;";
|
|
25
|
+
|
|
26
|
+
public:
|
|
27
|
+
/**
|
|
28
|
+
* Convert this Java/Kotlin-based struct to the C++ struct FaceResult by copying all values to C++.
|
|
29
|
+
*/
|
|
30
|
+
[[maybe_unused]]
|
|
31
|
+
[[nodiscard]]
|
|
32
|
+
FaceResult toCpp() const {
|
|
33
|
+
static const auto clazz = javaClassStatic();
|
|
34
|
+
static const auto fieldHeadEulerAngleX = clazz->getField<double>("headEulerAngleX");
|
|
35
|
+
double headEulerAngleX = this->getFieldValue(fieldHeadEulerAngleX);
|
|
36
|
+
static const auto fieldHeadEulerAngleY = clazz->getField<double>("headEulerAngleY");
|
|
37
|
+
double headEulerAngleY = this->getFieldValue(fieldHeadEulerAngleY);
|
|
38
|
+
static const auto fieldHeadEulerAngleZ = clazz->getField<double>("headEulerAngleZ");
|
|
39
|
+
double headEulerAngleZ = this->getFieldValue(fieldHeadEulerAngleZ);
|
|
40
|
+
static const auto fieldSmilingProbability = clazz->getField<double>("smilingProbability");
|
|
41
|
+
double smilingProbability = this->getFieldValue(fieldSmilingProbability);
|
|
42
|
+
static const auto fieldLeftEyeOpenProbability = clazz->getField<double>("leftEyeOpenProbability");
|
|
43
|
+
double leftEyeOpenProbability = this->getFieldValue(fieldLeftEyeOpenProbability);
|
|
44
|
+
static const auto fieldRightEyeOpenProbability = clazz->getField<double>("rightEyeOpenProbability");
|
|
45
|
+
double rightEyeOpenProbability = this->getFieldValue(fieldRightEyeOpenProbability);
|
|
46
|
+
static const auto fieldFaceSizeRatio = clazz->getField<double>("faceSizeRatio");
|
|
47
|
+
double faceSizeRatio = this->getFieldValue(fieldFaceSizeRatio);
|
|
48
|
+
static const auto fieldFaceCount = clazz->getField<double>("faceCount");
|
|
49
|
+
double faceCount = this->getFieldValue(fieldFaceCount);
|
|
50
|
+
static const auto fieldBrightness = clazz->getField<double>("brightness");
|
|
51
|
+
double brightness = this->getFieldValue(fieldBrightness);
|
|
52
|
+
static const auto fieldFaceCenterX = clazz->getField<double>("faceCenterX");
|
|
53
|
+
double faceCenterX = this->getFieldValue(fieldFaceCenterX);
|
|
54
|
+
static const auto fieldFaceCenterY = clazz->getField<double>("faceCenterY");
|
|
55
|
+
double faceCenterY = this->getFieldValue(fieldFaceCenterY);
|
|
56
|
+
static const auto fieldTrackingId = clazz->getField<double>("trackingId");
|
|
57
|
+
double trackingId = this->getFieldValue(fieldTrackingId);
|
|
58
|
+
static const auto fieldFaceR = clazz->getField<double>("faceR");
|
|
59
|
+
double faceR = this->getFieldValue(fieldFaceR);
|
|
60
|
+
static const auto fieldFaceG = clazz->getField<double>("faceG");
|
|
61
|
+
double faceG = this->getFieldValue(fieldFaceG);
|
|
62
|
+
static const auto fieldFaceB = clazz->getField<double>("faceB");
|
|
63
|
+
double faceB = this->getFieldValue(fieldFaceB);
|
|
64
|
+
return FaceResult(
|
|
65
|
+
headEulerAngleX,
|
|
66
|
+
headEulerAngleY,
|
|
67
|
+
headEulerAngleZ,
|
|
68
|
+
smilingProbability,
|
|
69
|
+
leftEyeOpenProbability,
|
|
70
|
+
rightEyeOpenProbability,
|
|
71
|
+
faceSizeRatio,
|
|
72
|
+
faceCount,
|
|
73
|
+
brightness,
|
|
74
|
+
faceCenterX,
|
|
75
|
+
faceCenterY,
|
|
76
|
+
trackingId,
|
|
77
|
+
faceR,
|
|
78
|
+
faceG,
|
|
79
|
+
faceB
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public:
|
|
84
|
+
/**
|
|
85
|
+
* Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
|
|
86
|
+
*/
|
|
87
|
+
[[maybe_unused]]
|
|
88
|
+
static jni::local_ref<JFaceResult::javaobject> fromCpp(const FaceResult& value) {
|
|
89
|
+
using JSignature = JFaceResult(double, double, double, double, double, double, double, double, double, double, double, double, double, double, double);
|
|
90
|
+
static const auto clazz = javaClassStatic();
|
|
91
|
+
static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
|
|
92
|
+
return create(
|
|
93
|
+
clazz,
|
|
94
|
+
value.headEulerAngleX,
|
|
95
|
+
value.headEulerAngleY,
|
|
96
|
+
value.headEulerAngleZ,
|
|
97
|
+
value.smilingProbability,
|
|
98
|
+
value.leftEyeOpenProbability,
|
|
99
|
+
value.rightEyeOpenProbability,
|
|
100
|
+
value.faceSizeRatio,
|
|
101
|
+
value.faceCount,
|
|
102
|
+
value.brightness,
|
|
103
|
+
value.faceCenterX,
|
|
104
|
+
value.faceCenterY,
|
|
105
|
+
value.trackingId,
|
|
106
|
+
value.faceR,
|
|
107
|
+
value.faceG,
|
|
108
|
+
value.faceB
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
} // namespace margelo::nitro::myazakyc
|