dynamsoft-capture-vision-react-native 3.4.1200 → 3.4.3000

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 (222) hide show
  1. package/LICENSE +5 -5
  2. package/README.md +62 -66
  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/dysJniLibs/debug/arm64-v8a/librn_dys.so +0 -0
  32. package/android/src/main/dysJniLibs/debug/armeabi-v7a/librn_dys.so +0 -0
  33. package/android/src/main/dysJniLibs/debug/x86/librn_dys.so +0 -0
  34. package/android/src/main/dysJniLibs/debug/x86_64/librn_dys.so +0 -0
  35. package/android/src/main/dysJniLibs/release/arm64-v8a/librn_dys.so +0 -0
  36. package/android/src/main/dysJniLibs/release/armeabi-v7a/librn_dys.so +0 -0
  37. package/android/src/main/dysJniLibs/release/x86/librn_dys.so +0 -0
  38. package/android/src/main/dysJniLibs/release/x86_64/librn_dys.so +0 -0
  39. package/android/src/main/dysJniLibsFor81/debug/arm64-v8a/librn_dys.so +0 -0
  40. package/android/src/main/dysJniLibsFor81/debug/armeabi-v7a/librn_dys.so +0 -0
  41. package/android/src/main/dysJniLibsFor81/debug/x86/librn_dys.so +0 -0
  42. package/android/src/main/dysJniLibsFor81/debug/x86_64/librn_dys.so +0 -0
  43. package/android/src/main/dysJniLibsFor81/release/arm64-v8a/librn_dys.so +0 -0
  44. package/android/src/main/dysJniLibsFor81/release/armeabi-v7a/librn_dys.so +0 -0
  45. package/android/src/main/dysJniLibsFor81/release/x86/librn_dys.so +0 -0
  46. package/android/src/main/dysJniLibsFor81/release/x86_64/librn_dys.so +0 -0
  47. package/android/src/main/dysJniLibsFor82/debug/arm64-v8a/librn_dys.so +0 -0
  48. package/android/src/main/dysJniLibsFor82/debug/armeabi-v7a/librn_dys.so +0 -0
  49. package/android/src/main/dysJniLibsFor82/debug/x86/librn_dys.so +0 -0
  50. package/android/src/main/dysJniLibsFor82/debug/x86_64/librn_dys.so +0 -0
  51. package/android/src/main/dysJniLibsFor82/release/arm64-v8a/librn_dys.so +0 -0
  52. package/android/src/main/dysJniLibsFor82/release/armeabi-v7a/librn_dys.so +0 -0
  53. package/android/src/main/dysJniLibsFor82/release/x86/librn_dys.so +0 -0
  54. package/android/src/main/dysJniLibsFor82/release/x86_64/librn_dys.so +0 -0
  55. package/android/src/main/dysJniLibsFor86/debug/arm64-v8a/librn_dys.so +3 -0
  56. package/android/src/main/dysJniLibsFor86/debug/armeabi-v7a/librn_dys.so +3 -0
  57. package/android/src/main/dysJniLibsFor86/debug/x86/librn_dys.so +3 -0
  58. package/android/src/main/dysJniLibsFor86/debug/x86_64/librn_dys.so +3 -0
  59. package/android/src/main/dysJniLibsFor86/release/arm64-v8a/librn_dys.so +3 -0
  60. package/android/src/main/dysJniLibsFor86/release/armeabi-v7a/librn_dys.so +3 -0
  61. package/android/src/main/dysJniLibsFor86/release/x86/librn_dys.so +3 -0
  62. package/android/src/main/dysJniLibsFor86/release/x86_64/librn_dys.so +3 -0
  63. package/android/src/main/java/com/dynamsoft/reactnativelib/CVRModule.kt +137 -137
  64. package/android/src/main/java/com/dynamsoft/reactnativelib/CameraViewManager.kt +62 -62
  65. package/android/src/main/java/com/dynamsoft/reactnativelib/DCEModule.kt +125 -125
  66. package/android/src/main/java/com/dynamsoft/reactnativelib/DynamsoftBaseModule.kt +8 -8
  67. package/android/src/main/java/com/dynamsoft/reactnativelib/ISAModule.kt +73 -73
  68. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewManager.kt +14 -14
  69. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageEditorViewModule.kt +35 -35
  70. package/android/src/main/java/com/dynamsoft/reactnativelib/ImageManagerModule.kt +15 -15
  71. package/android/src/main/java/com/dynamsoft/reactnativelib/LicenseModule.kt +29 -29
  72. package/android/src/main/java/com/dynamsoft/reactnativelib/MultiCrossFilterModule.kt +83 -83
  73. package/android/src/main/java/com/dynamsoft/reactnativelib/ReactNativeDcvPackage.kt +32 -32
  74. package/android/src/main/java/com/dynamsoft/reactnativelib/VersionsModule.kt +41 -41
  75. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/Basic.kt +44 -44
  76. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCore.kt +50 -50
  77. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForCvr.kt +129 -129
  78. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDBR.kt +157 -157
  79. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCE.kt +110 -110
  80. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDCP.kt +49 -49
  81. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDDN.kt +85 -85
  82. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ForDLR.kt +72 -72
  83. package/android/src/main/java/com/dynamsoft/reactnativelib/basicutils/ImageUtil.kt +58 -58
  84. package/android/src/main/java/com/dynamsoft/reactnativelib/core/ImageSourceAdapterModuleImpl.kt +120 -120
  85. package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +306 -306
  86. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +247 -247
  87. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraLifeCycleOwner.java +14 -14
  88. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraViewManagerImpl.kt +77 -77
  89. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewManagerImpl.kt +15 -15
  90. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/ImageEditorViewModuleImpl.kt +110 -110
  91. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNCameraView.kt +20 -20
  92. package/android/src/main/java/com/dynamsoft/reactnativelib/dce/RNImageEditorView.kt +19 -19
  93. package/android/src/main/java/com/dynamsoft/reactnativelib/license/LicenseModuleImpl.kt +39 -39
  94. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +120 -120
  95. package/android/src/main/java/com/dynamsoft/reactnativelib/utility/MultiCrossFilterModuleImpl.kt +111 -111
  96. package/app.plugin.js +21 -21
  97. package/dynamsoft-capture-vision-react-native.podspec +24 -24
  98. package/ios/CPP/DSImageData+HostObject.h +18 -18
  99. package/ios/CPP/DSImageData+HostObject.mm +38 -38
  100. package/ios/CPP/ImageDataHostObject.cpp +87 -87
  101. package/ios/CPP/ImageDataHostObject.hpp +35 -35
  102. package/ios/CPP/MutableRawBuffer.cpp +23 -23
  103. package/ios/CPP/MutableRawBuffer.hpp +23 -23
  104. package/ios/CPP/RNDynamsoft+JSI.h +22 -22
  105. package/ios/CPP/RNDynamsoft+JSI.mm +303 -303
  106. package/ios/CPP/RNDynamsoft+Json.h +93 -93
  107. package/ios/CPP/RNDynamsoft+Json.m +733 -733
  108. package/ios/CPP/YeetJSIUtils.h +56 -56
  109. package/ios/CPP/YeetJSIUtils.mm +208 -208
  110. package/ios/RNDynamsoftCameraView.h +31 -31
  111. package/ios/RNDynamsoftCameraView.m +108 -108
  112. package/ios/RNDynamsoftCameraViewManager.h +14 -14
  113. package/ios/RNDynamsoftCameraViewManager.m +195 -195
  114. package/ios/RNDynamsoftCaptureVisionRouter.h +18 -18
  115. package/ios/RNDynamsoftCaptureVisionRouter.mm +532 -532
  116. package/ios/RNDynamsoftImageEditorView.h +17 -17
  117. package/ios/RNDynamsoftImageEditorView.m +25 -25
  118. package/ios/RNDynamsoftImageEditorViewManager.h +14 -14
  119. package/ios/RNDynamsoftImageEditorViewManager.mm +183 -183
  120. package/ios/RNDynamsoftImageManager.h +14 -14
  121. package/ios/RNDynamsoftImageManager.mm +369 -369
  122. package/ios/RNDynamsoftImageSourceAdapter.h +19 -19
  123. package/ios/RNDynamsoftImageSourceAdapter.mm +255 -255
  124. package/ios/RNDynamsoftLicense.h +14 -14
  125. package/ios/RNDynamsoftLicense.m +62 -62
  126. package/ios/RNDynamsoftMultiCrossFilter.h +14 -14
  127. package/ios/RNDynamsoftMultiCrossFilter.m +145 -145
  128. package/ios/RNDynamsoftVersions.h +13 -13
  129. package/ios/RNDynamsoftVersions.m +27 -27
  130. package/package.json +48 -48
  131. package/src/NativeDynamsoftVersionsModule.tsx +20 -20
  132. package/src/VersionsModule.tsx +7 -7
  133. package/src/core/CapturedResultBase.tsx +18 -18
  134. package/src/core/CapturedResultItem.tsx +23 -23
  135. package/src/core/CoreModule.tsx +9 -9
  136. package/src/core/DSRect.tsx +29 -29
  137. package/src/core/EnumCaptureResultItemType.tsx +52 -52
  138. package/src/core/EnumColourChannelUsageType.tsx +26 -26
  139. package/src/core/EnumCrossVerificationStatus.tsx +46 -46
  140. package/src/core/EnumGrayscaleEnhancementMode.tsx +46 -46
  141. package/src/core/EnumGrayscaleTransformationMode.tsx +35 -35
  142. package/src/core/EnumImageFileFormat.tsx +6 -6
  143. package/src/core/EnumPixelFormat.tsx +53 -53
  144. package/src/core/ImageData.tsx +87 -87
  145. package/src/core/ImageSourceAdapter.tsx +160 -160
  146. package/src/core/NativeDynamsoftImageSourceAdapterModule.tsx +29 -29
  147. package/src/core/Point.tsx +13 -13
  148. package/src/core/Quadrilateral.tsx +12 -12
  149. package/src/core/index.tsx +18 -18
  150. package/src/cvr/CaptureVisionRouter.tsx +683 -683
  151. package/src/cvr/CaptureVisionRouterModule.tsx +9 -9
  152. package/src/cvr/CapturedResult.tsx +123 -123
  153. package/src/cvr/CapturedResultFilter.tsx +13 -13
  154. package/src/cvr/CapturedResultReceiver.tsx +71 -71
  155. package/src/cvr/EnumPresetTemplate.tsx +81 -81
  156. package/src/cvr/NativeDynamsoftCaptureVisionRouterModule.tsx +25 -25
  157. package/src/cvr/SimplifiedCaptureVisionSettings.tsx +61 -61
  158. package/src/cvr/index.tsx +11 -11
  159. package/src/dbr/BarcodeDetails.tsx +51 -51
  160. package/src/dbr/BarcodeReaderModule.tsx +9 -9
  161. package/src/dbr/BarcodeResultItem.tsx +65 -65
  162. package/src/dbr/DecodedBarcodesResult.tsx +14 -14
  163. package/src/dbr/ECISegment.tsx +23 -23
  164. package/src/dbr/EnumBarcodeFormat.tsx +112 -112
  165. package/src/dbr/EnumDeblurMode.tsx +29 -29
  166. package/src/dbr/EnumLocalizationMode.tsx +27 -27
  167. package/src/dbr/EnumQRCodeErrorCorrectionLevel.tsx +6 -6
  168. package/src/dbr/SimplifiedBarcodeReaderSettings.tsx +80 -80
  169. package/src/dbr/index.tsx +9 -9
  170. package/src/dce/CameraEnhancer.tsx +254 -254
  171. package/src/dce/CameraEnhancerModule.tsx +9 -9
  172. package/src/dce/CameraView.tsx +100 -100
  173. package/src/dce/DynamsoftCameraViewNativeComponent.ts +96 -96
  174. package/src/dce/DynamsoftImageEditorViewNativeComponent.ts +9 -9
  175. package/src/dce/EnumCameraPosition.tsx +25 -25
  176. package/src/dce/EnumDrawingLayerId.tsx +17 -17
  177. package/src/dce/EnumEnhancedFeatures.tsx +24 -24
  178. package/src/dce/EnumFocusMode.tsx +6 -6
  179. package/src/dce/EnumResolution.tsx +8 -8
  180. package/src/dce/EnumTorchState.tsx +10 -10
  181. package/src/dce/FeedBack.tsx +28 -28
  182. package/src/dce/ImageEditorView.tsx +131 -131
  183. package/src/dce/NativeDynamsoftCameraViewModule.tsx +47 -47
  184. package/src/dce/NativeDynamsoftImageEditorViewModule.ts +9 -9
  185. package/src/dce/index.tsx +13 -13
  186. package/src/dcp/CodeParserDedicatorModule.tsx +9 -9
  187. package/src/dcp/CodeParserModule.tsx +9 -9
  188. package/src/dcp/EnumMappingStatus.tsx +14 -14
  189. package/src/dcp/EnumValidationStatus.tsx +14 -14
  190. package/src/dcp/ParsedResult.tsx +14 -14
  191. package/src/dcp/ParsedResultItem.tsx +50 -50
  192. package/src/dcp/index.tsx +8 -8
  193. package/src/ddn/DeskewedImageResultItem.tsx +40 -40
  194. package/src/ddn/DetectedQuadResultItem.tsx +31 -31
  195. package/src/ddn/DocumentNormalizerModule.tsx +9 -9
  196. package/src/ddn/EnhancedImageResultItem.tsx +20 -20
  197. package/src/ddn/EnumImageColourMode.tsx +14 -14
  198. package/src/ddn/ProcessedDocumentResult.tsx +27 -27
  199. package/src/ddn/SimplifiedDocumentNormalizerSettings.tsx +65 -65
  200. package/src/ddn/index.tsx +11 -11
  201. package/src/dip/ImageProcessingModule.tsx +9 -9
  202. package/src/dip/index.tsx +1 -1
  203. package/src/dlr/CharacterResult.tsx +28 -28
  204. package/src/dlr/LabelRecognizerModule.tsx +9 -9
  205. package/src/dlr/RecognizedTextLinesResult.tsx +19 -19
  206. package/src/dlr/SimplifiedLabelRecognizerSettings.tsx +33 -33
  207. package/src/dlr/TextLineResultItem.tsx +41 -41
  208. package/src/dlr/index.tsx +8 -8
  209. package/src/index.tsx +13 -13
  210. package/src/license/LicenseManager.tsx +49 -49
  211. package/src/license/LicenseModule.tsx +9 -9
  212. package/src/license/NativeDynamsoftLicenseModule.tsx +7 -7
  213. package/src/license/index.tsx +7 -7
  214. package/src/utility/CrossVerificationCriteria.tsx +11 -11
  215. package/src/utility/EnumFilterType.tsx +5 -5
  216. package/src/utility/ImageManager.tsx +348 -348
  217. package/src/utility/MultiFrameResultCrossFilter.tsx +183 -183
  218. package/src/utility/NativeDynamsoftImageManagerModule.tsx +7 -7
  219. package/src/utility/NativeDynamsoftMultiCrossFilterModule.tsx +18 -18
  220. package/src/utility/UtilityModule.tsx +9 -9
  221. package/src/utility/index.tsx +4 -4
  222. 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
+ }