dynamsoft-capture-vision-react-native 3.4.1300 → 3.4.3010

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.
Files changed (198) hide show
  1. package/LICENSE +4 -4
  2. package/README.md +62 -62
  3. package/android/README.md +14 -14
  4. package/android/build.gradle +167 -163
  5. package/android/gradle.properties +20 -20
  6. package/android/settings.gradle +5 -5
  7. package/android/src/main/AndroidManifest.xml +6 -6
  8. package/android/src/main/AndroidManifest_noPackage.xml +5 -5
  9. package/android/src/main/cpp/CMakeLists.txt +21 -21
  10. package/android/src/main/cpp/ImgHO.cpp +94 -94
  11. package/android/src/main/cpp/ImgHO.h +34 -34
  12. package/android/src/main/cpp/JsiCore.cpp +296 -296
  13. package/android/src/main/cpp/JsiCore.h +51 -51
  14. package/android/src/main/cpp/JsiCvr.cpp +332 -332
  15. package/android/src/main/cpp/JsiCvr.h +54 -54
  16. package/android/src/main/cpp/JsiDbr.cpp +283 -283
  17. package/android/src/main/cpp/JsiDbr.h +26 -26
  18. package/android/src/main/cpp/JsiDce.cpp +59 -59
  19. package/android/src/main/cpp/JsiDce.h +17 -17
  20. package/android/src/main/cpp/JsiDcp.cpp +51 -51
  21. package/android/src/main/cpp/JsiDcp.h +31 -31
  22. package/android/src/main/cpp/JsiDdn.cpp +50 -50
  23. package/android/src/main/cpp/JsiDdn.h +28 -28
  24. package/android/src/main/cpp/JsiDlr.cpp +60 -60
  25. package/android/src/main/cpp/JsiDlr.h +26 -26
  26. package/android/src/main/cpp/JsiUtility.cpp +604 -604
  27. package/android/src/main/cpp/JsiUtility.h +26 -26
  28. package/android/src/main/cpp/RawBuffer.cpp +23 -23
  29. package/android/src/main/cpp/RawBuffer.h +24 -24
  30. package/android/src/main/cpp/android_log.h +14 -14
  31. package/android/src/main/dysJniLibsFor86/debug/arm64-v8a/librn_dys.so +0 -0
  32. package/android/src/main/dysJniLibsFor86/debug/armeabi-v7a/librn_dys.so +0 -0
  33. package/android/src/main/dysJniLibsFor86/debug/x86/librn_dys.so +0 -0
  34. package/android/src/main/dysJniLibsFor86/debug/x86_64/librn_dys.so +0 -0
  35. package/android/src/main/dysJniLibsFor86/release/arm64-v8a/librn_dys.so +0 -0
  36. package/android/src/main/dysJniLibsFor86/release/armeabi-v7a/librn_dys.so +0 -0
  37. package/android/src/main/dysJniLibsFor86/release/x86/librn_dys.so +0 -0
  38. package/android/src/main/dysJniLibsFor86/release/x86_64/librn_dys.so +0 -0
  39. package/android/src/main/java/com/dynamsoft/reactnativelib/CVRModule.kt +137 -137
  40. package/android/src/main/java/com/dynamsoft/reactnativelib/CameraViewManager.kt +62 -62
  41. package/android/src/main/java/com/dynamsoft/reactnativelib/DCEModule.kt +125 -125
  42. package/android/src/main/java/com/dynamsoft/reactnativelib/DynamsoftBaseModule.kt +8 -8
  43. package/android/src/main/java/com/dynamsoft/reactnativelib/ISAModule.kt +73 -73
  44. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +14 -14
  45. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewModule.kt +35 -35
  46. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageManagerModule.kt +15 -15
  47. package/android/src/main/java/com/dynamsoft/reactnativelib/LicenseModule.kt +29 -29
  48. package/android/src/main/java/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +83 -83
  49. package/android/src/main/java/com/dynamsoft/reactnativelib/ReactNativeDcvPackage.kt +32 -32
  50. package/android/src/main/java/com/dynamsoft/reactnativelib/VersionsModule.kt +41 -41
  51. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/Basic.kt +44 -44
  52. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCore.kt +50 -50
  53. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCvr.kt +129 -129
  54. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDBR.kt +157 -157
  55. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCE.kt +110 -110
  56. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCP.kt +49 -49
  57. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDDN.kt +85 -85
  58. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDLR.kt +72 -72
  59. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ImageUtil.kt +58 -58
  60. package/android/src/main/java/com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl.kt +120 -120
  61. package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +306 -306
  62. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +247 -247
  63. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraLifeCycleOwner.java +14 -14
  64. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraViewManagerImpl.kt +77 -77
  65. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewManagerImpl.kt +15 -15
  66. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewModuleImpl.kt +110 -110
  67. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNCameraView.kt +20 -20
  68. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNImageEditorView.kt +19 -19
  69. package/android/src/main/java/com/dynamsoft/reactnativelib/license/LicenseModuleImpl.kt +39 -39
  70. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +120 -120
  71. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/MultiCrossFilterModuleImpl.kt +111 -111
  72. package/app.plugin.js +21 -21
  73. package/dynamsoft-capture-vision-react-native.podspec +24 -24
  74. package/ios/CPP/DSImageData+HostObject.h +18 -18
  75. package/ios/CPP/DSImageData+HostObject.mm +38 -38
  76. package/ios/CPP/ImageDataHostObject.cpp +87 -87
  77. package/ios/CPP/ImageDataHostObject.hpp +35 -35
  78. package/ios/CPP/MutableRawBuffer.cpp +23 -23
  79. package/ios/CPP/MutableRawBuffer.hpp +23 -23
  80. package/ios/CPP/RNDynamsoft+JSI.h +22 -22
  81. package/ios/CPP/RNDynamsoft+JSI.mm +303 -303
  82. package/ios/CPP/RNDynamsoft+Json.h +93 -93
  83. package/ios/CPP/RNDynamsoft+Json.m +733 -733
  84. package/ios/CPP/YeetJSIUtils.h +56 -56
  85. package/ios/CPP/YeetJSIUtils.mm +208 -208
  86. package/ios/RNDynamsoftCameraView.h +31 -31
  87. package/ios/RNDynamsoftCameraView.m +108 -108
  88. package/ios/RNDynamsoftCameraViewManager.h +14 -14
  89. package/ios/RNDynamsoftCameraViewManager.m +195 -195
  90. package/ios/RNDynamsoftCaptureVisionRouter.h +18 -18
  91. package/ios/RNDynamsoftCaptureVisionRouter.mm +532 -532
  92. package/ios/RNDynamsoftImageEditorView.h +17 -17
  93. package/ios/RNDynamsoftImageEditorView.m +25 -25
  94. package/ios/RNDynamsoftImageEditorViewManager.h +14 -14
  95. package/ios/RNDynamsoftImageEditorViewManager.mm +183 -183
  96. package/ios/RNDynamsoftImageManager.h +14 -14
  97. package/ios/RNDynamsoftImageManager.mm +369 -369
  98. package/ios/RNDynamsoftImageSourceAdapter.h +19 -19
  99. package/ios/RNDynamsoftImageSourceAdapter.mm +255 -255
  100. package/ios/RNDynamsoftLicense.h +14 -14
  101. package/ios/RNDynamsoftLicense.m +62 -62
  102. package/ios/RNDynamsoftMultiCrossFilter.h +14 -14
  103. package/ios/RNDynamsoftMultiCrossFilter.m +145 -145
  104. package/ios/RNDynamsoftVersions.h +13 -13
  105. package/ios/RNDynamsoftVersions.m +27 -27
  106. package/package.json +48 -48
  107. package/src/NativeDynamsoftVersionsModule.tsx +20 -20
  108. package/src/VersionsModule.tsx +7 -7
  109. package/src/core/CapturedResultBase.tsx +18 -18
  110. package/src/core/CapturedResultItem.tsx +23 -23
  111. package/src/core/CoreModule.tsx +9 -9
  112. package/src/core/DSRect.tsx +29 -29
  113. package/src/core/EnumCaptureResultItemType.tsx +52 -52
  114. package/src/core/EnumColourChannelUsageType.tsx +26 -26
  115. package/src/core/EnumCrossVerificationStatus.tsx +46 -46
  116. package/src/core/EnumGrayscaleEnhancementMode.tsx +46 -46
  117. package/src/core/EnumGrayscaleTransformationMode.tsx +35 -35
  118. package/src/core/EnumImageFileFormat.tsx +6 -6
  119. package/src/core/EnumPixelFormat.tsx +53 -53
  120. package/src/core/ImageData.tsx +87 -87
  121. package/src/core/ImageSourceAdapter.tsx +160 -160
  122. package/src/core/NativeDynamsoftImageSourceAdapterModule.tsx +29 -29
  123. package/src/core/Point.tsx +13 -13
  124. package/src/core/Quadrilateral.tsx +12 -12
  125. package/src/core/index.tsx +18 -18
  126. package/src/cvr/CaptureVisionRouter.tsx +683 -683
  127. package/src/cvr/CaptureVisionRouterModule.tsx +9 -9
  128. package/src/cvr/CapturedResult.tsx +123 -123
  129. package/src/cvr/CapturedResultFilter.tsx +13 -13
  130. package/src/cvr/CapturedResultReceiver.tsx +71 -71
  131. package/src/cvr/EnumPresetTemplate.tsx +81 -81
  132. package/src/cvr/NativeDynamsoftCaptureVisionRouterModule.tsx +25 -25
  133. package/src/cvr/SimplifiedCaptureVisionSettings.tsx +61 -61
  134. package/src/cvr/index.tsx +11 -11
  135. package/src/dbr/BarcodeDetails.tsx +51 -51
  136. package/src/dbr/BarcodeReaderModule.tsx +9 -9
  137. package/src/dbr/BarcodeResultItem.tsx +65 -65
  138. package/src/dbr/DecodedBarcodesResult.tsx +14 -14
  139. package/src/dbr/ECISegment.tsx +23 -23
  140. package/src/dbr/EnumBarcodeFormat.tsx +112 -112
  141. package/src/dbr/EnumDeblurMode.tsx +29 -29
  142. package/src/dbr/EnumLocalizationMode.tsx +27 -27
  143. package/src/dbr/EnumQRCodeErrorCorrectionLevel.tsx +6 -6
  144. package/src/dbr/SimplifiedBarcodeReaderSettings.tsx +80 -80
  145. package/src/dbr/index.tsx +9 -9
  146. package/src/dce/CameraEnhancer.tsx +254 -254
  147. package/src/dce/CameraEnhancerModule.tsx +9 -9
  148. package/src/dce/CameraView.tsx +100 -100
  149. package/src/dce/DynamsoftCameraViewNativeComponent.ts +96 -96
  150. package/src/dce/DynamsoftImageEditorViewNativeComponent.ts +9 -9
  151. package/src/dce/EnumCameraPosition.tsx +25 -25
  152. package/src/dce/EnumDrawingLayerId.tsx +17 -17
  153. package/src/dce/EnumEnhancedFeatures.tsx +24 -24
  154. package/src/dce/EnumFocusMode.tsx +6 -6
  155. package/src/dce/EnumResolution.tsx +8 -8
  156. package/src/dce/EnumTorchState.tsx +10 -10
  157. package/src/dce/FeedBack.tsx +28 -28
  158. package/src/dce/ImageEditorView.tsx +131 -131
  159. package/src/dce/NativeDynamsoftCameraViewModule.tsx +47 -47
  160. package/src/dce/NativeDynamsoftImageEditorViewModule.ts +9 -9
  161. package/src/dce/index.tsx +13 -13
  162. package/src/dcp/CodeParserDedicatorModule.tsx +9 -9
  163. package/src/dcp/CodeParserModule.tsx +9 -9
  164. package/src/dcp/EnumMappingStatus.tsx +14 -14
  165. package/src/dcp/EnumValidationStatus.tsx +14 -14
  166. package/src/dcp/ParsedResult.tsx +14 -14
  167. package/src/dcp/ParsedResultItem.tsx +50 -50
  168. package/src/dcp/index.tsx +8 -8
  169. package/src/ddn/DeskewedImageResultItem.tsx +40 -40
  170. package/src/ddn/DetectedQuadResultItem.tsx +31 -31
  171. package/src/ddn/DocumentNormalizerModule.tsx +9 -9
  172. package/src/ddn/EnhancedImageResultItem.tsx +20 -20
  173. package/src/ddn/EnumImageColourMode.tsx +14 -14
  174. package/src/ddn/ProcessedDocumentResult.tsx +27 -27
  175. package/src/ddn/SimplifiedDocumentNormalizerSettings.tsx +65 -65
  176. package/src/ddn/index.tsx +11 -11
  177. package/src/dip/ImageProcessingModule.tsx +9 -9
  178. package/src/dip/index.tsx +1 -1
  179. package/src/dlr/CharacterResult.tsx +28 -28
  180. package/src/dlr/LabelRecognizerModule.tsx +9 -9
  181. package/src/dlr/RecognizedTextLinesResult.tsx +19 -19
  182. package/src/dlr/SimplifiedLabelRecognizerSettings.tsx +33 -33
  183. package/src/dlr/TextLineResultItem.tsx +41 -41
  184. package/src/dlr/index.tsx +8 -8
  185. package/src/index.tsx +13 -13
  186. package/src/license/LicenseManager.tsx +49 -49
  187. package/src/license/LicenseModule.tsx +9 -9
  188. package/src/license/NativeDynamsoftLicenseModule.tsx +7 -7
  189. package/src/license/index.tsx +7 -7
  190. package/src/utility/CrossVerificationCriteria.tsx +11 -11
  191. package/src/utility/EnumFilterType.tsx +5 -5
  192. package/src/utility/ImageManager.tsx +348 -348
  193. package/src/utility/MultiFrameResultCrossFilter.tsx +183 -183
  194. package/src/utility/NativeDynamsoftImageManagerModule.tsx +7 -7
  195. package/src/utility/NativeDynamsoftMultiCrossFilterModule.tsx +18 -18
  196. package/src/utility/UtilityModule.tsx +9 -9
  197. package/src/utility/index.tsx +4 -4
  198. package/android/.gitignore +0 -4
