dynamsoft-capture-vision-react-native 3.0.3100 → 3.0.5100
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/android/build.gradle +55 -11
- package/android/src/main/cpp/CMakeLists.txt +22 -0
- package/android/src/main/cpp/ImgHO.cpp +95 -0
- package/android/src/main/cpp/ImgHO.h +34 -0
- package/android/src/main/cpp/JsiCore.cpp +284 -0
- package/android/src/main/cpp/JsiCore.h +51 -0
- package/android/src/main/cpp/JsiCvr.cpp +327 -0
- package/android/src/main/cpp/JsiCvr.h +54 -0
- package/android/src/main/cpp/JsiDbr.cpp +38 -0
- package/android/src/main/cpp/JsiDbr.h +26 -0
- package/android/src/main/cpp/JsiDce.cpp +59 -0
- package/android/src/main/cpp/JsiDce.h +17 -0
- package/android/src/main/cpp/JsiDcp.cpp +51 -0
- package/android/src/main/cpp/JsiDcp.h +31 -0
- package/android/src/main/cpp/JsiDdn.cpp +50 -0
- package/android/src/main/cpp/JsiDdn.h +28 -0
- package/android/src/main/cpp/JsiDlr.cpp +51 -0
- package/android/src/main/cpp/JsiDlr.h +26 -0
- package/android/src/main/cpp/JsiUtility.cpp +196 -0
- package/android/src/main/cpp/JsiUtility.h +16 -0
- package/android/src/main/cpp/RawBuffer.cpp +24 -0
- package/android/src/main/cpp/RawBuffer.h +24 -0
- package/android/src/main/cpp/android_log.h +14 -0
- package/android/src/main/dysJniLibs/debug/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/debug/x86_64/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/x86/librn_dys.so +0 -0
- package/android/src/main/dysJniLibs/release/x86_64/librn_dys.so +0 -0
- package/android/src/main/java/com/dynamsoft/reactnativelib/DCEModule.kt +10 -0
- package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt +2 -0
- package/android/src/main/java/com/dynamsoft/reactnativelib/dce/CameraEnhancerModuleImpl.kt +21 -0
- package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt +3 -3
- package/dynamsoft-capture-vision-react-native.podspec +1 -1
- package/ios/RNDynamsoftCameraViewManager.m +5 -2
- package/ios/RNDynamsoftImageManager.mm +1 -1
- package/package.json +1 -1
- package/src/dce/CameraEnhancer.tsx +9 -0
- package/src/dce/EnumResolution.tsx +7 -0
- package/src/dce/NativeDynamsoftCameraViewModule.tsx +4 -0
- package/src/dce/index.tsx +1 -0
- package/android/src/main/jniLibs/debug/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/jniLibs/debug/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/jniLibs/debug/x86/librn_dys.so +0 -0
- package/android/src/main/jniLibs/debug/x86_64/librn_dys.so +0 -0
- package/android/src/main/jniLibs/release/arm64-v8a/librn_dys.so +0 -0
- package/android/src/main/jniLibs/release/armeabi-v7a/librn_dys.so +0 -0
- package/android/src/main/jniLibs/release/x86/librn_dys.so +0 -0
- package/android/src/main/jniLibs/release/x86_64/librn_dys.so +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/28.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DDN_JSIDDN_H_
|
|
6
|
+
#define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DDN_JSIDDN_H_
|
|
7
|
+
|
|
8
|
+
#include "jni.h"
|
|
9
|
+
#include "jsi/jsi.h"
|
|
10
|
+
#include "JsiCore.h"
|
|
11
|
+
|
|
12
|
+
#define SET_STRING_PROPERTY_BY_METHOD(jClass, jObj, jsObj, propertyName, methodName) \
|
|
13
|
+
jmethodID methodName =env->GetMethodID(jClass, #methodName, "()Ljava/lang/String;"); \
|
|
14
|
+
jstring j##propertyName = (jstring) env->CallObjectMethod(jObj, methodName); \
|
|
15
|
+
const char* p##propertyName = j##propertyName?env->GetStringUTFChars(j##propertyName, nullptr):""; \
|
|
16
|
+
jsObj.setProperty(rt, #propertyName, std::move(p##propertyName)); \
|
|
17
|
+
if(j##propertyName) env->ReleaseStringUTFChars(j##propertyName, p##propertyName); \
|
|
18
|
+
|
|
19
|
+
using namespace std;
|
|
20
|
+
using namespace facebook::jsi;
|
|
21
|
+
|
|
22
|
+
namespace jsiConversion::ddn {
|
|
23
|
+
void jDetectedQuadResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
|
|
24
|
+
void jDeskewedImageResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
|
|
25
|
+
void jEnhancedImageResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
#endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DDN_JSIDDN_H_
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/28.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#include "JsiDlr.h"
|
|
6
|
+
|
|
7
|
+
namespace jsiConversion::dlr {
|
|
8
|
+
void jTextLineResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem) {
|
|
9
|
+
env->PushLocalFrame(8);
|
|
10
|
+
jclass clsItem = env->FindClass("com/dynamsoft/dlr/TextLineResultItem");
|
|
11
|
+
jmethodID getLocation = env->GetMethodID(clsItem, "getLocation", "()Lcom/dynamsoft/core/basic_structures/Quadrilateral;");
|
|
12
|
+
Object jsQuad(rt);
|
|
13
|
+
jsiConversion::core::jQuadToJsObject(rt, env, env->CallObjectMethod(jItem, getLocation), jsQuad);
|
|
14
|
+
jsItem.setProperty(rt, "location", jsQuad);
|
|
15
|
+
|
|
16
|
+
jmethodID getConfidence = env->GetMethodID(clsItem, "getConfidence", "()I");
|
|
17
|
+
jsItem.setProperty(rt, "confidence", env->CallIntMethod(jItem, getConfidence));
|
|
18
|
+
|
|
19
|
+
SET_STRING_PROPERTY_BY_METHOD(clsItem, jItem, jsItem, text, getText)
|
|
20
|
+
SET_STRING_PROPERTY_BY_METHOD(clsItem, jItem, jsItem, specificationName, getSpecificationName)
|
|
21
|
+
|
|
22
|
+
jmethodID getCharacterResults = env->GetMethodID(clsItem, "getCharacterResults", "()[Lcom/dynamsoft/dlr/CharacterResult;");
|
|
23
|
+
auto jCharacterResults = (jobjectArray) env->CallObjectMethod(jItem, getCharacterResults);
|
|
24
|
+
int count = jCharacterResults ? env->GetArrayLength(jCharacterResults) : 0;
|
|
25
|
+
Array jsCharacterResultArray = Array(rt, count);
|
|
26
|
+
for (int i = 0; i < count; ++i) {
|
|
27
|
+
Object jsCharacterResult(rt);
|
|
28
|
+
auto jCharRes = env->GetObjectArrayElement(jCharacterResults, i);
|
|
29
|
+
jCharacterResultToJsObject(rt, env, jCharRes, jsCharacterResult);
|
|
30
|
+
env->DeleteLocalRef(jCharRes);
|
|
31
|
+
jsCharacterResultArray.setValueAtIndex(rt, i, jsCharacterResult);
|
|
32
|
+
}
|
|
33
|
+
env->PopLocalFrame(nullptr);
|
|
34
|
+
}
|
|
35
|
+
void jCharacterResultToJsObject(Runtime &rt, JNIEnv *env, jobject jCharRes, Object &jsCharRes) {
|
|
36
|
+
jclass clsResult = env->FindClass("com/dynamsoft/dlr/CharacterResult");
|
|
37
|
+
jfieldID characterH = env->GetFieldID(clsResult, "characterH", "C");
|
|
38
|
+
jfieldID characterM = env->GetFieldID(clsResult, "characterM", "C");
|
|
39
|
+
jfieldID characterL = env->GetFieldID(clsResult, "characterL", "C");
|
|
40
|
+
jsCharRes.setProperty(rt, "characterH", std::to_string(env->GetCharField(jCharRes, characterH)));
|
|
41
|
+
jsCharRes.setProperty(rt, "characterM", std::to_string(env->GetCharField(jCharRes, characterM)));
|
|
42
|
+
jsCharRes.setProperty(rt, "characterL", std::to_string(env->GetCharField(jCharRes, characterL)));
|
|
43
|
+
|
|
44
|
+
jfieldID characterHConfidence = env->GetFieldID(clsResult, "characterHConfidence", "I");
|
|
45
|
+
jfieldID characterMConfidence = env->GetFieldID(clsResult, "characterMConfidence", "I");
|
|
46
|
+
jfieldID characterLConfidence = env->GetFieldID(clsResult, "characterLConfidence", "I");
|
|
47
|
+
jsCharRes.setProperty(rt, "characterHConfidence", env->GetIntField(jCharRes, characterHConfidence));
|
|
48
|
+
jsCharRes.setProperty(rt, "characterMConfidence", env->GetIntField(jCharRes, characterMConfidence));
|
|
49
|
+
jsCharRes.setProperty(rt, "characterLConfidence", env->GetIntField(jCharRes, characterLConfidence));
|
|
50
|
+
}
|
|
51
|
+
}//namespace jsiConversion::dlr
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/28.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DLR_JSIDLR_H_
|
|
6
|
+
#define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DLR_JSIDLR_H_
|
|
7
|
+
|
|
8
|
+
#include "jni.h"
|
|
9
|
+
#include "jsi/jsi.h"
|
|
10
|
+
#include "JsiCore.h"
|
|
11
|
+
|
|
12
|
+
#define SET_STRING_PROPERTY_BY_METHOD(jClass, jObj, jsObj, propertyName, methodName) \
|
|
13
|
+
jmethodID methodName =env->GetMethodID(jClass, #methodName, "()Ljava/lang/String;"); \
|
|
14
|
+
jstring j##propertyName = (jstring) env->CallObjectMethod(jObj, methodName); \
|
|
15
|
+
const char* p##propertyName = j##propertyName?env->GetStringUTFChars(j##propertyName, nullptr):""; \
|
|
16
|
+
jsObj.setProperty(rt, #propertyName, std::move(p##propertyName)); \
|
|
17
|
+
if(j##propertyName) env->ReleaseStringUTFChars(j##propertyName, p##propertyName); \
|
|
18
|
+
|
|
19
|
+
using namespace std;
|
|
20
|
+
using namespace facebook::jsi;
|
|
21
|
+
|
|
22
|
+
namespace jsiConversion::dlr {
|
|
23
|
+
void jTextLineResultItemToJsObject(Runtime &rt, JNIEnv *env, jobject jItem, Object &jsItem);
|
|
24
|
+
void jCharacterResultToJsObject(Runtime &rt, JNIEnv *env, jobject jCharRes, Object &jsCharRes);
|
|
25
|
+
}
|
|
26
|
+
#endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_DLR_JSIDLR_H_
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/09/23.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#include "JsiUtility.h"
|
|
6
|
+
jobject jImageManagerModule = nullptr;
|
|
7
|
+
jclass jclzQuad = nullptr;
|
|
8
|
+
jclass jclzPoint = nullptr;
|
|
9
|
+
|
|
10
|
+
jobject jsPointToJobject(Runtime &rt, JNIEnv *env, Object jsPoint) {
|
|
11
|
+
if(jsPoint.hasProperty(rt,"x") && jsPoint.hasProperty(rt,"y")) {
|
|
12
|
+
int x = jsPoint.getProperty(rt,"x").asNumber();
|
|
13
|
+
int y = jsPoint.getProperty(rt,"y").asNumber();
|
|
14
|
+
jmethodID init = env->GetMethodID(jclzPoint, "<init>", "(II)V");
|
|
15
|
+
jobject jPoint = env->NewObject(jclzPoint, init, x, y);
|
|
16
|
+
return jPoint;
|
|
17
|
+
}
|
|
18
|
+
return nullptr;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
jobject jsQuadToJobject(Runtime &rt, JNIEnv *env, Object &jsQuad) {
|
|
22
|
+
if(jsQuad.hasProperty(rt,"points")) {
|
|
23
|
+
auto jsPoints = jsQuad.getProperty(rt,"points").asObject(rt).asArray(rt);
|
|
24
|
+
int count = jsPoints.length(rt);
|
|
25
|
+
auto jPoints = env->NewObjectArray(count, jclzPoint, nullptr);
|
|
26
|
+
for (int i = 0; i < count; ++i) {
|
|
27
|
+
auto jPoint = jsPointToJobject(rt, env, jsPoints.getValueAtIndex(rt, i).asObject(rt));
|
|
28
|
+
env->SetObjectArrayElement(jPoints, i, jPoint);
|
|
29
|
+
env->DeleteLocalRef(jPoint);
|
|
30
|
+
}
|
|
31
|
+
auto initQuad = env->GetMethodID(jclzQuad, "<init>", "()V");
|
|
32
|
+
auto fieldId_points = env->GetFieldID(jclzQuad, "points", "[Landroid/graphics/Point;");
|
|
33
|
+
auto jQuad = env->NewObject(jclzQuad, initQuad);
|
|
34
|
+
env->SetObjectField(jQuad, fieldId_points, jPoints);
|
|
35
|
+
return jQuad;
|
|
36
|
+
}
|
|
37
|
+
return nullptr;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
jobjectArray jsQuadArrayToJobjectArray(Runtime &rt, JNIEnv *env, Array &jsQuads) {
|
|
41
|
+
int count = jsQuads.length(rt);
|
|
42
|
+
jobjectArray jQuads = env->NewObjectArray(count, jclzQuad, nullptr);
|
|
43
|
+
for (int i = 0; i < count; ++i) {
|
|
44
|
+
auto jsQuad = jsQuads.getValueAtIndex(rt, i).asObject(rt);
|
|
45
|
+
auto jQuad = jsQuadToJobject(rt, env, jsQuad);
|
|
46
|
+
env->SetObjectArrayElement(jQuads, i, jQuad);
|
|
47
|
+
env->DeleteLocalRef(jQuad);
|
|
48
|
+
}
|
|
49
|
+
return jQuads;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
void saveImageDataHOToFile(Runtime &rt, ImageDataHostObject &imageDataHO, string filePath, bool overWrite) {
|
|
53
|
+
JNIEnv *env;
|
|
54
|
+
bool needDetach = false;
|
|
55
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
56
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
57
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
58
|
+
needDetach = true;
|
|
59
|
+
}
|
|
60
|
+
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
61
|
+
jmethodID methodId = env->GetMethodID(clz, "saveToFileCalledInJsi", "(Lcom/dynamsoft/core/basic_structures/ImageData;Ljava/lang/String;Z)V");
|
|
62
|
+
auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
63
|
+
env->CallVoidMethod(jImageManagerModule, methodId, jImageData, env->NewStringUTF(filePath.c_str()), overWrite);
|
|
64
|
+
env->DeleteLocalRef(clz);
|
|
65
|
+
env->DeleteLocalRef(jImageData);
|
|
66
|
+
if (needDetach) {
|
|
67
|
+
gJvm->DetachCurrentThread();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
ImageDataHostObject drawOnImage(Runtime &rt, ImageDataHostObject &imageDataHO, Array &jsQuads, int color, int thickness) {
|
|
72
|
+
JNIEnv *env;
|
|
73
|
+
bool needDetach = false;
|
|
74
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
75
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
76
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
77
|
+
needDetach = true;
|
|
78
|
+
}
|
|
79
|
+
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
80
|
+
jmethodID methodId = env->GetMethodID(clz, "drawOnImageCalledInJsi",
|
|
81
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;[Lcom/dynamsoft/core/basic_structures/Quadrilateral;II)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
82
|
+
auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
83
|
+
auto jQuads = jsQuadArrayToJobjectArray(rt, env, jsQuads);
|
|
84
|
+
auto jImageDataAfterDraw = env->CallObjectMethod(jImageManagerModule, methodId, jImageData, jQuads, color, thickness);
|
|
85
|
+
ImageDataHostObject imageHOAfterDraw;
|
|
86
|
+
jsiConversion::core::getHOFromJImageData(env, jImageDataAfterDraw, imageHOAfterDraw);
|
|
87
|
+
env->DeleteLocalRef(jQuads);
|
|
88
|
+
env->DeleteLocalRef(jImageDataAfterDraw);
|
|
89
|
+
env->DeleteLocalRef(clz);
|
|
90
|
+
env->DeleteLocalRef(jImageData);
|
|
91
|
+
if (needDetach) {
|
|
92
|
+
gJvm->DetachCurrentThread();
|
|
93
|
+
}
|
|
94
|
+
return imageHOAfterDraw;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
ImageDataHostObject cropImage(Runtime &rt, ImageDataHostObject &imageDataHO, Object &jsQuad) {
|
|
98
|
+
JNIEnv *env;
|
|
99
|
+
bool needDetach = false;
|
|
100
|
+
int state = gJvm->GetEnv((void **) &env, JNI_VERSION_1_6);
|
|
101
|
+
if (state == JNI_EDETACHED || env == nullptr) {
|
|
102
|
+
gJvm->AttachCurrentThread(&env, nullptr);
|
|
103
|
+
needDetach = true;
|
|
104
|
+
}
|
|
105
|
+
jclass clz = env->GetObjectClass(jImageManagerModule);
|
|
106
|
+
jmethodID methodId = env->GetMethodID(clz, "cropImageCalledInJsi",
|
|
107
|
+
"(Lcom/dynamsoft/core/basic_structures/ImageData;Lcom/dynamsoft/core/basic_structures/Quadrilateral;)Lcom/dynamsoft/core/basic_structures/ImageData;");
|
|
108
|
+
auto jImageData = jsiConversion::core::getJImageDataFromHO(env, imageDataHO);
|
|
109
|
+
auto jQuad = jsQuadToJobject(rt, env, jsQuad);
|
|
110
|
+
auto jImageDataAfterCrop = env->CallObjectMethod(jImageManagerModule, methodId, jImageData, jQuad);
|
|
111
|
+
ImageDataHostObject imageHOAfterCrop;
|
|
112
|
+
jsiConversion::core::getHOFromJImageData(env, jImageDataAfterCrop, imageHOAfterCrop);
|
|
113
|
+
env->DeleteLocalRef(jQuad);
|
|
114
|
+
env->DeleteLocalRef(jImageDataAfterCrop);
|
|
115
|
+
env->DeleteLocalRef(clz);
|
|
116
|
+
env->DeleteLocalRef(jImageData);
|
|
117
|
+
if (needDetach) {
|
|
118
|
+
gJvm->DetachCurrentThread();
|
|
119
|
+
}
|
|
120
|
+
return imageHOAfterCrop;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
#define JSI_FUNC [](Runtime &runtime, const Value &thisValue, const Value *arguments, size_t count) -> Value
|
|
125
|
+
|
|
126
|
+
namespace jsi_install::utility {
|
|
127
|
+
void install_imageManager_saveToFile(Runtime &jsiRuntime) {
|
|
128
|
+
auto nameID = PropNameID::forAscii(jsiRuntime, "imageManager_saveToFile");
|
|
129
|
+
if(!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
|
|
130
|
+
auto saveToFileFcn = Function::createFromHostFunction(jsiRuntime, nameID, 3, JSI_FUNC {
|
|
131
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
132
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
133
|
+
auto filePath = arguments[1].asString(runtime).utf8(runtime);
|
|
134
|
+
bool overWrite = arguments[2].asBool();
|
|
135
|
+
saveImageDataHOToFile(runtime, imageDataHostObject, filePath, overWrite);
|
|
136
|
+
return {};
|
|
137
|
+
});
|
|
138
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(saveToFileFcn));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
void install_imageManager_drawOnImage(Runtime &jsiRuntime){
|
|
142
|
+
auto nameID = PropNameID::forAscii(jsiRuntime, "imageManager_drawOnImage");
|
|
143
|
+
if(!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
|
|
144
|
+
auto drawOnImageFcn = Function::createFromHostFunction(jsiRuntime, nameID, 4, JSI_FUNC {
|
|
145
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
146
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
147
|
+
auto jsQuads = arguments[1].asObject(runtime).asArray(runtime);
|
|
148
|
+
auto color = arguments[2].asNumber();
|
|
149
|
+
auto thickness = arguments[3].asNumber();
|
|
150
|
+
ImageDataHostObject imageHOAfterDraw = drawOnImage(runtime, imageDataHostObject, jsQuads, (int) color, (int) thickness);
|
|
151
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageHOAfterDraw));
|
|
152
|
+
});
|
|
153
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(drawOnImageFcn));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
void install_imageManager_cropImage(Runtime &jsiRuntime){
|
|
158
|
+
auto nameID = PropNameID::forAscii(jsiRuntime, "imageManager_cropImage");
|
|
159
|
+
if(!jsiRuntime.global().hasProperty(jsiRuntime, nameID)) {
|
|
160
|
+
auto cropImageFcn = Function::createFromHostFunction(jsiRuntime, nameID, 4, JSI_FUNC {
|
|
161
|
+
auto imageDataObj = arguments[0].asObject(runtime);
|
|
162
|
+
auto imageDataHostObject = ImageDataHostObject::getHOFromObject(runtime, std::move(imageDataObj));
|
|
163
|
+
auto jsQuads = arguments[1].asObject(runtime);
|
|
164
|
+
ImageDataHostObject imageHOAfterCrop = cropImage(runtime, imageDataHostObject, jsQuads);
|
|
165
|
+
if(imageHOAfterCrop.buffer == nullptr) {
|
|
166
|
+
return Value::undefined();
|
|
167
|
+
}
|
|
168
|
+
return Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(imageHOAfterCrop));
|
|
169
|
+
});
|
|
170
|
+
jsiRuntime.global().setProperty(jsiRuntime, nameID, std::move(cropImageFcn));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}//namespace jsi_install::dce
|
|
174
|
+
|
|
175
|
+
void install_imageManager_methods(Runtime &jsiRuntime) {
|
|
176
|
+
jsi_install::utility::install_imageManager_saveToFile(jsiRuntime);
|
|
177
|
+
jsi_install::utility::install_imageManager_drawOnImage(jsiRuntime);
|
|
178
|
+
jsi_install::utility::install_imageManager_cropImage(jsiRuntime);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
extern "C"
|
|
183
|
+
JNIEXPORT void JNICALL
|
|
184
|
+
Java_com_dynamsoft_reactnativelib_utility_ImageManagerModuleImpl_nativeInstall(JNIEnv *env, jobject thiz, jlong jsiPtr) {
|
|
185
|
+
if (!env->IsSameObject(jImageManagerModule, thiz)) {
|
|
186
|
+
jImageManagerModule = env->NewWeakGlobalRef(thiz);
|
|
187
|
+
}
|
|
188
|
+
if(jclzQuad == nullptr) {
|
|
189
|
+
jclzQuad = (jclass) env->NewWeakGlobalRef(env->FindClass("com/dynamsoft/core/basic_structures/Quadrilateral"));
|
|
190
|
+
}
|
|
191
|
+
if(jclzPoint == nullptr) {
|
|
192
|
+
jclzPoint = (jclass) env->NewWeakGlobalRef(env->FindClass("android/graphics/Point"));
|
|
193
|
+
}
|
|
194
|
+
auto rt = reinterpret_cast<Runtime *>(jsiPtr);
|
|
195
|
+
install_imageManager_methods(*rt);
|
|
196
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/09/23.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_UTILITY_JSIUTILITY_H_
|
|
6
|
+
#define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_UTILITY_JSIUTILITY_H_
|
|
7
|
+
#include "JsiCore.h"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
namespace jsi_install::utility {
|
|
11
|
+
void install_imageManager_saveToFile(Runtime &jsiRuntime);
|
|
12
|
+
void install_imageManager_drawOnImage(Runtime &jsiRuntime);
|
|
13
|
+
void install_imageManager_cropImage(Runtime &jsiRuntime);
|
|
14
|
+
}//namespace jsi_install::dce
|
|
15
|
+
|
|
16
|
+
#endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_UTILITY_JSIUTILITY_H_
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/26.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
#include "RawBuffer.h"
|
|
7
|
+
|
|
8
|
+
MutableRawBuffer::MutableRawBuffer(uint8_t* data, size_t size, bool freeOnDealloc)
|
|
9
|
+
: _data(data), _size(size), _freeOnDealloc(freeOnDealloc) {}
|
|
10
|
+
|
|
11
|
+
MutableRawBuffer::~MutableRawBuffer() {
|
|
12
|
+
if (_freeOnDealloc && _data != nullptr) {
|
|
13
|
+
free(_data);
|
|
14
|
+
_data = nullptr;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
size_t MutableRawBuffer::size() const {
|
|
19
|
+
return _size;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
uint8_t* MutableRawBuffer::data() {
|
|
23
|
+
return _data;
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/08/26.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#ifndef REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_MUTABLERAWBUFFER_H_
|
|
6
|
+
#define REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_MUTABLERAWBUFFER_H_
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
#include <jsi/jsi.h>
|
|
10
|
+
using namespace facebook::jsi;
|
|
11
|
+
|
|
12
|
+
class MutableRawBuffer : public MutableBuffer {
|
|
13
|
+
public:
|
|
14
|
+
MutableRawBuffer(uint8_t* data, size_t size, bool freeOnDealloc);
|
|
15
|
+
~MutableRawBuffer() override;
|
|
16
|
+
|
|
17
|
+
uint8_t* data() override;
|
|
18
|
+
[[nodiscard]] size_t size() const override;
|
|
19
|
+
uint8_t* _data;
|
|
20
|
+
size_t _size;
|
|
21
|
+
bool _freeOnDealloc;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
#endif //REACT_NATIVE_DCV_ANDROID_SRC_MAIN_CPP_MUTABLERAWBUFFER_H_
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Created by Allen on 24/05/15.
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
#ifndef DYNAMSOFT_CORE_REACT_NATIVE_ANDROID_SRC_MAIN_CPP_ANDROID_LOG_H_
|
|
6
|
+
#define DYNAMSOFT_CORE_REACT_NATIVE_ANDROID_SRC_MAIN_CPP_ANDROID_LOG_H_
|
|
7
|
+
|
|
8
|
+
#include "android/log.h"
|
|
9
|
+
#define LOG_TAG "Dynamsoft RN JNI"
|
|
10
|
+
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
|
|
11
|
+
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
|
|
12
|
+
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
|
|
13
|
+
|
|
14
|
+
#endif //DYNAMSOFT_CORE_REACT_NATIVE_ANDROID_SRC_MAIN_CPP_ANDROID_LOG_H_
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -99,6 +99,16 @@ class DCEModule(reactApplicationContext: ReactApplicationContext) : ReactContext
|
|
|
99
99
|
impl.turnOffTorch()
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
+
@ReactMethod
|
|
103
|
+
fun setResolution(resolution: Int) {
|
|
104
|
+
impl.setResolution(resolution)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@ReactMethod
|
|
108
|
+
fun getResolution(promise: Promise) {
|
|
109
|
+
impl.getResolution(promise)
|
|
110
|
+
}
|
|
111
|
+
|
|
102
112
|
@ReactMethod
|
|
103
113
|
fun beep() {
|
|
104
114
|
impl.beep()
|
package/android/src/main/java/com/dynamsoft/reactnativelib/cvr/CaptureVisionRouterModuleImpl.kt
CHANGED
|
@@ -63,6 +63,8 @@ class CaptureVisionRouterModuleImpl(private val reactContext: ReactApplicationCo
|
|
|
63
63
|
},
|
|
64
64
|
onProcessedDocumentResultReceived_Event to object : CapturedResultReceiver {
|
|
65
65
|
override fun onProcessedDocumentResultReceived(result: ProcessedDocumentResult) {
|
|
66
|
+
currentDeskewedImages = result.deskewedImageResultItems.map { (it as DeskewedImageResultItem).imageData }.toTypedArray()
|
|
67
|
+
currentEnhancedImages = result.enhancedImageResultItems.map { (it as EnhancedImageResultItem).imageData }.toTypedArray()
|
|
66
68
|
emitResultAndWaitForResponse(onProcessedDocumentResultReceived_Event, result.toWritableMap())
|
|
67
69
|
}
|
|
68
70
|
},
|
|
@@ -2,16 +2,19 @@ package com.dynamsoft.reactnativelib.dce
|
|
|
2
2
|
|
|
3
3
|
import android.graphics.PointF
|
|
4
4
|
import android.util.Log
|
|
5
|
+
import android.util.Size
|
|
5
6
|
import androidx.lifecycle.Lifecycle
|
|
6
7
|
import com.dynamsoft.dce.CameraEnhancer
|
|
7
8
|
import com.dynamsoft.dce.CameraView
|
|
8
9
|
import com.dynamsoft.dce.EnumCameraPosition
|
|
9
10
|
import com.dynamsoft.dce.EnumFocusMode
|
|
11
|
+
import com.dynamsoft.dce.EnumResolution
|
|
10
12
|
import com.dynamsoft.dce.Feedback
|
|
11
13
|
import com.dynamsoft.dce.utils.PermissionUtil
|
|
12
14
|
import com.dynamsoft.reactnativelib.core.ImageSourceAdapterModuleImpl.Companion.mapISA
|
|
13
15
|
import com.dynamsoft.reactnativelib.utils.toScanRegion
|
|
14
16
|
import com.dynamsoft.reactnativelib.utils.toWritableMap
|
|
17
|
+
import com.facebook.react.bridge.Arguments
|
|
15
18
|
import com.facebook.react.bridge.LifecycleEventListener
|
|
16
19
|
import com.facebook.react.bridge.Promise
|
|
17
20
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
@@ -158,6 +161,24 @@ class CameraEnhancerModuleImpl(private val reactContext: ReactApplicationContext
|
|
|
158
161
|
camera.turnOffTorch()
|
|
159
162
|
}
|
|
160
163
|
|
|
164
|
+
|
|
165
|
+
@ReactMethod
|
|
166
|
+
fun setResolution(resolution: Int) {
|
|
167
|
+
if(resolution == 4) {
|
|
168
|
+
camera.setResolution(EnumResolution.RESOLUTION_4K)
|
|
169
|
+
} else {
|
|
170
|
+
camera.setResolution(resolution)
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
@ReactMethod
|
|
174
|
+
fun getResolution(promise: Promise) {
|
|
175
|
+
val resolution = camera.getResolution() ?: Size(0,0)
|
|
176
|
+
promise.resolve(Arguments.createMap().apply {
|
|
177
|
+
putInt("width", resolution.width)
|
|
178
|
+
putInt("height", resolution.height)
|
|
179
|
+
})
|
|
180
|
+
}
|
|
181
|
+
|
|
161
182
|
@ReactMethod
|
|
162
183
|
fun beep() {
|
|
163
184
|
Feedback.beep()
|
package/android/src/main/java/com/dynamsoft/reactnativelib/utility/ImageManagerModuleImpl.kt
CHANGED
|
@@ -35,10 +35,10 @@ class ImageManagerModuleImpl(private val reactContext: ReactApplicationContext)
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
fun cropImageCalledInJsi(imageData: ImageData, quad: Quadrilateral): ImageData? {
|
|
38
|
-
try {
|
|
39
|
-
|
|
38
|
+
return try {
|
|
39
|
+
imageProcessor.cropAndDeskewImage(imageData, quad)
|
|
40
40
|
} catch (e: UtilityException) {
|
|
41
|
-
|
|
41
|
+
null;
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -17,7 +17,7 @@ Pod::Spec.new do |s|
|
|
|
17
17
|
s.private_header_files = "ios/**/*.h"
|
|
18
18
|
s.requires_arc = true
|
|
19
19
|
|
|
20
|
-
s.dependency "DynamsoftCaptureVisionBundle", ">= 3.0.
|
|
20
|
+
s.dependency "DynamsoftCaptureVisionBundle", ">= 3.0.5100", "< 4.0"
|
|
21
21
|
|
|
22
22
|
install_modules_dependencies(s)
|
|
23
23
|
end
|
|
@@ -84,8 +84,7 @@ RCT_EXPORT_METHOD(setCameraView:(nonnull NSNumber *)tag) {
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
RCT_EXPORT_METHOD(selectCamera:(NSInteger)position) {
|
|
87
|
-
|
|
88
|
-
[self.dce selectCameraWithPosition:position error:&error];
|
|
87
|
+
[self.dce selectCameraWithPosition:position completion:nil];
|
|
89
88
|
}
|
|
90
89
|
|
|
91
90
|
RCT_EXPORT_METHOD(getCameraPosition:(RCTPromiseResolveBlock)resolve
|
|
@@ -176,4 +175,8 @@ RCT_EXPORT_METHOD(vibrate) {
|
|
|
176
175
|
[DSFeedback vibrate];
|
|
177
176
|
}
|
|
178
177
|
|
|
178
|
+
RCT_EXPORT_METHOD(setResolution:(NSInteger)resolution) {
|
|
179
|
+
[self.dce setResolution:resolution];
|
|
180
|
+
}
|
|
181
|
+
|
|
179
182
|
@end
|
|
@@ -136,7 +136,7 @@ static void install(jsi::Runtime &jsiRuntime, RNDynamsoftImageManager *rnManager
|
|
|
136
136
|
Object obj = arguments[1].getObject(runtime);
|
|
137
137
|
DSQuadrilateral *quad = convertJSIValueToDSQuadrilateral(runtime, obj);
|
|
138
138
|
NSError *error;
|
|
139
|
-
DSImageData *imageData = [rnManager.processor
|
|
139
|
+
DSImageData *imageData = [rnManager.processor cropAndDeskewImage:data quad:quad error:&error];
|
|
140
140
|
ImageDataHostObject outImageData = [imageData hostObject];
|
|
141
141
|
Object outObj = Object::createFromHostObject(runtime, std::make_shared<ImageDataHostObject>(outImageData));
|
|
142
142
|
return outObj;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dynamsoft-capture-vision-react-native",
|
|
3
3
|
"title": "Dynamsoft Capture Vision React Native",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.5100",
|
|
5
5
|
"description": "The Dynamsoft Capture Vision React Native SDK provides a wrapper for building barcode scanning, document scanning and MRZ scanning applications with React Native.",
|
|
6
6
|
"homepage": "https://github.com/Dynamsoft/capture-vision-react-native-samples",
|
|
7
7
|
"main": "src/index.tsx",
|
|
@@ -4,6 +4,7 @@ import {CameraView} from "./CameraView"
|
|
|
4
4
|
import type {EnumCameraPosition} from "./EnumCameraPosition";
|
|
5
5
|
import type {EnumFocusMode} from "./EnumFocusMode";
|
|
6
6
|
import type {EnumEnhancedFeatures} from "./EnumEnhancedFeatures";
|
|
7
|
+
import type {EnumResolution} from "./EnumResolution";
|
|
7
8
|
|
|
8
9
|
// @ts-ignore Check whether __turboModuleProxy exists, it may not
|
|
9
10
|
const isTurboModuleEnabled = global.__turboModuleProxy != null;
|
|
@@ -220,6 +221,14 @@ export class CameraEnhancer extends ImageSourceAdapter {
|
|
|
220
221
|
DynamsoftCameraEnhancerModule.turnOffTorch()
|
|
221
222
|
}
|
|
222
223
|
|
|
224
|
+
/**
|
|
225
|
+
* Set the resolution of the camera.
|
|
226
|
+
* @param resolution - One of the {@link EnumResolution}.
|
|
227
|
+
* */
|
|
228
|
+
setResolution(resolution: EnumResolution) {
|
|
229
|
+
DynamsoftCameraEnhancerModule.setResolution(resolution);
|
|
230
|
+
}
|
|
231
|
+
|
|
223
232
|
destroy() {
|
|
224
233
|
this.close()
|
|
225
234
|
super.destroy();
|
package/src/dce/index.tsx
CHANGED
|
@@ -8,5 +8,6 @@ export * from "./EnumFocusMode"
|
|
|
8
8
|
export * from "./EnumTorchState"
|
|
9
9
|
export * from "./FeedBack"
|
|
10
10
|
export * from "./ImageEditorView"
|
|
11
|
+
export * from "./EnumResolution"
|
|
11
12
|
export type {CameraViewNativeProps} from "./DynamsoftCameraViewNativeComponent"
|
|
12
13
|
export type {ImageEditorViewNativeProps} from "./DynamsoftImageEditorViewNativeComponent"
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|