@@ -1,306 +1,306 @@
1
- package com.dynamsoft.reactnativelib.cvr
2
-
3
- import android.util.Log
4
- import com.dynamsoft.core.basic_structures.CompletionListener
5
- import com.dynamsoft.core.basic_structures.EnumCapturedResultItemType
6
- import com.dynamsoft.core.basic_structures.ImageData
7
- import com.dynamsoft.cvr.*
8
- import com.dynamsoft.dbr.DecodedBarcodesResult
9
- import com.dynamsoft.dcp.ParsedResult
10
- import com.dynamsoft.ddn.DeskewedImageResultItem
11
- import com.dynamsoft.ddn.EnhancedImageResultItem
12
- import com.dynamsoft.ddn.ProcessedDocumentResult
13
- import com.dynamsoft.dlr.RecognizedTextLinesResult
14
- import com.dynamsoft.reactnativelib.basicutils.toWritableMap
15
- import com.dynamsoft.reactnativelib.core.ImageSourceAdapterModuleImpl
16
- import com.dynamsoft.reactnativelib.basicutils.updateFromReadableMap
17
- import com.facebook.react.bridge.*
18
- import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter
19
- import kotlinx.coroutines.delay
20
- import kotlinx.coroutines.runBlocking
21
-
22
- private const val onCapturedResultReceived_Event = "onCapturedResultReceived"
23
- private const val onDecodedBarcodesReceived_Event = "onDecodedBarcodesReceived"
24
- private const val onProcessedDocumentResultReceived_Event = "onProcessedDocumentResultReceived"
25
- private const val onRecognizedTextLinesReceived_Event = "onRecognizedTextLinesReceived"
26
- private const val onParsedResultsReceived_Event = "onParsedResultsReceived"
27
- private const val TAG = "CvrModule"
28
-
29
-
30
- val filterMap = hashMapOf<String, CapturedResultFilter>()
31
-
32
- class CaptureVisionRouterModuleImpl(private val reactContext: ReactApplicationContext) {
33
- companion object {
34
- const val NAME = "DynamsoftCaptureVisionRouterModule"
35
- }
36
-
37
- private var ifStopCapturing = false
38
- private var currentDeskewedImages: Array<ImageData>? = null
39
- private var currentEnhancedImages: Array<ImageData>? = null
40
- private var cvr: CaptureVisionRouter? = null
41
- private val emitter by lazy { reactContext.getJSModule(RCTDeviceEventEmitter::class.java) }
42
-
43
- private var continueCRR = false
44
- private var crrRemoved = false
45
- private val crrMap by lazy {
46
- mapOf(
47
- onCapturedResultReceived_Event to object : CapturedResultReceiver {
48
- override fun onCapturedResultReceived(result: CapturedResult) {
49
- currentDeskewedImages =
50
- result.items.filter { it.type == EnumCapturedResultItemType.CRIT_DESKEWED_IMAGE }
51
- .map { (it as DeskewedImageResultItem).imageData }.toTypedArray()
52
- currentEnhancedImages =
53
- result.items.filter { it.type == EnumCapturedResultItemType.CRIT_ENHANCED_IMAGE }
54
- .map { (it as EnhancedImageResultItem).imageData }.toTypedArray()
55
- emitResultAndWaitForResponse(onCapturedResultReceived_Event, result.toWritableMap())
56
- }
57
- },
58
- onDecodedBarcodesReceived_Event to object : CapturedResultReceiver {
59
- override fun onDecodedBarcodesReceived(result: DecodedBarcodesResult) {
60
- emitResultAndWaitForResponse(onDecodedBarcodesReceived_Event, result.toWritableMap())
61
- }
62
- },
63
- onProcessedDocumentResultReceived_Event to object : CapturedResultReceiver {
64
- override fun onProcessedDocumentResultReceived(result: ProcessedDocumentResult) {
65
- currentDeskewedImages = result.deskewedImageResultItems.map { (it as DeskewedImageResultItem).imageData }.toTypedArray()
66
- currentEnhancedImages = result.enhancedImageResultItems.map { (it as EnhancedImageResultItem).imageData }.toTypedArray()
67
- emitResultAndWaitForResponse(onProcessedDocumentResultReceived_Event, result.toWritableMap())
68
- }
69
- },
70
- onRecognizedTextLinesReceived_Event to object : CapturedResultReceiver {
71
- override fun onRecognizedTextLinesReceived(result: RecognizedTextLinesResult) {
72
- emitResultAndWaitForResponse(onRecognizedTextLinesReceived_Event, result.toWritableMap())
73
- }
74
- },
75
- onParsedResultsReceived_Event to object : CapturedResultReceiver {
76
- override fun onParsedResultsReceived(result: ParsedResult) {
77
- emitResultAndWaitForResponse(onParsedResultsReceived_Event, result.toWritableMap())
78
- }
79
- }
80
- )
81
- }
82
-
83
- private fun emitResultAndWaitForResponse(eventKey: String, result: WritableMap) {
84
- continueCRR = false
85
- emitter.emit(eventKey, result)
86
- while (!continueCRR && !crrRemoved && !ifStopCapturing) {
87
- //waiting for js callback end
88
- runBlocking {
89
- delay(5)
90
- }
91
- }
92
- }
93
-
94
- fun getName() = NAME
95
-
96
- @ReactMethod(isBlockingSynchronousMethod = true)
97
- fun createInstance(): Boolean {
98
- if(cvr == null) cvr = CaptureVisionRouter()
99
- return true
100
- }
101
-
102
- @ReactMethod(isBlockingSynchronousMethod = true)
103
- fun destroyInstance(): Boolean {
104
- cvr?.removeAllResultReceivers()
105
- ifStopCapturing = true
106
- cvr?.stopCapturing()
107
- try {
108
- cvr?.input = null
109
- } catch (_: Exception) {}
110
- cvr = null
111
- return true
112
- }
113
-
114
- @ReactMethod
115
- fun continueCRR() {
116
- continueCRR = true
117
- }
118
-
119
- @ReactMethod
120
- fun addListener(type: String?) {
121
- crrRemoved = false
122
- crrMap[type]?.let { cvr?.addResultReceiver(it) }
123
- }
124
-
125
- @ReactMethod
126
- fun removeListeners(count: Int) {
127
- //keep
128
- }
129
-
130
- @ReactMethod
131
- fun removeListener(type: String?) {
132
- crrMap[type]?.let { cvr?.removeResultReceiver(it) }
133
- }
134
-
135
- @ReactMethod
136
- fun removeAllResultListeners() {
137
- crrRemoved = true
138
- crrMap.forEach {
139
- cvr?.removeResultReceiver(it.value)
140
- }
141
- }
142
-
143
- @ReactMethod
144
- fun addFilter(filterId: String?) {
145
- cvr?.addResultFilter(filterMap[filterId])
146
- }
147
-
148
- @ReactMethod
149
- fun removeFilter(filterId: String?) {
150
- cvr?.removeResultFilter(filterMap[filterId])
151
- }
152
-
153
- @ReactMethod
154
- fun startCapturing(template: String, promise: Promise) {
155
- ifStopCapturing = false
156
- cvr?.startCapturing(template, object : CompletionListener {
157
- override fun onSuccess() {
158
- Log.i(TAG, "onSuccess: startCapturing($template)")
159
- promise.resolve(null)
160
- }
161
-
162
- override fun onFailure(errorCode: Int, errorString: String?) {
163
- Log.e(TAG, "onFailure: startCapturing($template). ErrorCode: $errorCode. ErrorString: $errorString")
164
- promise.reject(errorCode.toString(), errorString)
165
- }
166
- })
167
- }
168
-
169
- @ReactMethod
170
- fun stopCapturing(promise: Promise) {
171
- ifStopCapturing = true
172
- cvr?.stopCapturing()
173
- promise.resolve(null)
174
- }
175
-
176
- @ReactMethod
177
- fun setInput(inputId: String) {
178
- ImageSourceAdapterModuleImpl.mapISA[inputId]?.apply { cvr?.input = this }
179
- }
180
-
181
- @ReactMethod
182
- fun resetSettings(promise: Promise) {
183
- try {
184
- cvr?.resetSettings()
185
- promise.resolve(true)
186
- } catch (e: CaptureVisionRouterException) {
187
- promise.reject(e.errorCode.toString(), e.message)
188
- }
189
- }
190
-
191
- @ReactMethod
192
- fun getSimplifiedSettings(template: String, promise: Promise) {
193
- try {
194
- promise.resolve(cvr?.getSimplifiedSettings(template)?.toWritableMap())
195
- } catch (e: CaptureVisionRouterException) {
196
- promise.reject(e.errorCode.toString(), e.message)
197
- }
198
- }
199
-
200
- @ReactMethod
201
- fun updateSettings(settings: ReadableMap, template: String, promise: Promise) {
202
- try {
203
- cvr?.getSimplifiedSettings(template)?.apply {
204
- updateFromReadableMap(settings)
205
- cvr?.updateSettings(template, this)
206
- }
207
- promise.resolve(null)
208
- } catch (e: CaptureVisionRouterException) {
209
- promise.reject(e.errorCode.toString(), e.message)
210
- }
211
- }
212
-
213
- @ReactMethod
214
- fun initSettings(content: String, promise: Promise) {
215
- try {
216
- cvr?.initSettings(content)
217
- promise.resolve(null)
218
- } catch (e: CaptureVisionRouterException) {
219
- promise.reject(e.errorCode.toString(), e.message)
220
- }
221
- }
222
-
223
- @ReactMethod
224
- fun initSettingsFromFile(path: String, promise: Promise) {
225
- try {
226
- cvr?.initSettingsFromFile(path)
227
- promise.resolve(null)
228
- } catch (e: CaptureVisionRouterException) {
229
- promise.reject(e.errorCode.toString(), e.message)
230
- }
231
- }
232
-
233
- @ReactMethod
234
- fun outputSettingsToFile(template: String, path: String, includeDefaultValues: Boolean, promise: Promise) {
235
- try {
236
- cvr?.outputSettingsToFile(template, path, includeDefaultValues)
237
- promise.resolve(null)
238
- } catch (e: CaptureVisionRouterException) {
239
- promise.reject(e.errorCode.toString(), e.message)
240
- }
241
- }
242
-
243
- @ReactMethod
244
- fun outputSettings(template: String, includeDefaultValues: Boolean, promise: Promise) {
245
- try {
246
- promise.resolve(cvr?.outputSettings(template, includeDefaultValues))
247
- } catch (e: CaptureVisionRouterException) {
248
- promise.reject(e.errorCode.toString(), e.message)
249
- }
250
- }
251
-
252
- @ReactMethod
253
- fun switchCapturingTemplate(template: String, promise: Promise) {
254
- try {
255
- cvr?.switchCapturingTemplate(template)
256
- promise.resolve(null)
257
- } catch (e: CaptureVisionRouterException) {
258
- promise.reject(e.errorCode.toString(), e.message)
259
- }
260
- }
261
-
262
- @ReactMethod
263
- fun clearDLModelBuffers() {
264
- CaptureVisionRouter.clearDLModelBuffers()
265
- }
266
-
267
- @ReactMethod
268
- fun setGlobalIntraOpNumThreads(intraOpNumThreads: Int) {
269
- CaptureVisionRouter.setGlobalIntraOpNumThreads(intraOpNumThreads)
270
- }
271
-
272
- @ReactMethod(isBlockingSynchronousMethod = true)
273
- fun install(): Boolean {
274
- reactContext.javaScriptContextHolder?.apply {
275
- nativeInstall(this.get())
276
- }
277
- return true
278
- }
279
-
280
- //@Native
281
- private fun captureImageDataCalledInJSI(imageData: ImageData, template: String): CapturedResult {
282
- return cvr?.capture(imageData, template) ?: CapturedResult()
283
- }
284
-
285
- //@Native
286
- private fun captureFileCalledInJSI(filePath: String, template: String): CapturedResult {
287
- return cvr?.capture(filePath, template) ?: CapturedResult()
288
- }
289
-
290
- //@Native
291
- private fun captureFileBytesCalledInJSI(fileBytes: ByteArray, template: String): CapturedResult {
292
- return cvr?.capture(fileBytes, template) ?: CapturedResult()
293
- }
294
-
295
- //@Native
296
- private fun getOriginalImageCalledInJSI(imageHashId: String): ImageData {
297
- var originalImage = cvr?.intermediateResultManager?.getOriginalImage(imageHashId)
298
- if (originalImage == null) {
299
- originalImage = ImageData()
300
- originalImage.bytes = ByteArray(0)
301
- }
302
- return originalImage
303
- }
304
-
305
- private external fun nativeInstall(jsiPtr: Long)
306
- }
1
+ package com.dynamsoft.reactnativelib.cvr
2
+
3
+ import android.util.Log
4
+ import com.dynamsoft.core.basic_structures.CompletionListener
5
+ import com.dynamsoft.core.basic_structures.EnumCapturedResultItemType
6
+ import com.dynamsoft.core.basic_structures.ImageData
7
+ import com.dynamsoft.cvr.*
8
+ import com.dynamsoft.dbr.DecodedBarcodesResult
9
+ import com.dynamsoft.dcp.ParsedResult
10
+ import com.dynamsoft.ddn.DeskewedImageResultItem
11
+ import com.dynamsoft.ddn.EnhancedImageResultItem
12
+ import com.dynamsoft.ddn.ProcessedDocumentResult
13
+ import com.dynamsoft.dlr.RecognizedTextLinesResult
14
+ import com.dynamsoft.reactnativelib.basicutils.toWritableMap
15
+ import com.dynamsoft.reactnativelib.core.ImageSourceAdapterModuleImpl
16
+ import com.dynamsoft.reactnativelib.basicutils.updateFromReadableMap
17
+ import com.facebook.react.bridge.*
18
+ import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter
19
+ import kotlinx.coroutines.delay
20
+ import kotlinx.coroutines.runBlocking
21
+
22
+ private const val onCapturedResultReceived_Event = "onCapturedResultReceived"
23
+ private const val onDecodedBarcodesReceived_Event = "onDecodedBarcodesReceived"
24
+ private const val onProcessedDocumentResultReceived_Event = "onProcessedDocumentResultReceived"
25
+ private const val onRecognizedTextLinesReceived_Event = "onRecognizedTextLinesReceived"
26
+ private const val onParsedResultsReceived_Event = "onParsedResultsReceived"
27
+ private const val TAG = "CvrModule"
28
+
29
+
30
+ val filterMap = hashMapOf<String, CapturedResultFilter>()
31
+
32
+ class CaptureVisionRouterModuleImpl(private val reactContext: ReactApplicationContext) {
33
+ companion object {
34
+ const val NAME = "DynamsoftCaptureVisionRouterModule"
35
+ }
36
+
37
+ private var ifStopCapturing = false
38
+ private var currentDeskewedImages: Array<ImageData>? = null
39
+ private var currentEnhancedImages: Array<ImageData>? = null
40
+ private var cvr: CaptureVisionRouter? = null
41
+ private val emitter by lazy { reactContext.getJSModule(RCTDeviceEventEmitter::class.java) }
42
+
43
+ private var continueCRR = false
44
+ private var crrRemoved = false
45
+ private val crrMap by lazy {
46
+ mapOf(
47
+ onCapturedResultReceived_Event to object : CapturedResultReceiver {
48
+ override fun onCapturedResultReceived(result: CapturedResult) {
49
+ currentDeskewedImages =
50
+ result.items.filter { it.type == EnumCapturedResultItemType.CRIT_DESKEWED_IMAGE }
51
+ .map { (it as DeskewedImageResultItem).imageData }.toTypedArray()
52
+ currentEnhancedImages =
53
+ result.items.filter { it.type == EnumCapturedResultItemType.CRIT_ENHANCED_IMAGE }
54
+ .map { (it as EnhancedImageResultItem).imageData }.toTypedArray()
55
+ emitResultAndWaitForResponse(onCapturedResultReceived_Event, result.toWritableMap())
56
+ }
57
+ },
58
+ onDecodedBarcodesReceived_Event to object : CapturedResultReceiver {
59
+ override fun onDecodedBarcodesReceived(result: DecodedBarcodesResult) {
60
+ emitResultAndWaitForResponse(onDecodedBarcodesReceived_Event, result.toWritableMap())
61
+ }
62
+ },
63
+ onProcessedDocumentResultReceived_Event to object : CapturedResultReceiver {
64
+ override fun onProcessedDocumentResultReceived(result: ProcessedDocumentResult) {
65
+ currentDeskewedImages = result.deskewedImageResultItems.map { (it as DeskewedImageResultItem).imageData }.toTypedArray()
66
+ currentEnhancedImages = result.enhancedImageResultItems.map { (it as EnhancedImageResultItem).imageData }.toTypedArray()
67
+ emitResultAndWaitForResponse(onProcessedDocumentResultReceived_Event, result.toWritableMap())
68
+ }
69
+ },
70
+ onRecognizedTextLinesReceived_Event to object : CapturedResultReceiver {
71
+ override fun onRecognizedTextLinesReceived(result: RecognizedTextLinesResult) {
72
+ emitResultAndWaitForResponse(onRecognizedTextLinesReceived_Event, result.toWritableMap())
73
+ }
74
+ },
75
+ onParsedResultsReceived_Event to object : CapturedResultReceiver {
76
+ override fun onParsedResultsReceived(result: ParsedResult) {
77
+ emitResultAndWaitForResponse(onParsedResultsReceived_Event, result.toWritableMap())
78
+ }
79
+ }
80
+ )
81
+ }
82
+
83
+ private fun emitResultAndWaitForResponse(eventKey: String, result: WritableMap) {
84
+ continueCRR = false
85
+ emitter.emit(eventKey, result)
86
+ while (!continueCRR && !crrRemoved && !ifStopCapturing) {
87
+ //waiting for js callback end
88
+ runBlocking {
89
+ delay(5)
90
+ }
91
+ }
92
+ }
93
+
94
+ fun getName() = NAME
95
+
96
+ @ReactMethod(isBlockingSynchronousMethod = true)
97
+ fun createInstance(): Boolean {
98
+ if(cvr == null) cvr = CaptureVisionRouter()
99
+ return true
100
+ }
101
+
102
+ @ReactMethod(isBlockingSynchronousMethod = true)
103
+ fun destroyInstance(): Boolean {
104
+ cvr?.removeAllResultReceivers()
105
+ ifStopCapturing = true
106
+ cvr?.stopCapturing()
107
+ try {
108
+ cvr?.input = null
109
+ } catch (_: Exception) {}
110
+ cvr = null
111
+ return true
112
+ }
113
+
114
+ @ReactMethod
115
+ fun continueCRR() {
116
+ continueCRR = true
117
+ }
118
+
119
+ @ReactMethod
120
+ fun addListener(type: String?) {
121
+ crrRemoved = false
122
+ crrMap[type]?.let { cvr?.addResultReceiver(it) }
123
+ }
124
+
125
+ @ReactMethod
126
+ fun removeListeners(count: Int) {
127
+ //keep
128
+ }
129
+
130
+ @ReactMethod
131
+ fun removeListener(type: String?) {
132
+ crrMap[type]?.let { cvr?.removeResultReceiver(it) }
133
+ }
134
+
135
+ @ReactMethod
136
+ fun removeAllResultListeners() {
137
+ crrRemoved = true
138
+ crrMap.forEach {
139
+ cvr?.removeResultReceiver(it.value)
140
+ }
141
+ }
142
+
143
+ @ReactMethod
144
+ fun addFilter(filterId: String?) {
145
+ cvr?.addResultFilter(filterMap[filterId])
146
+ }
147
+
148
+ @ReactMethod
149
+ fun removeFilter(filterId: String?) {
150
+ cvr?.removeResultFilter(filterMap[filterId])
151
+ }
152
+
153
+ @ReactMethod
154
+ fun startCapturing(template: String, promise: Promise) {
155
+ ifStopCapturing = false
156
+ cvr?.startCapturing(template, object : CompletionListener {
157
+ override fun onSuccess() {
158
+ Log.i(TAG, "onSuccess: startCapturing($template)")
159
+ promise.resolve(null)
160
+ }
161
+
162
+ override fun onFailure(errorCode: Int, errorString: String?) {
163
+ Log.e(TAG, "onFailure: startCapturing($template). ErrorCode: $errorCode. ErrorString: $errorString")
164
+ promise.reject(errorCode.toString(), errorString)
165
+ }
166
+ })
167
+ }
168
+
169
+ @ReactMethod
170
+ fun stopCapturing(promise: Promise) {
171
+ ifStopCapturing = true
172
+ cvr?.stopCapturing()
173
+ promise.resolve(null)
174
+ }
175
+
176
+ @ReactMethod
177
+ fun setInput(inputId: String) {
178
+ ImageSourceAdapterModuleImpl.mapISA[inputId]?.apply { cvr?.input = this }
179
+ }
180
+
181
+ @ReactMethod
182
+ fun resetSettings(promise: Promise) {
183
+ try {
184
+ cvr?.resetSettings()
185
+ promise.resolve(true)
186
+ } catch (e: CaptureVisionRouterException) {
187
+ promise.reject(e.errorCode.toString(), e.message)
188
+ }
189
+ }
190
+
191
+ @ReactMethod
192
+ fun getSimplifiedSettings(template: String, promise: Promise) {
193
+ try {
194
+ promise.resolve(cvr?.getSimplifiedSettings(template)?.toWritableMap())
195
+ } catch (e: CaptureVisionRouterException) {
196
+ promise.reject(e.errorCode.toString(), e.message)
197
+ }
198
+ }
199
+
200
+ @ReactMethod
201
+ fun updateSettings(settings: ReadableMap, template: String, promise: Promise) {
202
+ try {
203
+ cvr?.getSimplifiedSettings(template)?.apply {
204
+ updateFromReadableMap(settings)
205
+ cvr?.updateSettings(template, this)
206
+ }
207
+ promise.resolve(null)
208
+ } catch (e: CaptureVisionRouterException) {
209
+ promise.reject(e.errorCode.toString(), e.message)
210
+ }
211
+ }
212
+
213
+ @ReactMethod
214
+ fun initSettings(content: String, promise: Promise) {
215
+ try {
216
+ cvr?.initSettings(content)
217
+ promise.resolve(null)
218
+ } catch (e: CaptureVisionRouterException) {
219
+ promise.reject(e.errorCode.toString(), e.message)
220
+ }
221
+ }
222
+
223
+ @ReactMethod
224
+ fun initSettingsFromFile(path: String, promise: Promise) {
225
+ try {
226
+ cvr?.initSettingsFromFile(path)
227
+ promise.resolve(null)
228
+ } catch (e: CaptureVisionRouterException) {
229
+ promise.reject(e.errorCode.toString(), e.message)
230
+ }
231
+ }
232
+
233
+ @ReactMethod
234
+ fun outputSettingsToFile(template: String, path: String, includeDefaultValues: Boolean, promise: Promise) {
235
+ try {
236
+ cvr?.outputSettingsToFile(template, path, includeDefaultValues)
237
+ promise.resolve(null)
238
+ } catch (e: CaptureVisionRouterException) {
239
+ promise.reject(e.errorCode.toString(), e.message)
240
+ }
241
+ }
242
+
243
+ @ReactMethod
244
+ fun outputSettings(template: String, includeDefaultValues: Boolean, promise: Promise) {
245
+ try {
246
+ promise.resolve(cvr?.outputSettings(template, includeDefaultValues))
247
+ } catch (e: CaptureVisionRouterException) {
248
+ promise.reject(e.errorCode.toString(), e.message)
249
+ }
250
+ }
251
+
252
+ @ReactMethod
253
+ fun switchCapturingTemplate(template: String, promise: Promise) {
254
+ try {
255
+ cvr?.switchCapturingTemplate(template)
256
+ promise.resolve(null)
257
+ } catch (e: CaptureVisionRouterException) {
258
+ promise.reject(e.errorCode.toString(), e.message)
259
+ }
260
+ }
261
+
262
+ @ReactMethod
263
+ fun clearDLModelBuffers() {
264
+ CaptureVisionRouter.clearDLModelBuffers()
265
+ }
266
+
267
+ @ReactMethod
268
+ fun setGlobalIntraOpNumThreads(intraOpNumThreads: Int) {
269
+ CaptureVisionRouter.setGlobalIntraOpNumThreads(intraOpNumThreads)
270
+ }
271
+
272
+ @ReactMethod(isBlockingSynchronousMethod = true)
273
+ fun install(): Boolean {
274
+ reactContext.javaScriptContextHolder?.apply {
275
+ nativeInstall(this.get())
276
+ }
277
+ return true
278
+ }
279
+
280
+ //@Native
281
+ private fun captureImageDataCalledInJSI(imageData: ImageData, template: String): CapturedResult {
282
+ return cvr?.capture(imageData, template) ?: CapturedResult()
283
+ }
284
+
285
+ //@Native
286
+ private fun captureFileCalledInJSI(filePath: String, template: String): CapturedResult {
287
+ return cvr?.capture(filePath, template) ?: CapturedResult()
288
+ }
289
+
290
+ //@Native
291
+ private fun captureFileBytesCalledInJSI(fileBytes: ByteArray, template: String): CapturedResult {
292
+ return cvr?.capture(fileBytes, template) ?: CapturedResult()
293
+ }
294
+
295
+ //@Native
296
+ private fun getOriginalImageCalledInJSI(imageHashId: String): ImageData {
297
+ var originalImage = cvr?.intermediateResultManager?.getOriginalImage(imageHashId)
298
+ if (originalImage == null) {
299
+ originalImage = ImageData()
300
+ originalImage.bytes = ByteArray(0)
301
+ }
302
+ return originalImage
303
+ }
304
+
305
+ private external fun nativeInstall(jsiPtr: Long)
306
+ }